Official Course Description

The course aims to teach the fundamental aspects of analyzing computer languages and mapping them into executable form. At the end of the course, the student should
 - be able to define the formal syntax of computer languages,
 - be able to define the meaning of computer languages through interpreters,
 - know the internal structure and implementation of simple compilers
 - be able to write a compiler that maps a simple programming language into the code of a virtual machine,
 - know common frameworks and design patterns used in compiler construction, 
 - know run-time representations of important programming constructs.

Some less tangible, but nevertheless important goals are: 

 - Improving the understanding of programming languages, 
 - Understanding trade-offs between expressiveness, simplicity, and performance of programming languages,  
 - Experience the design and implementation of a sizable software
   project where theory is essential for success.


1. Overview, source languages and run-time models
2. Review of formal languages
3. Lexical analysis
4. Syntactic analysis
5. Abstract syntax
6. Semantic analysis
7. Run-time organisation
8. Code generation
9. Garbage collection