Course syllabus

The course has a practical goal: the participants will build a compiler for a small programming language called Javalette. Javalette is an imperative language, a subset of C and of Java.

The complete project will include one front end (lexer, parser and type-checker) and at least one back end: code generators for LLVM. Optional extensions include source language extensions and a native x86 back end.

To reach this goal, quite a few theories and techniques are necessary: grammars, lexers, parsers, abstract syntax, type systems, syntax-directed translation, code analysis, register allocation, optimization. Many of these techniques are supported by tools used in all state-of-the-art compiler construction. Mastering these techniques will help the participants to achieve the practical goal efficiently and reliably. The mastery of them is also useful for many other programming tasks in industry and in academia.

The official syllabus can be found here.