Syntax
-
Sipser’s Introduction to the Theory of Computation. We will cover some of the same material on context free grammars, but Sipser does not have anything on the LL(1) class or predictive parsing. Note that Sipser’s definitions are generally a bit different, and he uses different notation. However, they are equivalent to ours, so if you can get over the superficial differences, then this is good supplementary material. Some of the problem sheet exercises are drawn from this book, which contains many more.
-
Kozen’s Automata and Computability. We will cover some of the same material on context free grammars, but Kozen des not have anything on the LL(1) class or predictive parsing. Kozen’s definitions are sometimes a little different but equivalent to ours. Some of the problem sheet exercises are drawn from this book, which has many others.
-
Appel’s Modern Compiler Implementation in ML. There are also versions of this book “… in Java” and “… in C” for those who like to hurt themselves. This has some of the basics of what we cover in weeks 1 – 4, but typically goes less deep (except lexing, where it covers more).
-
Aho, Lam, Sethi and Ullman’s Compilers — Principles, Techniques and Tools. This is the classic reference on compilers, it covers more techniques for parsing and everything else you might want to know about compilation, but less on the theory of context-free grammars.
Semantics
- Nielson and Nielson’s Semantics with Applications. This covers a version of the While language from abstract syntax onwards.