This new expanded textbook describes all phases of a modern compiler: lexical analysis parsing abstract syntax semantic actions intermediate representations instruction selection via tree matching dataflow analysis graph-coloring register allocation and runtime systems. It includes good coverage of current techniques in code generation and register allocation as well as functional and object-oriented languages that are missing from most books. In addition more advanced chapters are now included