In this course you will build a compiler for an object-oriented language. This involves stages of scanning, parsing, type-checking and generating code. You will understand concepts such as variable bindings, control flow, types, and method invocation.
This is not course on optimizing compiler construction; it will not cover modern architectures or optimizations. Students interested in learning more about static code generation should take the undergraduate compilers course; the courses overlap in places (e.g., parsing) but are distinct.
The official university course objectives are
also available.
Written Assignments
Most weeks there will be a written assignment covering material presented
in lecture and the readings. The written assignments are to be completed
individually. Written assignments will be graded on a simple 0-5 scale and
will not be weighted heavily; the purpose of the assignments is to give you
practice with the theoretical material of the course. Spending time on the
written assignments pays off on the exams.
Written assignments are due by 5:00pm on the date in the course
schedule. Print your name and University email address (e.g.,
wrw6y) on each page of your assignment. Assignments may be turned
in either in class (before the lecture) or in the CS 4610 Homework
Drop in the front hallway of Olsson. To ensure that we know where
assignments are, use only these two locations to hand in assignments.
Notably, putting an assignment under my office door or my faculty mailbox
will result in that assignment being ignored. Please do not bring
assignments to staff offices.
Project and Programming Assignments
The course project consists of five programming assignments. Taken together,
the assignments form a complete compiler for Cool, the
Classroom Object-Oriented Language.
The project components are assigned in roughly increasing order of size and difficulty; proportionately more time is allotted for the later assignments. Later assignments will be weighted more heavily in the final grade. Programs will be evaluated for correctness, organization, and documentation.
Programming assignments may be done individually or in teams of two. The first programming assignment will be done individually, however. Teamwork imposes burdens of communication and coordination, but has the benefits of more thoughtful designs and cleaner programs. Team programming is also the norm in the professional world.
Students on a team are expected to participate equally in the effort and to be thoroughly familiar with all aspects of the joint work. Both members bear full responsibility for the completion of assignments. Partners turn in one solution for each programming assignment; each member receives the same grade for the assignment. If a partnership is not going well, the teaching assistants will help to negotiate new partnerships. Teams may not be dissolved in the middle of an assignment.
Programming assignments are due at 11:50pm on the date in the course
schedule. Programming assignments will be turned in electronically; the
exact method will be announced with the first assignment.
Examinations
There will be two midterm examinations and a final examination. The
midterms will be held in class.
The exams are open-note (one page, front and back, prepared by you). The exams are not open-book. No electronic devices are allowed. No cellphones, PDAs, palmtops, laptops, etc.
No early, late or make-up exams will be given. Please plan accordingly.
Grading
It is impossible to pass the course without doing the programming
assignments. The relative weight of the components of your grade will be
approximately:
Written assignments | 8% |
Project Programming Assignment I | 5% |
Project Programming Assignment II | 6% |
Project Programming Assignment III | 6% |
Project Programming Assignment IV | 10% |
Project Programming Assignment V | 10% |
Midterm Examination I | 15% |
Midterm Examination II | 15% |
Final Examination | 25% |
The grades will follow a standard curve: once the final numerical grade has been computed according to the above formula, the average grade will be somewhere in the B range. Doing significantly better than the average will yield an A. Doing significantly worse than the average will yield a C, D or F.
We follow the Honor System.
You should know that fairly sophisticated plagiarism detection software
will be used on the programming assignments; cheating on an assignment or
exam will result in a score of 0 for it.
Late Assignment and Regrade Policy
An assignment turned in h hours late has its point value reduced by
h%. Thus if you turn in a programming assignment at 8am the next day
(i.e., 8 hours late) your grade for that assignment will be multiplied by
0.92.
Regrades for exams, programming assignments, or written assignments must be
received within one week of you receiving your score. All regrade
requests should be made to the TA. When we regrade an assignment we will
look over it very carefully for correctness: it is possible that after a
regrade you will end up with fewer points than before the regrade.
Regrades should be treated with caution and used only when the graders have
made a clear mistake evaluating your work.
Optional References
You may find the following additional resources helpful: