In this course you will learn how to build a compiler. A compiler takes a source language as input and produces a binary that can be directly executed by the computer’s hardware. The course is divided into the following five topics:
- Introduction to Compilers
- Lexical and Syntax Analysis
- Intermediate Representation
- Code Generation
The course is taught in an inverted mode. Every week we will assign a set of videos that should be watched online. You will also be required to answer a multiple-choice test to ensure that you have understood the material in the videos.
During class hours, we will review together the material in the videos. You should prepare questions and feel free to ask them and discuss them with the group. We will also investigate some extra topics that are not covered in the videos.
During lab hours, you will work on computer assignments in which you will develop the different parts of your own compiler.
Students are expected to have good programming skills in C and a basic knowledge of C++. Students should also understand the general concepts of computer architectures and operating systems; in particular they should known how the CPU executes assembly programs and how the memory is organized. Finally, students should know regular expressions and finite automata.
We are grateful to Andrew W. Appel for his excellent book series Modern Compiler implementation on which this course was inspired.
We’d also like to thank Akim Demaille and the LRDE team for the excellent Tiger reference manual and for making freely available their compilation course.