The course consists of a single project: constructing a compiler for a small Java-like programming language in groups of one to two students. Groups of two are recommended.
To pass this course, students must pass three assignments in the Fire system, and a short oral exam during exam week.
The assignments test your ability to produce a working compiler, and determine your grade for this course. Make sure that your compiler passes the test suite before submitting. Deadlines are strict; extensions will only be granted under exceptional circumstances, and even then only if requested before the deadline in question has passed.
The individual oral exam tests that all group members have been actively involved in the project and share a full understanding of the compiler. You will be asked to present your compiler to the examiner, who will then ask you some questions about it. Someone else did X, I worked on Y instead is not considered a valid answer.
You must hand in your final assignment before being allowed to take the oral exam. No exceptions to this rule will be considered.
What Will You Learn?
- In short, this course teaches students about compilers and how to develop them. The course is based around a project where participants build a compiler for a small programming language called Lavallette. Javalette is an imperative language, a subset of C and of Java. The finished compiler includes a frontend (lexer, parser and type-checker) and at least one backend, generating LLVM code. Optional extensions include source language extensions and a backend targeting x86 assembly.
- By completing this course, students will learn concepts and techniques such as grammars, lexes, parsers, abstract syntax, type systems, syntax-directed translation and code analysis. All of these techniques are used in state-of-the-art compilers.
Introduction to compilers
Lexical analysis and scanners