CSE 401/M501 18sp Intro. to Compiler Construction: Information and Syllabus

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 first edition of Cooper & Torczon is close enough to the current one that it should be fine if you have a copy. 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.

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: (weights subject to reasonable adjustment)

  • Course project: 50%
  • Written homework: 15%
  • Midterm exam: 15%
  • Final exam: 20%

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.

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”. 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.

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.

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.