Compiling And Programming Systems
Spring 2019, 3 credits. Instructor: Tiark Rompf. TA: Fei Wang.
Announcements will be posted on Piazza. Homework submission and grading will be done through turnin and Blackboard
Lectures are Tuesdays and Thursdays, 12:00pm to 1:15pm, LWSN 1106
TA (Fei Wang) Office hours: Wednesday at 2:00PM to 3:00PM HAAS G050
About the Course
In a nutshell:
The theory and practice of programming language translation, compilation, and run-time systems, organized around a significant programming project to build a compiler for a simple but non-trivial programming language.
Parts of the class are based on the Advanced Compiler Construction class taught by Michel Schinz at EPFL. The corresponding class materials (lecture slides, programming assignments, etc) are used with permission.
Grades: Final grades will be based on results for the programming assignments (50%), midterm (20%), and final exam (30%).
Achieving a minimum of 20% in each of the three components is mandatory for a passing grade.
Late Work Policy: No late submission will be accepted. Exceptions will be given only in the most extreme circumstances. Any travel, including interview trips, load from work or other classes, or simply not being able to get your program to run will not be grounds for extensions or exceptions.
For general policies about academic integrity etc. please see here.
You are expected to read that page and will be held accountable according to its contents.
Modern compiler implementation in Java, Second Edition, Andrew
W. Appel, Cambridge University Press, 1998.
An Incremental Approach to Compiler Construction, Abdulaziz Ghuloum, 2006.
- Engineering a Compiler, Second Edition, Keith D. Cooper, Linda Torczon, 2007.
- Compilers: Principles,
Techniques, and Tools, Aho, Lam, Sethi, Ullman,
A set of lecture notes is available here:
- Introduction to Compilers (pdf)
- Operator precedence and Tokenization (pdf)
- Error handling - Semantics - Branches (pdf)
- Variables - Loops - Type Checking (pdf)
- Type Checking - Functions (pdf)
- Functions - Arrays (pdf)
- Intermediate Representations (pdf)
- Value Representation (pdf)
- Closure Conversion (pdf)
- Optimizations (pdf)
- Dataflow Analysis (pdf)
- Register Allocation (pdf)
- Interpreters And Virtual Machines (pdf)
- Memory Management (pdf)
- Object-Oriented Languages (pdf)
- Project 1: Getting Started (Due Mon Jan 14 11:59pm)
- Project 2: Branches - Loops - Error handling (Due Jan 21 11:59PM)
- Project 3: Type Checking - Functions - Heap Allocation (Due Feb 4 11:59PM)
- Project 4: MiniScala to CPS transformation (Due Feb 13 11:59PM)
- Project 5: Value Representation (Due March 1 11:59PM)
- Project 6: Optimization (Due April 5 11:59PM)
- Project 7: Garbage Collection (Due April 22 11:59PM)