|CSE Home||About Us||Search||Contact Info|
Course web: www.cs.washington.edu/401/
Class meetings: MWF 12:30-11:20, More 230
Instructor: Hal Perkins, CSE 548, perkins[at]cs, office hours: see course web.
Teaching Assistants: See the course web for names, office hours times 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.
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. This is likely the transition year where students have taken a mix of the old and new prerequisites and we will adapt material as we go.
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, but your instructor will be drawing material from all four. 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 and was a close 2nd choice as the primary text. The Dragon Book (Aho, et al.) is a classic. The first edition of Cooper & Torczon is close enough to the new one that it should be fine if you have a copy.
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.
(weights subject to reasonable adjustment)
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.
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.
Incompletes are never given never simply because assignments were not done on time.
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 department policy on academic misconduct.
Computer Science & Engineering
University of Washington
Seattle, WA 98195-2350
(206) 543-1695 voice, (206) 543-2969 FAX
[comments to Hal Perkins]