The aim of the course is to develop an understanding of the whole process of compiler construction, starting from lexical analysis and finishing with machine code generation. In the course you will build a complete compiler for a simple imperative language.
The course will give you knowledge and experience needed to:
- Define the lexical and syntactic structure of a programming language and implement them efficiently by using standard tools.
- Define a type system and implement type checking, which both reports errors to the programmer and prepares the program for code generation.
- Know the basic principles of run-time organization, parameter passing, and memory management, and implement them as a part of the compiler.
- Be familiar with both stack machines and register-based machines.
- Design and implement compilation schemes that generate intermediate or assembly code from a source program.
- Use data flow analysis to implement register allocation and code optimizations.