The coursebook contains most of what you need to know to follow the course, including notes on the lectures, instructions for the practical exercises, and appendices describing the instruction sets of the Keiko machine and the ARM, together with listings of relevant modules of the lab compilers.
Some other books and articles:
- The book Modern Compiler Implementation in ML by Andrew Appel (Cambridge) is closest to this course, except that the ML dialect he uses is Standard ML, and not OCaml. There are two translations of the book that use respectively Java and C as the implementation language, but in each case something is lost in the translation.
- The classic text Compilers: principles, techniques and tools by Aho, Hopcroft and Ullman (Addison–Wesley). Either the original 1977 edition or the second edition of 2006 (with Monica Lam) will do. I've been referring to the 1977 edition, but as far as I can see, little of the common material has changed in the second edition.
- Although it differs in many details, Richard Bornat's classic book is close to the course in spirit. I recommend it for supplementary reading.
- For tutorial material on OCaml, there is a copy online of the O'Reilly book Real World OCaml by Yaron Minsky, Anil Madhavapeddy and Jason Hickey.
- In later parts of the course, you might like to look at the reference manual for the ARM architecture. (This edition is not the latest, but it is the first to describe the ARMv6 instruction set we shall target. Later editions have become steadily more complicated as each describes a greater number of variants of the ARM than the one before it.)
- The Revised Report on Algol 60 is the first significant language description to use context free grammars to define the syntax of a programming language. Knuth's paper The remaining trouble spots in Algol 60 fixes the very few problems in the Revised Report.
- Language reports on Oberon and Oberon--2 contain background on various constructs that could be added to our picoPascal language.
- Brian Kernighan's article, Why Pascal is not my favorite programming language, lists deficiencies of Pascal for writing practical programs, some of them later fixed in Oberon and Oberon--2.