Welcome back to in-person classes at UW! We’re following UW guidelines for courses this fall. In-person attendance in lectures and sections is normally expected. We will be recording lectures on Panopto for review and to help catch up if you have an unavoidable absence, but this is not a distance-learning class that is intended to be taken remotely. Sections will not normally be recorded since these are mostly used for group work, but we will try to post tutorial videos or other materials when those would be helpful. Of course unexpected things can and probably will happen during the quarter. If you do need to miss class because of illness or other personal circumstances, please get in touch with the instructor or course staff so we can work with you to help with the situation, and get in touch as soon as you can so we can take care of things early when help will be most useful.
Please help each other by following UW guidelines about masking and refraining from eating and drinking in class (except for a sip of water now and then if needed). We all will need to do our best to work together and keep ourselves and others healthy. As circumstances change, we’ll adjust to follow UW and city, county, and state public health and other guidelines. Please stay flexible and speak up if you are having problems or if there are things that could be done better, and we’ll do our best to help.
Logistics and Contact Information: See the main course web site www.cs.washington.edu/401/. Look there for information about the course including meeting times, staff, office hours, communications, etc.
Catalog Description: Fundamentals of compilers and interpreters; symbol tables, lexical analysis, syntax analysis, semantic analysis, code generation, and optimization for general purpose programming languages. No credit to students who have taken 413. Credits: 4.
Prerequisites: The official prerequisites are CSE 332 (data abstractions) and CSE 351 (hardware/software interface). That also implies CSE 311, which is a prerequisite for CSE 332. Although not formally required, background from CSE 331 (software design & implementation) is useful for any large project, including the one in this course.
Texts: There are currently four good textbooks for introductory compiler courses. The book by Cooper & Torczon is the primary text for the course since it seems to be the best overall match, and all of the assigned readings will come from it. It is the only one that you really need for the course. The Appel book is the original source of the minijava project, although some details of our version will be different. The Fischer, Cytron & Leblanc book is very close in structure to what we're doing. The Dragon Book (Aho, et al.) is a classic.
The Cooper/Torczon book (at least) is available through
Safari Books Online, and UW students have free access to all
Safari books through the UW libraries. Go
to https://www.oreilly.com/online-learning/,
click sign-in at the top right, and sign in with
your uw.edu email address to access them.
Primary text: Engineering a Compiler, Cooper & Torczon, 2nd ed.
M-K 2012. errata and links
Also useful: Modern Compiler Implementation in Java,
Appel, Cambridge, 2nd ed, 2002.
Also useful: Compilers: Principles, Techniques, & Tools,
Aho, Lam, Sethi & Ullman, A-W, 2nd ed, 2007.
Also useful: Crafting a Compiler, Fischer, Cytron,
and LeBlanc, A-W, 2010.
Grading and Exams: We are returning to in-person classes so we expect to have a more traditional quarter, including midterm and final exams. However, since we are all adjusting to this new environment, the exact number of assignments and weights of assignments, exams, and the project may change as we adapt to the new circumstances. Tentative weights are:
The course project involves building a real compiler for a core subset of Java. Projects will be done in groups of two. Ultimately what matters is where you and your partner wind up, but there will be intermediate milestones due every couple of weeks to keep everyone on schedule and to provide feedback at important points. The final project and each milestone will be graded on correctness, code quality (style), and testing quality and completeness. The final project grade (where you wind up) will count for roughly half of the overall project grade, with the quality and timeliness of the intermediate deadlines counting for the other half.
Students enrolled in CSE M 501 will also work on projects in pairs, but will be expected to add some extensions to their compiler beyond the basic CSE 401 project or do additional work (readings, papers, etc.) to be discussed with the instructor. If you are enrolled in CSE M 501, you should pair up with another student who is also enrolled in that course, or discuss the situation with the instructor. If a CSE M 501 and a CSE 401 student do want to work together, it usually is best for the CSE 401 student to change their registration to CSE M 501 so both students have the same project requirements. Again, if this affects you, please discuss it with the instructor. Further details will be provided later.
Homework assignments are to be done individually.
Extra credit may be available on some assignments. It is designed to have little (but some) impact on your grade if you do it. Not doing extra-credit work will not lower your grade - regardless of how many other students attempt it. Extra credit is designed to be challenging and an opportunity for people with available time or interest to explore further. Therefore, you can expect any extra-credit work to count for much less than it should based on how difficult it is or how much time you spend on it. You should not attempt any extra-credit work until the basic part of the assignment is done. The graders will ignore extra-credit work unless the required work is "almost perfect" otherwise.
If you discover an error in grading, please bring it to our attention within one week after the assignment or project is first returned.
Late Policy: Work is due at the time given on the assignment. It is exceedingly unlikely that skipping class to finish homework is in your interest. For the entire quarter, you may have four “late days” on individual homework assignments. You are strongly advised to save them for emergencies. You may not use more than two for the same assignment. Similarly, for group projects (the compiler) your group has four late days for the entire quarter, and your group may not use more than two of them on any single project assignment. Late days must be used in 24-hour (integer) chunks. Assignments submitted after all late days have been used will not be accepted for credit. Some assignments may have more restrictive late day policies in order to make sample solutions available or to allow for discussion in class or sections right before exams, or at the end of the quarter when work needs to be finished. You should not plan in advance to use late days on assignments or projects. They are intended to allow for unexpected situations where an extra 24- or 48-hours to finish an assignment suddenly becomes necessary. This policy may not be the same as in other classes. You are responsible for understanding it if you choose to submit late work.
Given that everyone is adjusting to in-person classes, we will be somewhat flexible if needed about deadlines. The goal is to stay on schedule as best we can, while acknowledging that the current situation may well require some adjustments. We will try to be clear about any changes in advance so everyone can plan accordingly. Please contact the course staff in advance if you find it will be difficult to meet deadlines for reasons beyond your control.
In case of a true emergency (hospitalization, other unforeseen circumstances) where the standard late policy would not be applicable, please contact the instructor to discuss the situation as soon as practical.
Incompletes are never given simply because assignments were not done on time.
Accommodations: Please refer to the university policies regarding accommodations and religous accommodations. Those policies apply in this class as everywhere else at UW. Please contact the instructor, DRS, or the course staff as needed so we can help.
Academic Integrity: Any attempt to misrepresent the work you submit will be dealt with via the appropriate University mechanisms, and your instructor will make every attempt to ensure the harshest allowable penalty. The guidelines for this course and more information about academic integrity are in a separate document. You are responsible for knowing the information in that document.