In the time since the 1986 edition of this book, the world of compiler design
has changed significantly. Programming languages have evolved to present new
compilation problems. Computer architectures offer a variety of resources of
which the compiler designer must take advantage. Perhaps most interestingly,
the venerable technology of code optimization has found use outside compilers.
It is now used in tools that find bugs in software, and most importantly, find
security holes in existing code. And much of the "front-end" technology
grammars, regular expressions, parsers, and syntax-directed translators — are
still in wide use.
Thus, our philosophy from previous versions of the book has not changed.
We recognize that few renders will build, or even maintain, a compiler for a
major programming language. Yet the models, theory, and algorithms associ
ated with a compiler can be applied to a wide range of problems in software
design and software development. We therefore emphasize problems that are
most commonly encountered in designing a language processor, regardless of
the source language or target machine.
This book provides the foundation for understanding the theory and pracitce of compilers. Revised and updated, it reflects the current state of compilation. Every chapter has been completely revised to reflect developments in software engineering, programming languages, and computer architecture that have occurred since 1986, when the last edition published. The authors, recognizing that few readers will ever go on to construct a compiler, retain their focus on the broader set of problems faced in software design and software development. Computer scientists, developers, and aspiring students that want to learn how to build, maintain, and execute a compiler for a major programming language.