Course Description

This course is an introduction to the specification and implementation of modern optimizing compilers. Topics include conventional ones like lexical analysis, parsing, type checking, dataflow analysis, optimization, and code generation, as well as unconventional ones like self-optimizing programs, machine learning in smart compilers, and the use of language processing technology in security and verification of programs.

There will be 4 or 5 substantial programming assignments and a final project.

The final project involves building a compiler for an object-oriented language.

Prerequisites: Grade of C or better in CS 310/310H, 336/336H, and Math 408D/408M OR permission of instructor.

Book: Compilers: Principles, Techniques, and Tools by Aho et al. Addison-Wesley Publishers

Course Staff
Instructor: Professor Keshav Pingali
Email: pingali 'at' cs 'dot' utexas 'dot' edu
Office: ACES 4.126A
TA: Donald Nguyen
Email: ddn 'at' cs 'dot' utexas 'dot' edu
Office: ACES 4.104
Office Hours: Wednesdays 10am-11am in ENS 31NQ Desk #3 (directions)
Course Material
Lecture notes

SaM SaM is the architectural simulator that we will use to test and evaluate programs for the first few assignments.
  • SaM Simulator - This is what you'll need to run and test your own SaM programs. To run, make sure that you have a recent version of Java installed. Then, either (a) double click the jar file, or (b) type java -jar SaM-2.6.2.jar at the command line.
  • SaM Design Document - This is a high-level overview of how SaM is designed and includes a very useful description of all the SaM instructions.
  • SaM API Documents - This is the javadoc for the SaM simulator. This is useful for understanding how to connect your compiler up to the SaM tokenizer.
  • SaM Examples - This is a collection of example SaM programs to get a sense of what they should look like.
  • SaM Simulator Source - This is the source code for the SaM simulator. Though not necessary for your assignments, you may enjoy browsing the source.