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. 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
Week | Videos | Quiz / Exam | PA assigned | PA 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 |