An introduction to the specification and implementation of modern compilers. Topics covered include lexical scanning, parsing, type checking, code generation and translation, an introduction to optimization, and compile-time and run-time support for modern programming languages. As part of the course, students build a working compiler for an object-oriented language.
The course web page is located at http://courses.cs.cornell.edu/cs4120/2013fa. All course materials will be available at this site or on CMS.
Computer Science 3110 and either CS 3410 or 3420. The practicum (CS 4121 or 5121) is a required co-requisite. You may not take CS 4120 without taking CS 4121 too, a similarly for CS 5120 and CS 5121. The reason for this is that the group project is part of the grade for both 4120 and 4121. Familiarity with programming in Java is also expected.
Lectures are MWF 1:25-2:15, in 245 OLH. Attendance at lecture is expected. The lectures will complement rather than replicate material in the recommended readings.
The best way to reach the course staff is by sending mail to
the course staff mailing list.
Please include 4120 somewhere
in the Subject line. Piazza
is also a good way to get in touch with the course staff, particularly if you
want to have a discussion about the course material.
|MF 2:30 - 3:30
|W 3:30 - 5:30
|R 9:30 - 11:30
|R 3:30 - 5:30
There is no required textbook this semester, but the following textbooks will be helpful sources of information. All of these books will be available on reserve in Uris Library.
The Java language specification may also be useful to you either online or in its printed form:
Another useful text, on linking and loading, is:
Here are a couple of useful books on coding and software engineering:
There are five written homework assignments. You may discuss assignments with other students, but the work must be done on an individual basis. The names of any students you discussed the problems with must be recorded with the corresponding problems.
The compiler project is divided up into six programming assignments that are due at various points throughout the term. Compiler projects will be performed by groups of three or four students. Students have to form those groups on in CMS. You can look for teammates on Piazza. The same groups will be maintained throughout the semester if possible.
Homework and programming assignments will be accepted up to 4 days late, but at a penalty. The penalty is 5% for one day late, 15% for two days late, 30% for 3 days late, and 50% for 4 days late. Weekends are considered to be a single day when applying this formula. These penalties may be avoided by obtaining an extension on the assignment, but any extensions must be approved by the instructor at least two days before the due date—last-minute extensions will not be granted.
Except in unusual circumstances, you will receive the same grade in CS 4120 and CS 4121, and all members of a group will receive the same grade on programming assignments. Exceptions to these rules are dealt with on a case-by-case basis.
The breakdown of points per assignment is as follows:
|Programming Assignments: 65%
|Programming assignment 1
|Programming assignment 2
|Programming assignment 3
|Programming assignment 4
|Programming assignment 5
|Programming assignment 6
Regrade requests will be possible on CMS for a 5 day window starting 2 days after the grades were published (weekend = 1 day). You need to be very clear about which problems you want to have regraded and why. If you have submitted a regrade request on CMS and think that our reaction to it was wrong, you have another 5 days (same rule as above) to submit another regrade request, either on CMS (if possible), or - if CMS regrade requests are disabled after the 5 day window - by e-mail to the course mailing list. We will disregard any such e-mails if they are not related to a previous regrade request on CMS. Again, you should state very clearly why you think our reaction was wrong.
We reserve the right to change this policy at any time, in particular when we get floods of unwarranted grade requests and/or emails.
There will be no final exams, but your final report and demo will be due on the first day of finals.
The Cornell Code of Academic Integrity will be strictly enforced in this class. A Cornell student's submission of work for academic credit indicates that the work is the student's own. All outside assistance must be acknowledged, and students' academic positions must be truthfully reported at all times.
For the programming assigments, you are allowed to share test cases (but of course no actual compiler code). You are also free to discuss and exchange ideas with other students, but - as mentioned above - any work you turn in must be your own.