Skip to main content

Syllabus

This online class is self-paced, unmoderated, and available in full from the beginning.

This syllabus is a recommendation of how to work through the material at a reasonable pace. It is not a requirement, and you are welcome to access material at your own pace. Sections retain their original week-based titles.

If you follow the structure of the course, working through one section each week, you will encounter a quiz every week.  It's advisable to complete the quiz within two weeks of beginning a section.  You will have the option to take each quiz multiple times and only your highest score will be used. There will be no quizzes in the first week's section, the midterm section, or final section.

The midterm and final will contain problems at a similar level of difficulty to that in the quizzes, but the exams will be longer. There will also be no retries on exams (you can take an exam only once).  

The compiler project consists of four programming assignments.

The first two project assignments are easier than the last two, so you may end up taking more time with the later assignments.  Each part of the project can be written independently of the other parts and for each assignment we will give you the reference implementation's other components to use for testing. Thus, even if one of the parts of your compiler does not work correctly you can still do the next assignment using the reference compiler's components.

The project can be done either in C++ or Java. If you really, really want to, you can in fact write the project in any language you like, but you will have to reimplement some basic functionality that we provide in C++ and Java. You will also need to ensure you adhere to the (undocumented) interfaces between the compiler passes. We don't recommend this option, but people have asked and if you are an experienced programmer who doesn't mind figuring things out on your own it is at least plausible that you could do this and enjoy it.

The weight for the various assignments in the course will be: 20% electronic quizzes, 15% midterm, 25% final, 40% programming assignments.

Finally, this course is self-paced; this means that there is not necessarily a cohort of other students taking the material at the same time.  The discussion forum is enabled to provide a way for learners to interact in peer-to-peer setting; it is not monitored, please contact edX Help if you encounter any issues with the course. 

Below is a table with a recommended "schedule" to follow.  There are no deadlines, but we suggest completing a programming assignment no later than two weeks after you start it. 

Key: PA = Programming Assignment

WeekVideosQuiz / ExamPA assignedPA due
1 Course Overview
Cool: The Course Project
2 Lexical Analysis
Finite Automata
Quiz #1 PA1
3 Parsing
Top-Down Parsing
Quiz #2
4 Bottom-Up Parsing I
Bottom-Up Parsing II
Quiz #3 PA2 PA1
5 Semantic Analysis and Type Checking Midterm
6 Cool Type Checking
Runtime Organization
Quiz #4 PA3 PA2
7 Code Generation
Operational Semantics
Quiz #5
8 Local Optimization
Global Optimization
Quiz #6 PA4 PA3
9 Register Allocation
Garbage Collection
10 Java Final Exam PA4