Lecture |
Date |
Topic |
Slides |
Due |
Assignments & Reading |
1 |
Jan 24 |
Course overview | HW1: lexical analysis, Appel 1 | ||
2 | 26 | Lexical analysis | PA1: lexical analysis, Appel 2 | ||
3 | 28 | Grammars and parsing | Appel 3.1 | ||
4 | 31 | Top-down parsing | HW1 | HW2: parsing, Appel 3.2 | |
5 | Feb 2 | Bottom-up parsing | Appel 3.3 | ||
6 | 4 | LR parser generators | PA1 | PA2: parsing, Appel 3.4 | |
7 | 7 | Abstract syntax trees | Appel 4 | ||
8 | 9 | Semantic analysis | Appel 5.1-2 | ||
9 | 11 | Types | HW2 | ||
10 | 14 | Static semantics | Appel 5.4, HW3: semantic analysis, Appel 5.3 | ||
11 | 16 | Stack layout | Appel 6 | ||
12 | 18 | Intermediate code | Appel 7.1-2 | ||
13 | 21 | Syntax-directed translation | PA2 | PA3: IR generation, Appel 7.3 | |
14 | 23 | Canonical IR | Appel 8.1 | ||
15 | 25 | Basic blocks, instruction selection | HW3 | Appel 8.2 | |
16 | 28 |
Code generation 1 | Appel 9.1 | ||
28 | Prelim 1 review, Upson 111, 7-9PM | ||||
Mar 1 |
Prelim 1 (in class): covers material in lectures 1-14. Open book. |
||||
17 | 3 | Code generation 2 | Appel 9.2-3 | ||
6 |
In-class recitation |
||||
18 | 8 | Modules and abstract data types | PA3 | PA4: code generation | |
19 | 10 | First-class modules and objects | Appel 14.1-2 | ||
20 | 13 | Objects: subtyping | |||
21 | 15 | Objects: implementation | Appel 14.3-5 | ||
22 | Multiple inheritance | ||||
Spring Break |
|||||
23 | 27 | Introduction to optimization | HW4: objects and optimization, Muchnick 11 | ||
24 | 29 | Live variable analysis | Appel 10 | ||
25 | 31 | Register allocation | PA4 | PA5: Iota+, Appel 11, 12 | |
26 | Apr 3 | Standard data-flow analyses | Appel 17, Muchnick 8.1, Muchnick 12, 13 | ||
27 | 5 | Dataflow analysis frameworks | Muchnick 8.2-8.5 | ||
28 | 7 | Control flow analysis | Appel 18, Muchnick 7.1-4, 14.1 | ||
29 | 10 | Loop optimizations | HW4 | Muchnick 17.1 | |
12 | Prelim 2 review, in class |
||||
13 | Prelim 2, 7:30-9:30PM, Phillips 219. Emphasizes material in lectures 15-29. Open book. |
||||
30 | 14 | Instruction scheduling | Muchnick 5.7 | ||
31 | 17 | Garbage collection | Appel 13 | ||
32 | 19 | Linking and loading | |||
33 | 21 | First-class functions | PA6: register allocation, Appel 6, 15.1-2 | ||
34 | 24 | Optimizing first-class functions | PA5 | Appel 15.3-15.6 | |
35 | 26 | Parametric polymorphism | Appel 16.1, 16.3-4 | ||
36 | 28 | Exceptions | |||
37 | May 1 |
Dynamic types | |||
38 | 3 |
Other compilation strategies | |||
39 | 5 |
Language-based security | PA6 | ||
PA6, project demo: May 11-12, 1-4:30PM, Upson 317 |