Skip to main content

Syllabus

* * * FALL 2020 UPDATE * * *

THIS AUDIT-ONLY COURSE IS PROVIDED AS A DIGITAL RESOURCE.  

AN EARLIER VERSION OF THIS COURSE INCLUDED GRADED ACTIVITIES; THESE ACTIVITIES ARE INCLUDED IN THIS COURSE FOR EDUCATIONAL PURPOSE ONLY - ANY REFERENCES TO GRADES ARE IRRELEVANT. 

LEARNERS TAKING THIS AUDIT-ONLY COURSE CANNOT EARN AN EDX CERTIFICATE FOR COMPLETING THE COURSE.

A note regarding sections requiring issuing a wget command from the virtual machine: as of the time of this update, we know that this returns an error due to expiration of security certificates.  The course is offered as-is, as it may still serve as a useful resource for learners. 

* * * End of FALL 2020 UPDATE - original syllabus follows * * *

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. The self-paced course has exactly the same materials and you will learn the same things. The differences are that there is not necessarily going to be a cohort of other students to interact with; and there is no instructional staff support.

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