ECE 553: Compiler Construction

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.

Course Resources


This is what I expect for a schedule, but (except for exam dates) is subject to change:

Tuesday LectureThursday Lecture
Jan 9: (no class: Winter Break)Jan 11: Intro/SML
Jan 16: RegexpsJan 18: Lexers
Jan 23: LL ParsingJan 25: LR Parsing
Jan 30: LR Parsing/ML-yaccFeb 1: ASTs, Symbol tables
Feb 6: Static AnalysisFeb 8: Static Analysis
Feb 13: Sub-typingFeb 15: Polymorphic type inference
Feb 20: Stacks & Procedure LinkageFeb 22: AST to IR
Feb 27:AST to IRFeb 29: Catchup/Review/etc
Mar 5: Midterm ExamMar 3:  (no class)
(spring break)(spring break)
Mar 19: Basic Blocks/CanonicalizationMar 21: Instruction Selection
Mar 26: Data flow, livenessMarch 28: Register Allocation
April 2: Register Allocation (cont'd) April 4: Dataflow Revisited
April 9: Dataflow (cont'd)/LoopsApril 11: Garbage Collection

April 16: Catchup, Review, or Compiler Hacking Day


April 18: Office hours during class time

(grad classes have ended)