PREREQUISITE: EECS 321 Programming Languages.  
Recommended: EECS 205 or EECS 213



SYLLABUS, organized by the week of the quarter:

1-2: Intro; lambda-lifting & closure conversion
3-4: Translation to a lower-level intermediate representation (significant simplification the language for subsequent parts of the compiler)
5-6: Optimization (computing the fixed point of a few simple transformations like function inlining and constant propagation)
7: Instruction scheduling (a tree tiling problem, to match the fairly generic lower-level representation to a specific processor's instructions)
8-9: Register allocation (graph coloring)
10: Code walks

GRADES: Grades will primarily be based on codewalks at the end of the quarter, but also based on intermediate projects. This course is programming project heavy.

COURSE OBJECTIVES: Students that complete this course should:

- understand how to efficiently implement a programming language,
- have an accurate performance model for the primitives in a programming language,
- have a good sense for the kind of assembly code that a compiler produces
- be able to maintain and extend a compiler for a programming language

more news