CSE 401 Information and Syllabus - Winter 2013

Logistics and Contact Information

Course web: www.cs.washington.edu/401/

Class meetings: MWF 12:30-1:20, Electrical Engineering 045

Instructor: Michael (or "Mike") Ringenburg, CSE 212, miker[at]cs, office hours: see course web.

Teaching Assistants: Zachary Stein and Laure Thompson. See the course web office hours and locations.

Communications: Discussion list linked on the course home page. Be sure to read it regularly, and please participate. You will also automatically be subscribed to a course mailing list using your uwnetid (not cse id). This will be a low-traffic list, primarily for announcements, corrections, and other notices from the course staff. You are responsible for everything that is mailed to this list.

For questions about the course, please use the cse401-staff[at]cs mailing list, rather than emailing individual TAs or the instructor. That way we can make sure the entire staff is on the same page, and we can also have a better idea of whether multiple people have the same or similar questions.

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: Once upon a time these were CSE 322; CSE 326; CSE 341; CSE 378, i.e., data structures, familiarity with at least one machine at the assembly language level, basics of formal grammars, and exposure to other programming languages. With the new core curriculum the official prerequisites are either (CSE 326 and CSE 378) or (CSE 332 and CSE 351); i.e., data structures and machine organization.


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 rest are merely supplementary. The first edition of Cooper & Torczon is close enough to the new 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.

All of these books are available in the Engineering Library course reserves

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: 55%
  • Written homework: 15% (5% per homework)
  • Midterm exam: 10%
  • Final exam: 15%
  • Other (class participation, citizenship, etc.): 5%

The course project involves building a real compiler for a core subset of Java. The project should be done by pairs of students. Each project milestone will be graded on correctness, coding style, and completeness of test cases.

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 projects 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. They 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.

That said, the instructor and TAs are reasonable people, and our goal is for everyone to learn about compilers, not to punish you. If a true, unforeseen emergency arises that your late days will not cover, the instructor may have a little flexibility. But if we suspect any abuse of this flexibility, it will be revoked.

Incompletes are never given simply because assignments were not done on time.

Academic Conduct

You are expected to do assignments on your own, except when an assignment explicitly allows group work. Any cases of cheating that are discovered will be handled according to the University disciplinary policy.

But we also want to be clear on what is legitimate collaboration -- please help each other out in this class in appropriate ways! It is OK to help other students debug their programs, and to discuss general approaches to solving problems. However, it is not OK to copy someone else's code or homework solution, and you need to be careful about developing or using detailed code discussed with others. In particular, you should never accept code from or provide code to another student not in your group that could be incorporated into their work. It is also never appropriate to have a colleague or tutor "walk you through" a problem or assignment to develop a detailed solution.

This course includes a substantial term project. Developing good assignments of this size can take years. To make sure that assignments are as good as they can be, we may reuse them, with appropriate changes to take into account feedback from past offerings of the course. It is a clear case of academic misconduct if you hand in a solution to a similar project from a previous quarter, or obtain copies of such solutions from others. We have effective tools for checking this, as well as other cases of cheating, electronically.

If you feel that you are having a problem with the material, or don't have time to finish an assignment, or have any number of other reasons to cheat, talk with the instructor. Copying others' work, from this or previous quarters is considered cheating.

Exams must, of course, be done on your own.

For more details, please look at the CSE Academic Misconduct Policy.