Syllabus Help Center
This online class will operate on a weekly cycle. Each week's lectures will be made available at midnight Monday morning. Unless otherwise stated, all times are California time, and assignments are due right before midnight at the end of the stated day, i.e. at 11:59 PM (23:59 in 24-hour time). For example, if the second programming assignment is due on March 1, then it is due when it is 11:59 PM on the evening of March 1 in California.
Most weeks an electronic quiz covering the material for the week will be posted at midnight Monday morning and will be due at 11:59 PM (23:59) on Monday evening two weeks later. You will have the option to take each quiz multiple times and only your highest score will be used. There will be no quizzes the first week, the week of the midterm, or the week of the final.
The midterm and final will also be electronic tests. While the difficulty of the problems in the exams will be similar to the quizzes, the exams will be longer. There will also be no retries on exams (you can take an exam only once), and the exams will be time-limited: once you start an exam, you must complete it within a set amount of time. Exams will be assigned at the beginning of the week and due the beginning of the following week.
In addition, there will be extra-credit weekly exercises using DeduceIt, an experimental tool for students to do free-form derivations and have them automatically checked. There will be DeduceIt exercises in weeks 2, 3, 4, 6, 7, and 8; you will have two weeks to do each assignment.
The compiler project consists of four programming assignments. This part of the course is optional; you can take the class without doing the project. In fact, if you start the project and later decide not to turn in all of the project assignments we will simply consider you to be taking the non-project version of the course. Students who complete the project will have that noted on their certificate of accomplishment at the end of the course.
The first two project assignments are easier than the last two, and so the syllabus has more time for the later assignments. Note that the programming assignments are not always assigned or due on Mondays. 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 (all weighted equally), 15% midterm, 25% final, 40% programming assignments (weighted 8%, 8%, 12%, 12% from first to last). The DeduceIt assignments will be worth a total of 2.5% extra credit (each problem weighted equally). If you aren't doing the programming assignments then everything else is scaled proportionately: 33% electronic quizzes, 25% midterm, 42% for the final (but still 2.5% total extra for DeduceIt problems).Finally, this course runs, by design, on a schedule. If this is a problem for you because of work, family, or other commitments, you should consider taking the self-paced version of the course. The self-pace course has exactly the same materials and you will learn the same things. The differences are that, first, there is not a cohort of other students to interact with; second, there is no certificate for the self-paced version; and third, there is no instructional staff support.
Key: PA = Programming Assignment, DA = DeduceIt Assignment
| Week | Videos | Quiz / Exam | DeduceIt | PA assigned | PA due |
|---|---|---|---|---|---|
| 1 (Mar 17-23) | Course Overview Cool: The Course Project |
||||
| 2 (Mar 24-30) | Lexical Analysis Finite Automata |
Quiz #1 | DA1 | PA1 | |
| 3 (Mar 31- April 6) | Parsing Top-Down Parsing |
Quiz #2 | DA2 | ||
| 4 (Apr 7-13) | Bottom-Up Parsing I Bottom-Up Parsing II |
Quiz #3 | DA3 | PA2 Apr 9 |
PA1 Apr 9 |
| 5 (Apr 14-20) | Semantic Analysis and Type Checking | Midterm | |||
| 6 (Apr 21-27) | Cool Type Checking Runtime Organization |
Quiz #4 | DA4 | PA3 Apr 26 |
PA2 Apr 26 |
| 7 (Apr 28- May 4) | Code Generation Operational Semantics |
Quiz #5 | DA5 | ||
| 8 (May 5-11) | Local Optimization Global Optimization |
Quiz #6 | DA6 | ||
| 9 (May 12-18) | Register Allocation Garbage Collection |
PA4 | PA3 | ||
| 10 (May 19-25) | Java | Final Exam |
Last Modified Sat 30 Aug 2014 12:10 AM CEST