This book is concerned with the implementation of computer languages. It aims to describe the design and construction of language compilers in sufficient detail for the reader to be able to implement a language. The main language considered is PASCAL, but consideration is given to other languages where appropriate. It is assumed that the reader is familiar with PASCAL. Knowledge of an assembly language, though not essential, will aid understanding of the compiled code sequences in the later chapters. The authors have tried to present a systematic, engineered but practical approach to compiler writing. An attempt is made to give a balanced view of the total problem facing the computer writer and practical examples and suggestions for both paper exercises and coursework on the computer are provided. The first part of the text presents a complete compiler for a simple language. The simple language is a small subset of PASCAL and the compiler is written in standard PASCAL. These chapters form a self contained introduction to compilers and can be read independently from the rest of the book. In the remainder of the book, the organization of the algorithms used in and the form of compiled code generated by a complete PASCAL system are considered in some detail. The ideas introduced in the simple compiler are developed and applied to the construction of a PASCAL compiler. Each phase of the compiling process is considered in turn. The hope is that at the end of this text the reader will have gained a thorough comprehension of the correspondence between high level programming language statements and machine instructions, and that she/he will also understand how high level language constructs are transformed or translated into machine instructions and be able to tackle a compiler construction project.