15-411 on Github


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 encouraged 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 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.


The distributed version-control system we use.

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, and Haskell. Students with sufficient background and motivation are welcome to choose other languages.

Standard ML

Standard ML Libraries and Documentation






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


Prior Course Instances