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: Because we are online this quarter we will not have a traditional midterm or final exam. Instead, we will have somewhat more extensive written homework assignments than are typical in a quarter with in-person exams, and grades will be based on the course project and written assignments. The weights will be roughly as follows, subject to reasonable adjustment as needed.
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.
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. 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: The standard late policy for the course in normal circumstances is the following: 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”. You are strongly advised to save them for emergencies. You may not use more than two for the same assignment. On group project work you may only use late days if all members of the group have them available, and all members of the group will be charged for each late day used. 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 (even if some members of a group, but not all, have late days available). 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 the unusual circumstances of this distance quarter, we will be flexible when 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 late policy might not be applicable, please contact the instructor to discuss the situation.
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.