State University of New York at Oswego

  1. COURSE NUMBER AND CREDIT

    CSC 444 - 3 Semester Hours

  2. COURSE TITLE

    Compiler Construction

  3. COURSE DESCRIPTION

    Formal definition of programming languages including specification of syntax and semantics. Structure of compilers. Data structures used in compilation and code generation.

  4. PREREQUISITES

    CSC 344

  5. COURSE JUSTIFICATION

    This course is designed to acquaint students with both theory and the practical problems encountered in language definition and compiler writing.

    Software Engineering Curriculum Justification: This course provides in-depth content-oriented coverage of software design and construction principles underlying most software development tools, and provides a challenging project development experience that relates theory and practice.

  6. COURSE OBJECTIVES

    Upon successful completion of this course, students will be able to:

    1. Construct a full compiler or interpretor for a programming language based on the specification of that language and given target platforms.
    2. Construct parsers for programming, query, and expression languages
    3. Use software tools that assist development of compilers
    4. Choose appropriate compilation techniques for a given compiler
    5. Develop semantic analyses for program representations within compilers and other software development tools
    6. Verify and test correctness of compilation
    7. Understand the principles of advanced compilation techniques.
    8. Apply knowledge of data structures, algorithms, and the formal theory of computation within compilers.

  7. COURSE OUTLINE

    1. Syntax Analysis
      1. Lexical analysis
      2. Top-down parsing
      3. Bottom-up parsing
      4. Use of parser generation tools
    2. Semantic analysis
      1. Tree-based representations
      2. Type checking
      3. Checking static semantics
      4. Use and integration of semantic analysis tools
    3. Code Generation
      1. Targets: Interpretors, virtual machines, instruction sets
      2. Storage and program layout and dynamics
      3. Instruction generation
    4. Optimization
      1. Basic blocks and flow graphs
      2. Within-block, intraprocedural, and interprocedural optimization
      3. Data flow analysis
      4. Register allocation

  8. METHODS OF INSTRUCTION

    1. Lectures.
    2. Exercises
    3. Compiler Project

  9. COURSE REQUIREMENTS

    1. Readings from a main text
    2. Exercises
    3. Semester project: Construction of a compiler for a small but representative language. The project should be submitted in regularly submitted and tested phases (parsing, type checking, etc). Normally, some parts of a project would be assigned individually, and others in small groups

  10. MEANS OF EVALUATION

    1. Examinations.
    2. Exercises
    3. Project presentations and submissions

  11. RESOURCES

    No additional resources are required.

  12. BIBLIOGRAPHY

    A. Aho, M. Lam, R. Sethi, and J. Ullman, Compilers: Principles, techniques, and tools, Addison-Wesley, 2006.

    A. Appel, Modern compiler implementation in Java, Cambridge, 2004.

    K. Cooper and L. Torczon, Engineering a compiler, Elsevier, 2004.


Document:
URL:
Last Update: