Modern Compiler Implementation in Java

by Andrew Appel

This textbook explains all phases of a modern compiler: lexical analysis, parsing, abstract syntax, semantic actions, intermediate representations, instruction selection via tree matching, dataflow analysis, graph-colouring register allocation with coalescing, and runtime systems. It covers current techniques in code generation and register allocation, as well as functional and object-oriented languages, which are missing from most books on the topic. The author illustrates the most accepted and successful techniques in a concise way, rather than as an exhaustive catalogue of every possible variant. Detailed descriptions of the interfaces between modules of a compiler are illustrated with actual Java classes. A unique feature of the book is a well designed compiler implementation project in Java, including front-end and ‘high-tech’ back-end phases, so that students can build a complete working compiler in one semester. The textbook is meant for use in a one-semester first course for undergraduates in compiler design. Accompanying support software is available.

Describes all phases of a modern compiler: lexical analysis, parsing, abstract syntax, semantic actions, dataflow analysis and runtime systems. Covers current techniques in code generation and register allocation. Paper.