Describes the techniques involved in writing compilers for high-level languages such as FORTRAN or PL/1. Treats both theory and practical aspects of compiler writing. Discusses semantic routines, their purposes and their connection to syntax recognition.
Of course the dragon book (Compilers: Principles, Techniques, & Tools with Gradiance) is currently more well-known as a classic. I read this book because I kept running across old references to Gries's work. The advice is amazingly current. It also happens to be the book that Bjarne Stroustrup learned compiler writing from (pgs. 3, 4). It lacks all discussion of object oriented techniques, but it covers top down and bottom/precedence parsing, multi-pass techniques, dynamic linking, interpreters, preprocessors, optimization, separating the assembler from the compiler, macros and "compiler compilers" similar to yacc.
It also mentions getting input from punched cards, and spends a lot of time on single-pass compiler techniques (which generally use less memory and could run on 1960s-era computers). It was an enjoyable read. And, although it is a little dated, it has held up surprisingly well.
During the 1970s I gave university courses on compilers and programming languages. I used David Gries' book as one of the core reference materials on the subject. I found the book very sound both practically and theoretically.
I also used the principles and the tips presented in the book when writing the compiler for a machine-oriented programming language I designed in a research project. The compiler was written in Pascal and it was internally based on top-down syntax and semantic analysis.
Now, 40 years later, I still have the book in my bookshelf! Computer books get out of date and thrown away very quickly but this one I have kept. It is one of my favorite computer books of all times. Professor David Gries did an excellent job when writing this book.