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 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