Compilers Practicum (CS 4501) will acquaint you with the fundamentals of compiler construction: you will produce a program that accepts as input source code in a high-level language and produces as output low-level assembly code representing an executable program. You will master fundamental concepts of dataflow analysis, optimization, code generation, calling conventions, as well as code generation for object-oriented programming.
Because Programming Languages and the Compilers Practicum share a number of core concepts (e.g., intermediate representations, type checking, formal language semantics, etc.), to take the Compilers course you must also take the Programming Languages course. Thus, you have two options:
Written assignments are due by 5:00pm on the date in the course schedule. Print your name and University email address (e.g., wrw6y) in block letters on each page of your assignment. Assignments may be turned in either in class (before the lecture) or in the CS 4610 Homework Drop Box outside 423 Rice Hall. 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.
There are no written assignments for the Compilers Practicum.
Project and Programming Assignments
The Programming Languages course project consists of five
programming assignments. Taken together,
the assignments form a complete interpreter 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
The Compilers Practicum course project consists of two programming assignments. The first is a complete compiler for Cool. The second is an optimizing compiler for Cool. Students make work alone or in teams of two (as above).
For both courses, programs will be evaluated for correctness, organization, and documentation.
Programming assignments may be done individually or in teams of two. The first Programming Languages 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.
Programming Languages will contain two midterm examinations and a
final examination. The midterms will be held in class.
The Compilers Practicum will contain a final examination, probably held concurrently with the Programming Languages final examination.
For both courses, the exams are open-note (one piece of paper, 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
It is impossible to pass the course without doing the programming
assignments. For Programming Languages, the relative weight of the
components of your grade will be approximately:
|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%|
For the Compilers Practicum, the relative weight of the components of your grade will be approximately:
|Project Programming Assignment I||40%|
|Project Programming Assignment II||35%|
For both courses, 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
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.
All course materials submitted for a grade must be turned in by
Midnight on Monday, May 7.
You may find the following additional resources helpful: