15-411 Compiler Design, Fall 2015

Course Information

This course is also listed as 15-611 Compiler Design.


This course covers the design and implementation of compiler and runtime systems for high-level languages, and examines the interaction between language design, compiler design, and runtime organization. Topics covered include lexical and syntactic analysis, type-checking, program analysis, code generation and optimization, memory management, and runtime organization.

Please see the calendar for the lecture topics and links to the references and notes. The schedule is subject to change during the course of the semester.

Lecture is your primary source of information in this course. The course notes and texts are supplementary to lecture, rather than the primary sources of information. You are strongly urged to attend lecture every week, and are in any case responsible for the material presented in lecture. Andrew Appel's Modern Compiler Implementation in ML is an optional textbook, if you really like textbooks.

Additionally, because your compilers will target x86-64 assembly, Chapter 3 of the second or (even better) the third edition of Bryant and O'Hallaron's Computer Systems: A Programmer's Perspective, or some equivalent reference, will be indespensible. The posted slides from 213, or your own 213 notes, will probably suffice.


This is a project-based course that is graded out of 1000 points. There are no predetermined cut-offs. Instead, the teaching staff will decide on grade boundaries at the end of the year. We will use intangibles, such as participation in class, for those close to grade boundaries.

The first four projects are compiler test cases and compilers for the programming languages L1, L2, L3, and L4; each project is worth 100 points (400 points total).

The last two projects are more open-ended. The fifth project is to optimize your L4 compiler to produce faster executable files. For the sixth project you can pick one of several pre-defined projects or define your own project. Both final projects include a written component and are worth 150 points (300 points total).

All projects are intended to be completed with a partner. Choose partners carefully; except for exceptional cases, you will work with the same partner for the entire semester.

Finally, there are five written homework assignments, each worth 60 points, that are completed individually, not with a partner (300 points total).

Collaboration and Academic Integrity

The university policies and procedures on academic integrity will be applied rigorously.

All labs in this course must be done either by a single student or by a pair of students. The work must be your own and your partner's. Do not copy any parts of the lab from anyone. Do not look at other students' code. Do not make parts of your code available to anyone besides your partner, and make sure noone else can read your files.

General libraries, such as the SML Basis Library, the SML/NJ Library, or other publicly available libraries may be used in your code. This also includes the code supplied with the textbook. Please clearly identify if you used library code, credit its source, and summarize any changes you may have made to the library. Portions of other students' compilers, from this or previous semesters, are explicitly prohibited. If in doubt, please contact the instructor.

All assignments in this course are single-student assignments. The work must be all your own. Do not copy any parts of any of the assignments from anyone. Do not look at other students' papers. Do not make any parts of your assignments available to anyone, and make sure noone can read your files.

We will be using the Moss system to detect software plagiarism.

It is not considered cheating to clarify vague points in the labs, assignments, or textbook, or to give help or receive help in using the computer systems, compilers, debuggers, profilers, or other facilities.

Valid CSS! Valid XHTML 1.0 Strict