15-411 Compiler Design, Fall 2015


This page always under construction. Links to useful resources are welcome.

Source Language: C0

The labs use increasingly more complete subsets of the C0 programming language that has been designed for 15-122 Principles of Imperative Computation, a freshman-level course at Carnegie Mellon University. C0 is a small safe subset of C with an unambiguous semantics. You are strongly encourage to learn C0, since you will be writing a compiler for this language.

Target Languages and Tools

x86-64 Machine-Level Programming

The following documents will help you fathom the depths of machine-level programming on x86-64 machines.

IA32 and Assembler Reference Material

The following are for the older Intel x86 architectures. See the newer references above for the x86-64 (also known as IA32-EM64T).


LLVM is a potential second target for the compiler for Lab 6

Garbage Collection

Writing a garbage collector for C0 is one of the interesting options for Lab 6

Implementation Languages

You are free to write your compilers in any language you choose. We strongly suggest choosing a statically typed language with algebraic data types and pattern matching. The course staff can provide support for the following languages: SML, OCaml, Haskell, Rust. Students with sufficient background and motivation are welcome to choose other languages.

Standard ML




For Fall 2015 we strongly discourage the use of Scala due to efficiency issues.




Prior Course Instances

Valid CSS! Valid XHTML 1.0 Strict