- COURSE NUMBER AND CREDIT
CSC 444 - 3 Semester Hours
- COURSE TITLE
Compiler Construction
- COURSE DESCRIPTION
Formal definition of programming languages including
specification of syntax and semantics. Structure of
compilers. Data structures used in compilation and
code generation.
- PREREQUISITES
CSC 344
- 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.
- COURSE OBJECTIVES
Upon successful completion of this course, students will be able to:
- Construct a full compiler or interpretor for a programming language
based on the specification of that language and given target platforms.
- Construct parsers for programming, query, and expression languages
- Use software tools that assist development of compilers
- Choose appropriate compilation techniques for a given compiler
- Develop semantic analyses for program representations within
compilers and other software development tools
- Verify and test correctness of compilation
- Understand the principles of advanced compilation techniques.
- Apply knowledge of data structures, algorithms, and the
formal theory of computation within compilers.
- COURSE OUTLINE
- Syntax Analysis
- Lexical analysis
- Top-down parsing
- Bottom-up parsing
- Use of parser generation tools
- Semantic analysis
- Tree-based representations
- Type checking
- Checking static semantics
- Use and integration of semantic analysis tools
- Code Generation
- Targets: Interpretors, virtual machines, instruction sets
- Storage and program layout and dynamics
- Instruction generation
- Optimization
- Basic blocks and flow graphs
- Within-block, intraprocedural, and interprocedural optimization
- Data flow analysis
- Register allocation
- METHODS OF INSTRUCTION
- Lectures.
- Exercises
- Compiler Project
- COURSE REQUIREMENTS
- Readings from a main text
- Exercises
- 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
- MEANS OF EVALUATION
- Examinations.
- Exercises
- Project presentations and submissions
- RESOURCES
No additional resources are required.
- 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.