These are lecture notes that go with the Compiler Construction course taught at Delft University of Technology.

The course takes the perspective of declarative language definition, using high-level declarative meta-language the define / specify the various aspects of programming languages. Given such definitions, the implementation of various compiler components can be generated automatically. In the course we study the use of meta-languages to define compilers. In the lab assignments for the course students build a compiler for MiniJava, a subset of the Java programming language using the Spoofax Language Workbench.

In the lectures and in these lecture notes, we study these meta-languages, and also their underlying theory and implementation.