15-411: Compiler Design

  1. Home
  2. >>
  3. Courses
  4. >>
  5. Compiler Fa11
  6. >>
  7. Resources
Table of Contents
  1. Source Language
    1. C0
  2. Target Languages
    1. x86-64 Machine-Level Programming
    2. IA32 and Assembler Reference Material
    3. LLVM
    4. Java Virtual Machine (JVM)
  3. Programming Languages for Compiler Implementation
    1. Learning New Programming Languages for the Labs
    2. Standard ML
    3. Java
    4. Haskell
    5. Scala
  4. Tools
    1. GDB
    2. Garbage Collection

Source Language


The labs will use increasingly more complete subsets of the C0 programming language that is designed for the 15-122 Principles of Imperative Computation intro-level course in Computer Science at Carnegie Mellon University. C0 is a safe subset of the C programming language. All students are strongly encouraged to learn the C0 language that they will write a compiler for in this course.

Target Languages

x86-64 Machine-Level Programming

The following documents will help you fathom the depths of machine-level programming on the x86-64 machines, a 64-bit extension of the Intel instruction set.

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


Java Virtual Machine (JVM)

Programming Languages for Compiler Implementation

You are free to choose from a subset of programming languages or even different programming languages (caveats apply) as the language for writing your compiler. This course requires you to be familiar with the programming language that you chose. You should learn the language before the course so that you do not struggle with too many difficulties at once.

Learning New Programming Languages for the Labs

If you want to learn a new programming language for your lab, consider the following. Students are always encouraged to learn new things and new programming languages. Haskell, for instance, is also a particularly good language for the labs. Because ML, Haskell, and Scala have built-in pattern matching, several transformations are easier to implement than in Java.

Standard ML

Standard ML Implementations: Standard ML Libraries and Documentation:






Garbage Collection