600.328 / 428 / 628: Compilers and Interpreters

You’re in the right place if you want to find out how compilers and interpreters, the tools you’ve been using for quite a while now to do all your programming with, really work. You’ll also pick up some useful software development techniques along the way.


Catalog Description: Introduction to compiler design, including lexical analysis, parsing, syntax-directed translation, symbol tables, run-time environments, and code generation and optimization. Students are required to write a complete compiler as a course project.

Prerequisite(s): 600.120: Intermediate Programming, 600.226: Data Structures. (Having taken 600.233: Computer System Fundamentals and 600.271: Automata and Computation Theory is very helpful too.) The course includes significant programming projects; without prior development experience you’ll probably get lost in a maze of relatively complex code.

Policies: Please read the general course policies and take them to heart. Additional policies specific to this course may be posted at a later date.


  1. Understand the theoretical foundations for compilers and interpreters.
  2. Practice object-oriented design and the application of design patterns.
  3. Implement a full compiler for a high-level imperative language.
  4. Understand the hardware / software tradeoffs involved in language implementation.



There is no required text. However, it is strongly recommended that you get yourself a text book anyway. The following are all excellent, but none covers exactly what we’ll do in the course, and all cover things that we’ll never even mention. Note that most editions will do, you don’t necessarily need the latest and therefore most expensive one.

Compilers and Interpreters

Software Development and Design



Please check the individual assignments for due dates and the structure your solutions should have. See the course policies for detailed submission instructions.

If you have an opinion on these assignments, be it good or bad, please let us know about it. We’re always trying to make these things more enjoyable (if that’s an applicable term? :-).


This is not a schedule. It’s a “log” of what we did, roughly, in each lecture. Don’t expect it to turn into a schedule, it won’t. Also there will eventually be gaps, sorry.