A compiler translates a high-level language program into a functionally equivalent low-level language program that can be understood and executed by the computer. Crucial to any computer system, effective compiler design is also one of the most complex areas of system development. Before any code for a modern compiler is even written, many students and even experienced programmers have difficulty with the high-level algorithms that will be necessary for the compiler to function. Written with this in mind, Algorithms for Compiler Design teaches the fundamental algorithms that underlie modern compilers. The book focuses on the "front-end" of compiler design: lexical analysis, parsing, and syntax. Blending theory with practical examples throughout, the book presents these difficult topics clearly and thoroughly. The final chapters on code generation and optimization complete a solid foundation for learning the broader requirements of an entire compiler design.