P.D. Terry, Rhodes University
A complete revision of my earlier book (Compilers and Compiler Generators (1997)), using C# and Java and versions of the compiler generator Coco/R for those languages, was published as "Compiling with C# and Java" by Pearson Education on 5th November 2004. Following standard publisher practice, the book records a publication year of 2005, and the ISBN is 0-321-26360-X.
(17 April 2021)
This book is now out of print, and the copyright and distribution right have returned to me.
Download a ZIP file containing all the files for this edition.
Complete text as a single PDF file
HTML PDF Preface and Acknowledgements
HTML PDF Chapter 1 - Translators and Languages
1.1 Objectives
1.2 Systems programs and translators
1.3 The benefits of using high-level languages
1.4 The curse of complexity
1.5 Successful language design
1.6 The benefits of formal description
HTML PDF Chapter 2 - Translator Classification and Structure
2.1 Classes of translator
2.2 T-diagrams
2.3 Self-resident compilers, cross compilers and self-compiling compilers.
2.4 Linkers and loaders
2.5 Phases in translation
2.6 Multi-stage translators
2.7 Interpreters, interpretive compilers and emulators
2.8 The P-system and the JVM
2.9 JIT compilers and the .NET Framework
HTML PDF Chapter 3 - Compiler Development and Bootstrapping
3.1 Using a high-level language to develop a compiler for a new high-level language
3.2 Using a high-level language to develop a two-stage compiler for a new language
3.3 Bootstrapping
3.4 Self-compiling compilers
3.5 The half bootstrap - porting a compiler to a different machine
3.6 Bootstrapping from a portable interpretive compiler
3.7 A P-code assembler
3.8 The use of compiler generating tools
3.9 Diagrams for some case studies
HTML PDF Chapter 4 - Stack Machines
4.1 Simple machine architecture
4.2 ASSEMBLER languages
4.3 Addressing modes
4.4 The PVM - a simple stack machine
4.5 Programming the PVM
4.6 An emulator for the PVM
4.7 A minimal assembler for PVM code
4.8 Enhancing the efficiency of the emulator
4.9 Error handling in the PVM
4.10 Enhancing the instruction set of the PVM
4.11 Another stack machine - the JVM
4.12 The CLR - a conceptual stack machine
HTML PDF Chapter 5 - Language Specification
5.1 Syntax, semantics, and pragmatics
5.2 Languages, symbols, alphabets and strings
5.3 Regular expressions
5.4 Grammars and productions
5.5 Classic BNF notation for productions
5.6 Simple examples
5.7 Phrase structure and lexical structure
5.8 ε-productions
5.9 Extensions to BNF
5.10 Syntax diagrams
HTML PDF Chapter 6 - Development and Classification of Grammars
6.1 Equivalent grammars
6.2 Case study - equivalent grammars for describing expressions
6.3 Some simple restrictions on grammars
6.4 Ambiguous grammars
6.5 The Chomsky hierarchy
HTML PDF Chapter 7 - Deterministic Top-Down Parsing
7.1 Deterministic top-down parsing
7.2 Restrictions on grammars so as to allow LL(1) parsing
7.3 Restrictions on grammars defined using EBNF notation
7.4 Language design and the consequences of the LL(1) conditions
7.5 Case study - Parva
HTML PDF Chapter 8 - Parser and Scanner Construction
8.1 Construction of simple recursive descent parsers
8.2 Case study - a parser for assignment sequences
8.3 Other aspects of recursive descent parsing
8.4 Syntax error detection and recovery
8.5 Construction of simple scanners
8.6 Case study - a scanner for Boolean assignments
8.7 Keywords and literals
8.8 Comment handling
HTML PDF Chapter 9 - Syntax-directed Translation
9.1 Embedding semantic actions into syntax rules
9.2 Attribute grammars
9.3 Synthesized and inherited attributes
9.4 Classes of attribute grammars
HTML PDF Chapter 10 - Coco/R: A Detailed Guide
10.1 Coco/R - a brief history
10.2 Installing and running Coco/R
10.3 Overall form of a Cocol description
10.4 Scanner specification
10.5 Parser specification
10.6 The driver program
HTML PDF Chapter 11 - Coco/R - A Simple Assembler for the PVM
11.1 Case study - A simple assembler for the PVM
HTML PDF Chapter 11 - Coco/R - Case Studies (from the 2005 Edition)
11.1 Case study - Understanding C declarations
11.2 Case study - Generating one-address code from expressions
11.3 Case study - Generating one-address code from an AST
11.4 Case study - Manipulating EBNF productions
11.5 Case study - A simple assembler for the PVM
11.6 Further projects
HTML PDF Chapter 12 - A Parva Compiler - the Front End
12.1 Overall compiler structure
12.2 Source handling
12.3 Error reporting
12.4 Scanning and parsing
12.5 Syntax error recovery
12.6 Constraint analysis
HTML PDF Chapter 13 - A Parva Compiler - the Back End
13.1 Extending the symbol table entries
13.2 The code generation interface
13.3 Using the code generation interface
13.4 Code generation for the PVM
13.5 Towards greater efficiency
HTML PDF Chapter 14 - A Parva Compiler - Functions and Parameters
14.1 Void functions
14.2 Constraint analysis
14.3 Run-time storage management
14.4 A complete compiler for a set of void functions
14.5 Globally accessible constants and variables
14.6 Value-returning (non-void) functions
14.7 Mutually recursive functions
HTML PDF Appendix B - Library routines
HTML PDF Appendix C - Context-free grammars and I/O facilities for Parva and C#Minor
HTML PDF The programming language Parva (Level 1, Chapter 13)
HTML PDF The programming language Parva (Level 2, Chapter 14)
HTML PDF The GNU General Public Licence
HTML PDF Differences between the Linz and extended versions of Coco/R
The C# software described in this book was originally developed using the SSCLI (Rotor) distribution from Microsoft.
The Java software was originally developed using the JDK from Sun and also the open source Jikes compiler from IBM's DeveloperWorks.
The following papers and reports may also be of interest:
PDF Coco/R - A Generator for Fast Compiler Front-Ends (Hanspeter Mössenböck, ETH Zürich Technical Report
PDF LL(1) Conflict Resolution in a Recursive Descent Compiler Generator (Albrecht Wöß, Markus Löberbauer, Hanspeter Mössenböck, 2004)
PDF Data Structures in Coco/R (Hanspeter Mössenböck, 2004)
PDF How to Build Abstract Syntax Trees with Coco/R (Hanspeter Mössenböck, 2011)
HTML Useful links to other resources (Needs revision!)
PDF Extended Coco/R User Manual (Pat Terry, 2005, following Mössenböck)
HTML PDF Pitfalls and tips when using Coco/R (Pat Terry, 2021)