15-411: Compiler Design

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. Standard ML
    2. Java
    3. Haskell
    4. Scala
    5. Learning New Programming Languages for the Labs
  4. Tools
    1. GDB
    2. Garbage Collection

Source Language

C0

The labs will use increasingly more complete subsets of the C0 programming language that is used in the 15-122 Principles of Imperative Computation intro-level course in Computer Science at Carnegie Mellon University.

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

LLVM

Java Virtual Machine (JVM)

Programming Languages for Compiler Implementation

Standard ML

Standard ML Implementations: Standard ML Libraries and Documentation:

Java

Haskell

Scala

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.

Tools

GDB

Garbage Collection