CISC 471 / 672 - Compiler Construction

Professor John Cavazos
Class Time MW, 1:25-2:40pm
Room Number Smith Hall 220
Office Hours M 3-4pm / W 3-4pm
Held in Saxby's Coffee (Amstel Ave)
Course Number CISC 471 / 672
Teaching Assistant Sameer Kulkarni
TA Office Hours M 12-1pm / W 12-1pm
Held in Smith Hall 103

This course examines the fundamental theory and practice of implementing today's programming languages. Students should emerge with a good appreciation for the implementation issues and strategies behind making programs in high level programming languages work correctly and efficiently on a target machine. A major part of the course is the practical experience of implementing various phases of a compiler for a small object-oriented programming language. Students learn translation methodology that is useful in many other situations in addition to compilation.

You should consider taking CISC 471 / 672 if you are curious about:

  • the inner workings of a basic compiler
  • the implementation of object-oriented programming language features
  • building a large software system starting with a base library of useful utilities
  • the answers to many of your questions about how programming languages work
  • the issues in gaining good performance from a high level language program on a particular target architecture

AND you have the proper prerequisites. Note: There is no assumption of previous coursework in compilers.

 
Lectures   Slides   Chapters / Resources / Handouts  
8/29 Overview of Course Slides (PDF) Phase I: Cool Programming Assignment (PDF)
9/05 View from 35000 feet   Slides (PDF) Chapter 1
9/10 Lexical Analysis
An Introduction
 
Slides (PDF) Chapter 2
9/12 Lexical Analysis
(Thompson's Construction)
 
Slides (PDF) Chapter 2
Phase II: Lexical Analysis Phase (PDF) rubric-phase2.txt
9/17 Lexical Analysis
(Subset Construction)
 
Slides (PDF) Chapter 2
9/19 Lexical Analysis
(DFA Minimization)
 
Slides (PDF) Chapter 2
9/24 Lexical Analysis (Wrap Up)
Introduction to Parsing 
Slides (PDF) Chapter 3
Phase III : Parsing (PDF) rubric-phase3a.txt rubric-phase3b.txt
9/26 Introduction to Parsing
Part II
 
Slides (PDF) Chapter 3
10/1 Top-down Parsing
Part I
 
Slides (PDF) Chapter 3
10/03 Top-down Parsing
Part II

Parsing Project Review
Slides (PDF)
Slides (PDF)
Chapter 3
10/08 Top-down Parsing
Part III
 
Slides (PDF) Chapter 3
10/10 Bottom-Up Parsing  Slides (PDF) Chapter 3
10/15 LR Parsing
Part I
 
Slides (PDF) Chapter 3
10/17 LR Parsing
Part II
 
Slides (PDF) Chapter 3
10/22 LR Parsing
Part III
 
Slides (PDF) Chapter 3
10/24 Context Sensitive Analysis I   Slides (PDF) Chapter 4 / Midterm Study Guide (PDF)
Phase IV : Semantic Checking (PDF) rubric-phase4.txt
11/05 MidTerm Exam 
11/07 Context Sensitive Analysis II   Slides (PDF) Chapter 4
11/12 Context Sensitive Analysis III   Slides (PDF) Chapter 4
11/14 Context Sensitive Analysis IV   Slides (PDF) Chapter 4
11/19 Intermediate Representation I  Slides (PDF) Chapter 5
Phase V : Code Generation (PDF) rubric-phase5.txt
11/26 Intermediate Representation II  Slides (PDF) Chapter 5
11/28 Procedure Abstraction  Slides (PDF) Chapter 6
12/03 Code Shape  Slides (PDF) Chapter 7
Final Study Guide (PDF)
12/05 Optimization, Instruction Selection/Scheduling and Register Allocation  Slides (PDF) Read enough of the book to understand the basics of Instruction Scheduling and Register Allocation

 

Course Administration/Overview:

Course Syllabus

Online Documentation :


Cool Manual
Cool Overview
Cool Using Windows
SVN Guide
The JLex scanner generator manual
Java Docs for cool-tree
Spim MIPS simulator
Engineering a Compiler Errata Page