Lecture notes fully updated through Lecture 31.
| Lecture | Date | Lecture topic | Readings | Assignments | |
|---|---|---|---|---|---|
| Parsing | |||||
| 1 | Aug 28 | Course overview | Course overview | ||
| 2 | 31 | Lexical analysis and regular expressions | Appel 1 | PS1 out | |
| 3 | Sep 2 | Automating lexical analysis | Appel 2.1–2.5 | ||
| 4 | 4 | Grammars and parsing | Appel 3.1 | ||
| 5 | 7 | Top-down (LL) parsing | Appel 3.2 | PS1 due, PA1 out 9/5 | |
| 6 | 9 | Bottom-up parsing | Appel 3.3 | ||
| 7 | 11 | LR parsing and parser generators | Appel 3.4, 4.1–4.2 [example] | PS2 out 9/10 | |
| Static semantics | |||||
| 8 | 14 | Semantic analysis and symbol tables | Appel 5 | PA1 due, PA2 out | |
| 9 | 16 | Types | (Dragon 6.5) | ||
| 10 | 18 | Type systems | PS2 due (add deadline) | ||
| 11 | 21 | Subtyping | |||
| 12 | 23 | Modules, type representation, visitors [notes, slides] | Appel 4.3 | PA2 due | |
| Code generation | |||||
| 13 | 25 | Intermediate code | Appel 7.1, Dragon 6.1–2 | PA3 out 9/24 | |
| 14 | 28 | Syntax-directed translation | Appel 7.2–3 | ||
| 15 | 30 | More syntax-directed translation | |||
| 16 | Oct 2 | IR lowering, basic blocks [notes, slides] | Appel 8.1–2 | ||
| 17 | 5 | Tiles and instruction selection | Appel 9.1–2 | PA3 due, PA4 out | |
| 18 | 7 | Finishing code generation | Appel 9.3 | PS3 out 10/6 | |
| Optimization and program analysis | |||||
| 19 | 9 | Introduction to optimization | (Muchnick 11,Dragon 9.1) | ||
| Oct 12 | Fall Break | ||||
| 20 | 14 | Live variable analysis (Maks Orlovich) | Appel 10, (Dragon 9.2.5) | ||
| 21 | 16 | Dataflow analysis | (Dragon 9.2) | PS3 due 10/15 (drop deadline) | |
| 22 | 19 | Dataflow analysis frameworks | (Dragon 9.3) | ||
| Oct 20 | Prelim 1: 7:30pm, Phillips 219 | ||||
| Oct 21 | No class (post-exam) | ||||
| 23 | 23 | Register allocation | Appel 11.1–3, (Dragon 8.8.4) | ||
| 24 | 26 | Control flow analysis | Appel 17.2,18.1 | PA4 due, PA5 out | |
| 28 | Recitation: PA5 review | ABI specification | |||
| Oct 30 | No class—work on project | ||||
| 25 | Nov 2 | Loop optimizations | Appel 18.2–3, (Muchnick 14.1) | ||
| 26 | 4 | Induction variable optimizations | Appel 18.4–5, (Muchnick 14.2) | ||
| 27 | 6 | Redundancy elimination | Appel 17.2–3, (Muchnick 12.4,13.1, Dragon 9.4-5) | ||
| 28 | 9 | Pointer/alias analysis | Appel 17.5 (Muchnick 10, Dragon 12.4) | PA5 due, PA6 out | |
| 29 | 11 | Interprocedural analysis, iterative fixed-point algorithms | Appel 20.1–3 | ||
| Supporting advanced language features | |||||
| 30 | 13 | Object layout and method dispatch | Appel 14 | ||
| 31 | 16 | Multiple inheritance | PS4 out | ||
| 32 | 18 | Advanced object features | |||
| 33 | 20 | Higher-order and first-class functions | Appel 15 | ||
| 34 | 23 | Memory management | Appel 13 | ||
| Nov 25 | Thanksgiving break | ||||
| Nov 27 | Thanksgiving break | ||||
| 35 | 30 | Linking and shared libraries | PS4 due, PA6 due 11/24, PA7 out 11/24 | ||
| Dec 1 | Prelim 2: 7:30pm, Phillips 219 | ||||
| 36 | Dec 2 | Parametric polymorphism | Appel 16 | ||
| 37 | 4 | Exceptions and beyond | |||
| Dec 16 | Final project demos and PA7 due: December 16–18 | ||||