CS445/CS545 Compiler Construction
Spring 2002

Instructor: Christino Tamon
Lectures: MWF 10am Science Center 356
Laboratory meets: F 10am SUN lab Rowley 142 and/or COSI lab SC346
Office hours: Science Center 373 MW 8-10am, 11-noon F 9-10am
Pre-requisites: CS344, CS345.
Syllabus: A study of compiler design. Overview of the compilation process. Formal definition of syntax, lexical scanning, parsing including LL and LR grammars, run-time structures, intermediate code generation, and storage allocation. Students are expected to develop a compiler for a substantial subset of a high-level language using compiler tools such as lex and yacc.

Course grading: Project 50%, Exams 40%, Miscellaneous 10%

Texts: [main][recommended]

Tentative Outline

  1. Language translation. Compilation. Overview.
  2. Lexical Analysis. Regular expressions.
  3. Syntax Analysis. Theory of Parsing: top-down LL(1); bottom-up SLR(1), LR(1) (and LALR(1)).
  4. Semantic Analysis. Parse trees. Syntax-directed translation. Type checking.
  5. Code generation. Runtime environments.

Readings and notes

Our Dragon course project

The goal of the project is to build a compiler for a large chunk of the Pascal programming language that will output a SPARC assembly program. This project will give you a chance to apply skills you learned from other courses along with hopefully new ones: To synchronize the compiler project, make your compiler take a single input Pascal file (with suffix extension of ".p", say "main.p") and make it write the SPARC assembly output to file with the same name except for the suffix (which is changed to ".s", so "main.s"). We will then use GCC to produce the executable by "gcc main.s". So if your compiler executable is called yapc then the following sequence should be used to test all our final executables.
yapc main.p
gcc main.s


Full report (due before dead week) containing at least the following items:


During the dead and final exam week, schedule a meeting to present the online demonstration of the compiler. Be prepared for some extra testing and questions about your compiler project.

Assignments (mini projects)