A compiler is one of the most vital parts of a computer's system software, translating programs written in a high-level language (such as Pascal, Ada, C++, Prolog or LISP) into low-level commands that the machine can understand and execute. This book covers compilation techniques for object-oriented, functional, logic and distributed languages. It focuses on essential techniques common to all language paradigms, and gives students the skills required for modern compiler construction.