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

Lectures

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

Tuesday Lecture Thursday Lecture
Jan 7: (no class: Winter Break) Jan 9: Intro/SML
Jan 14: Regexps Jan 16: Lexers
Jan 21: LL Parsing Jan 23: LR Parsing
Jan 28: LR Parsing/ML-yacc Jan 30: ASTs, Symbol tables
Feb 4: Static Analysis Feb 6: Static Analysis
Feb 11: Sub-typing Feb 13: Polymorphic type inference
Feb 18: Stacks & Procedure Linkage Feb 20: AST to IR
Feb 25: AST to IR Feb 27: Catchup/Review/etc
Mar 3: Basic Blocks Mar 5: Midterm Exam
Mar 10: Spring Break (no class) Mar 12: Spring Break (no class)
Mar 17: Instruction Selection Mar 19:  Data flow, liveness
Mar 24:Register Allocation Mar 26: Register Allocation (cont'd)
Mar 31: Dataflow Revisited April 2: Dataflow (cont'd)
April 7: Loops April 9: Garbage Collection
April 14: (TBD) April 16: Catchup, Review, or Compiler Hacking Day
April 21: Compiler Hacking Day