All dates for exams and lectures are provisional. Prelim dates are only approximate.
| Lecture | Date | Lecture topic | Readings | Assignments | |
|---|---|---|---|---|---|
| Parsing | |||||
| 1 | Aug 24 | Course overview | Course overview, Dragon 1-1.4 | ||
| 2 | 26 | Lexical analysis and regular expressions | Appel 1, Dragon 3–3.3 | PS1 out | |
| 3 | 29 | Automating lexical analysis | Appel 2.1–2.5, Dragon 3.4-3.10 [JFlex example] | PA1 out | |
| 4 | 31 | Grammars and parsing | Appel 3.1, Dragon 4–4.3 | ||
| 5 | Sep 2 | Top-down (LL) parsing | Appel 3.2, Dragon 4.4 | PS1 due, PS2 out | |
| Sep 5 | Labor Day | ||||
| 6 | 7 | Bottom-up parsing | Appel 3.3, Dragon 4.5 | PA1 due, PA2 out | |
| 7 | 9 | LR parsing and parser generators | Appel 3.4, 4.1–4.2, Dragon 4.6-4.8 [example] | ||
| Static semantics | |||||
| 8 | 12 | Semantic analysis and symbol tables | Appel 5 | PS2 due, PS3 out | |
| 9 | 14 | Types | Dragon 6.5 | ||
| 10 | 16 | Type systems | (add deadline) | ||
| 11 | 19 | Subtyping | PA2 due, PA3 out | ||
| 12 | 21 | Modules, type representation, visitors [notes|slides] | Appel 4.3 | ||
| Code generation | |||||
| 13 | 23 | Intermediate code (Wenzel Jakob) | Appel 7.1, Dragon 6.1–2 | PS3 due | |
| 14 | 26 | Syntax-directed translation | Appel 7.2–3 | ||
| 15 | 28 | IR lowering | Appel 8.1 | PS4 out 9/27 | |
| 16 | 30 | PA2 recap and ABI specification | ABI specification | ||
| 17 | Oct 3 | Trace covering and abstract assembly | Appel 8.2 | PA3 due, PA4 out | |
| 18 | 5 | Tiles and instruction selection | Appel 9.1–2 | ||
| 19 | 7 | Finishing code generation | Appel 9.3 | PS4 due | |
| Oct 10 | Fall Break | ||||
| Optimization and program analysis | |||||
| 20 | 12 | Introduction to optimization | Muchnick 11,Dragon 9.1 | ||
| 21 | 14 | Live variable analysis | Appel 10, Dragon 9.2.5, C&T 9.2–9.2.3 | (drop deadline) | |
| 22 | 17 | Dataflow analysis | Dragon 9.2, Muchnick 8.2 | ||
| 23 | 19 | Dataflow analysis frameworks | Dragon 9.3, Muchnick 8.3–8.4 | PA4 due, PA5 out | |
| 24 | 21 | Register allocation | Appel 11.1–3, Dragon 8.8.4, Poletto/Sarkar | ||
| 25 | 24 | Reaching definitions, webs, SSA | Appel 19, Muchnick 8.1, 8.10–8.11, C&T 9.3 | ||
| Oct 25 | Prelim 1: 7:30pm, Phillips 219 (covers material in lectures 1–24) | ||||
| Oct 26 | No class (post-exam recovery) | ||||
| 26 | 28 | Control flow analysis | Appel 17.2,18.1 | ||
| 27 | 31 | Induction variables and loop optimizations | Appel 18.2–3, Muchnick 14.1 | ||
| 28 | Nov 2 | More loop optimizations, value numbering | Appel 18.4–5, Muchnick 14.2, Muchnick 12.4, C&T 8.3.2 | ||
| 29 | 4 | Redundancy elimination | Appel 17.2–3, Muchnick 12.4,13.1, Dragon 9.4-5 | ||
| 30 | 7 | Pointer/alias analysis | Appel 17.5, Muchnick 10, Dragon 12.4 | PA5 due | |
| 31 | 9 | Interprocedural analysis, iterative fixed-point algorithms | Appel 20.1–3 | PA6 out | |
| Supporting advanced language features | |||||
| 32 | 11 | Object layout and method dispatch | Appel 14 | PS5 out | |
| 33 | 14 | Multiple inheritance [slides|notes] | |||
| 34 | 16 | More object features, first-class functions | |||
| 35 | 18 | Functional language features | Appel 15 | ||
| 36 | 21 | Linking and shared libraries | PS5 due | ||
| Nov 23 | Thanksgiving break | ||||
| Nov 25 | Thanksgiving break | ||||
| 37 | 28 | Memory management | Appel 13 | PA6 due 11/23, PA7 out 11/23 | |
| 38 | 30 | Parametric polymorphism | Appel 16 | ||
| Dec 1 | Prelim 2: 7:30pm, Bard 140 | ||||
| 39 | Dec 2 | Exceptions and beyond | |||
| Dec 14 | Final project demos and PA7 due: December 14–16 | ||||