Resources
All kinds of resources useful for the course, from physical books to virtual websites. If you find something good out there, please tell us about it so we can add it here.
Books
Here is something weird: There is no required text for this course. Almost every compiler text out there contains the necessary theoretical background, so feel free to buy any book you like. That said, there are some recommended texts that make a lot of sense for this course. First, obviously, some compiler books; then, since there is a substantial amount of programming to be done, three books to help you organize your project and your code.
- Andrew Appel, Jens Palsberg: Modern Compiler Implementation in Java, Cambridge University Press, 2nd edition, 2003. [Buy]
Reasonably up-to-date, very comprehensive, somewhat terse compiler text. Provides much deeper coverage of most topics than the lectures do, and covers many more topics of interest than we have time for. All examples are in Java, but editions using C or ML exist as well. The 1st edition is also good enough for the course, and it's available much cheaper.
- Keith Cooper, Linda Torczon: Engineering A Compiler, Morgan Kaufmann, 2004. [Buy] [Errata]
A worthy contender for Appel's throne, this recent book also covers much more than you would need to know for our course, but in a very different way. Personally I like it better than the Appel book, but that's mainly based on presentation, not necessarily on content. Examples are in all kinds of languages, but mostly pseudo-code.
- Niklaus Wirth: Compiler Construction, Addison-Wesley, 1996. [Buy] [PDF]
The most compact introduction to compiler construction I know, from an acknowledged master of the craft. Covers all the essentials for this course (in some way) and also develops a complete compiler. All examples are in Oberon, which might seem weird at first but turns out to be quite easy to read after a few hours. Sadly, this book is out of print, probably for good. Luckily, Professor Wirth has made a slightly updated edition available for free as a PDF file [597 KB]. Please do not print this at school! Organize yourselves and have someone print it for all interested students, for example at Kinko's.
Succinct discussion of a variety of intermediate programming topics. Deals with style, documentation, design, testing, debugging, portability, etc. Uses several programming languages (C, C++, Java, Perl) and discusses the tradeoffs involved. Somewhat similar to The Pragmatic Programmer below, but giving you a different perspective. Excellent!
A wealth of practical advice on various topics relevant to software construction, including design, implementation, testing, debugging, etc. Organized in 46 relatively small "lessons," extensively cross-referenced, including 70 "rules" and several check lists on a reference card. Somewhat similar to The Practice of Programming above, but giving you a different perspective. Excellent!
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns, Addison-Wesley, 1995. [Buy]
The standard reference for object-oriented design patterns: well-documented solutions to recurring design and implementation problems. The case study in chapter 2 is also a great introduction to object-oriented design and programming. We'll use a number of patterns in the course, for example Singleton, Composite, Visitor, and Observer.
This list is hardly exhaustive. Feel free to email me suggestions if you find a good book on any of the topics we deal with in the course. :-)
Slides
Here are my old-ish lecture slides, mostly from 2004 and earlier. I would not print this version; especially the later parts are 100% useless since the course has changed a lot (e.g. we're now using MIPS and not some strange stack machine). And there are "bugs" all over the place... You have been warned!
- Slides from 2004 [PDF, 1.4MB]
Exams
Here are some old exams for practice. On average I like my questions quite a bit, so I tend to ask them again and again. But every now and then I add a new twist, so be prepared!
Papers
- Marc Michael Brandis, Hanspeter Mössenböck: Single-Pass Generation of Static Single Assignment Form for Structured Languages. Transactions on Programming Languages and Systems 16(6): 1684-1698, November 1994. [Local Copy]
Links
Here are a bunch of links you might be interested in as you try to get a grip on compilers and interpreters. Some of these are links to online books, so they are not exactly quick reads...
- Dick Grune, Ceriel Jacobs: Parsing Techniques: A Practical Guide
- Pat Terry: Compilers and Compiler Generators: An Introduction with C++
- Anthony Aaby: Compiler Construction using Flex and Bison
- Gerhard Goos: Compiler Construction
- Jack Crenshaw: Let's Build a Compiler
- Diomidis Spinellis: Basic Interpreter in 25 lines of C
- Steven Pemberton, Martin Daniels: Pascal Implementation: The P4 Compiler and Interpreter
Miscellaneous
- Eric S. Raymond: How to Become a Hacker, 2006.
- Steven Pemberton: Enquire (tool)