15-411 Compiler Design
This course covers the design and implementation of compiler and runtime systems for high-level languages, and examines the interaction between language design, compiler design, and runtime organization. Topics covered include lexical and syntactic analysis, type-checking, program analysis, code generation and optimization, memory management, and runtime organization.
Lectures
- Tue/Thu 09:30AM – 10:50AM (ET)
- In-person at BH A51
- Instructor: Jan Hoffmann
Recitations
- Recitation A: Fri 1:00 - 1:50 PM (ET) at BH::237B
- Recitation B: Fri 2:00 - 2:50 PM (ET) at BH::235A
- Recitation C: Fri 4:00 - 4:50 PM (ET) at WEH::2302
- Recitation D: Fri 1:00 - 1:50 PM (ET) at GHC::4301
Office Hours
In-person, see Google Calendar and staff page for schedule.
Course Calendar
Learning Objectives
- Distinguish the main phases of a state-of-the-art compiler
- Understand static and dynamic semantics of an imperative language
- Develop parsers and lexers using parser generators and combinators
- Perform semantic analysis
- Translate abstract syntax trees to intermediate representations and static single assignment form
- Analyze the dataflow in an imperative language
- Perform standard compiler optimizations
- Generate efficient assembly code for a modern architecture
- Allocate registers using a graph-coloring algorithm
- Understand opportunities and limitations of compiler optimizations
- Appreciate design tradeoffs how representation affects optimizations
- Automatically manage memory using garbage collection
- Develop complex software following high-level specifications
Please see the calendar for the lecture topics and links to the references and notes. The schedule is subject to change during the course of the semester.
Sponsoring
15-411/611 Compiler Design is supported by Jane Street Capital.