This textbook covers the fundamentals of compiler construction, from lexical analysis and syntax analysis to semantic processing and code generation. As a running example, a compiler for a simple Java-like programming language (MicroJava) is described and developed. It generates executable bytecode similar to Java bytecode. Other topics include the description of translation processes using attributed grammars and the use of a compiler generator to automatically generate the core parts of a compiler. For syntax analysis, the book concentrates on top-down parsing using recursive descent, but also describes bottom-up parsing. All code examples are presented in Java.
A companion web page contains a full set of PowerPoint slides for an introductory compiler course, sample solutions for more than 70 exercises provided at the end of each chapter to practice and reinforce the content of that chapter, and the full source code of the MicroJava compiler as well as other code samples. In addition, the open-source compiler generator Coco/R described in the book is provided as an executable and in source code.
The book targets both students of Computer Science or related fields as well as practitioners who want to apply basic compiling techniques in their daily work, e.g., when crafting software tools. It can be used as a textbook for an introductory compiler course on which more advanced courses on compiler optimizations can be based.