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 19: (no class: Winter Break) Jan 21: Intro/SML
Jan 26: Regexps Jan 28: Lexers
Feb 2: LL Parsing Feb 4: LR Parsing
Feb 9: LR Parsing/ML-yacc Feb 11: ASTs, Symbol tables
Feb 16: Static Analysis Feb 18: Static Analysis
Feb 23: Sub-typing Feb 25: Polymorphic type inference
Mar 2: Stacks & Procedure Linkage Mar 4: AST to IR
Mar 9: (no class) Mar 11: AST to IR
Mar 16: Catchup/Review/etc Mar 18: Midterm Exam
(no spring break this year) (no spring break this year)
Mar 23: Instruction Selection Mar 25:  Data flow, liveness
Mar 30:Register Allocation April 1: Register Allocation (cont'd)
April 6: Dataflow Revisited April 8: Dataflow (cont'd)
April 13: Loops April 15: Garbage Collection
April 20: Catchup, Review, or Compiler Hacking Day April 22: Catchup, Review, or Compiler Hacking Day