|CSE Home||About Us||Search||Contact Info|
Course web: www.cs.washington.edu/401/
Class meetings: MWF 12:30-1:20, GUG 218.
Instructor: Hal Perkins, CSE 548, perkins[at]cs, office hours: MT 2-3 pm in CSE006 lab.
Teaching Assistant: Laura Marshall, lmarsh16[at]cs, office hours and location TBA.
Communications: See the course home page for the link to a discussion list. 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: 3. Prerequisites: CSE 322; CSE 326; CSE 341; CSE 378.
There are currently three good textbooks for introductory compiler courses, none of which clearly dominates the others. 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 three. The Appel book is the original source of the minijava project, although many details of our version are different.
Primary text: Engineering a Compiler, Cooper & Torczon,
M-K 2004. 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.
(weights subject to reasonable adjustment)
The course project involves turning a toy compiler into an (almost) real one. 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 work on something additional. 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 also 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 because of 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, and 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, then 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]