This class is aimed at graduate students, seniors, and ambitious juniors who are strong/competent programmers. The pre-requisite for this course for undergraduates is CS/ECE 250 (or CS 104 or ECE 152 under the old numbering scheme). Graduate students should have a comparable background—they should be comfortable with programming, data structures, and MIPS assembly. Graduate students who lack such a background should certainly have complete mastery over the material in ECE 550 and/or ECE 551, with 650 and 651 strongly recommended.
I will assume you are a completely capable programmer at the start of this course.
This course is significant work: you will write a compiler from start to finish. For students who are adequately prepared for this course, this is an exciting, fulfilling, and fun experience. For students who are not prepared, this is not the course to learn to program in.
- The course syllabus (Spring 2019: future semesters may differ).
- SML intro and warmup exercises
- We will be using Piazza for class discussions/questions etc. I will also post various announcements, assignment corrections/clarifications, and so forth here.
- Old exams from previous semesters:
Spring 2014 Practice Midterm Solutions Spring 2014 Practice Final Solutions Spring 2014 Midterm Exam Spring 2015 Midterm Exam Spring 2016 Midterm Exam Spring 2017 Midterm Exam Spring 2018 Midterm Exam
This is what I expect for a schedule, but (except for exam dates) is subject to change:
|Tuesday Lecture||Thursday Lecture|
|Jan 8: (no class: Winter Break)||Jan 10: Intro/SML|
|Jan 15: Regexps||Jan 17: Lexers|
|Jan 22: LL Parsing||Jan 24: LR Parsing|
|Jan 29: LR Parsing/ML-yacc||Jan 31: ASTs, Symbol tables|
|Feb 5: Static Analysis||Feb 7: Static Analysis|
|Feb 12: Sub-typing||Feb 14: Polymorphic type inference|
|Feb 19: Stacks & Procedure Linkage||Feb 21: AST to IR|
|Feb 26: AST to IR||Feb 28: Catchup/Review/etc|
|Mar 5: Basic Blocks||Mar 7: Midterm Exam|
|Mar 12: Spring Break (no class)||Mar 14: Spring Break (no class)|
|Mar 19: Instruction Selection||Mar 20: Data flow, liveness|
|Mar 26:Register Allocation||Mar 28: Register Allocation (cont'd)|
|April 2: Dataflow Revisited||April 4: Dataflow (cont'd)|
|April 9: Loops||April 11: Garbage Collection|
|April 16: (TBD)||April 18: Catchup, Review, or Compiler Hacking Day|
|April 23: Compiler Hacking Day|