A weekly calendar is included below, including lecture topics, lab assignments, and recommended progress on labs and project components. Lecture topics in particular are subject to change.
Lab: C Programming, Linking, Command-Line Interfaces, CLI Lab
Lectures: Compiler Design, Hand-Coded & Skeleton Lexers
Recommended Progress: Finish the milestone for the CLI Lab
Lab: Command-Line Interfaces (Tuesday!)
Lectures: Regular Expressions, Linear IRs, Lexing Algorithms
Recommended Progress: Finish the CLI Lab
Lab: Scanner Component Design, Linking
Lectures: Lexing Conclusion, Live Ranges
Recommended Progress: Finish Scanner Component design, including IR implementation
Lab: Parser Component Design
Lectures: Register Allocation
Recommended Progress: Finish Scanner Component
Lab: Implementing Graph Data Structures
Lectures: Parsing, Ambiguity
Recommended Progress: Finish Parser and Pretty-Printer Components
Lab: Allocator Design / Debugging at Scale
Lectures: Top-Down Parsing, Register Allocation Activity
Recommended Progress: Finish annotating your IR and operands, update existing code
Lab: Allocator Implementation
Lectures: First & Follow Sets
Recommended Progress: Finish Compute Last Use algorithm for Allocator Component
Lab: LL(1) Generator Lab - First Sets
Lectures: Bottom-Up Parsing Sketch, Intermediate Representations
Recommended Progress: Work on Naïve Allocator for Allocator Component
Lab: LL(1) Generator Lab - Follow Sets / Worklists
Lectures: Context-Sensitive Concerns, Semantic Elaboration
Recommended Progress: Finish Naïve Allocator for Allocator Component
Lab: LL(1) Generator Lab - Next Sets
Lectures: Arrays, Structs, Records, Procedures
Recommended Progress: Finish Optimizations for Allocator Component
Lab: LL(1) Generator Lab Wrapup
Lectures: Local Scheduling, Instruction Selection
Recommended Progress: Finish LL(1) Generator and Allocator Component report
Lab: Scheduler Design
Lectures: Instruction Selection, LVN and SVN
Recommended Progress: Finish Scheduler Component design
Lab: Scheduler Implementation
Lectures: Advanced Scheduling
Recommended Progress: Finish graph output with register dependency edges for Scheduler Component
Lab: Reverse Compiling Lab Design
Lectures: Runtime support for ALLs and OOLs
Recommended Progress: Add serialization edges and weight output to Scheduler Component
Lab: Reverse Compiling Lab
Lecture: Naming
Recommended Progress: Add scheduling output to Scheduler Component