CS 412/413
Introduction to Compilers and Translators
Spring 2000
Cornell University Computer Science Department

Course Description

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 will build a working compiler for an object-oriented language.

Web Page

The course web page is located at http://courses.cs.cornell.edu/cs412/2000sp. All course materials will be available at this site.


Computer Science 314, 381, 410. The practicum (CS 413) is a required co-requisite. You may not take CS 412 without taking CS 413 too. Familiarity with programming in Java is also expected.

Course Meetings

Lectures are MWF 10:10-11:00am in Hollister 110. Attendance at lecture is expected. The lectures will complement rather than replicate material in the textbook.

Teaching Staff

The best way to reach the course staff is by sending mail to cs412@cs.cornell.edu. Please include cs412 in the Subject line. The newsgroup cornell.class.cs412 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.

Name Title E-mail Office Office hours
Andrew Myers Asst. Professor andru@cs.cornell.edu 4124 Upson W 2-3PM
Aleksey Kliger TA ak90 328 Upson Th 3-4PM
Andrew Lin TA acl12 328 Upson M 4-5PM
Nate Nystrom TA nystrom@cs.cornell.edu 5132 Upson F 11-12AM
Linda Competillo Admin. Asst. lmc@cs.cornell.edu 4115 Upson 8:30-10AM, 2:30-4PM

Required Reading

Modern Compiler Implementation in Java. Andrew Appel. Cambridge University Press, 1997. ISBN 0-521-58388-8.

Other Reading

Compilers -- Principles, Techniques and Tools. Aho, Sethi and Ullman. Addison-Wesley, 1988. ISBN 0-201-10088-6. (The Dragon Book)
Advanced Compiler Design and Implementation. Steve Muchnick. Morgan Kaufmann Publishers. ISBN 1-558-60320-4.

Copies of these books will be on reserve in the Engineering library. The Java language specification may also be useful to you either online or in its printed form:

The Java Language Specification. James Gosling, Bill Joy, and Guy Steele. Addison-Wesley, 1996. ISBN 0-201-63451-1

A couple of useful books on coding and software engineering are the following:

Design Patterns: Elements of Reusable Object-Oriented Software. Gamma, Helm, Johnson, Vlissides, Booch. Addison-Wesley, 1995. ISBN 0-201-63361-2

Refactoring: Improving the Design of Existing Code. Martin Fowler. Addison-Wesley, 1999. ISBN 0-201-48567-2.

Assignments and Grading

There are four 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. Groups will be created by the course staff, but taking into account student preferences. 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. Both homework assignments and programming assignments are due at the beginning of class on the due date. Assignments arriving at the end of class will be treated as an additional day late. Programming assignments will be treated similarly: you will turn in the report for that assignment in class, and make the associated files available in a standard place before class on the due date so that we can test your code. If either the report or the programming assignment arrives after 10AM on a particular day, it will be considered to have arrived a day later for the purpose of late penalties.

Except in unusual circumstances, you will receive the same grade in CS 412 and CS 413. All members of a group will receive the same grade on programming assignments. The breakdown of points per assignment is as follows:

Homework: 20% Homework 1 5
Homework 2 5
Homework 3 5
Homework 4 5
Programming Assignments: 50% Programming assignment 1 5
Programming assignment 2 7
Programming assignment 3 8
Programming assignment 4 10
Programming assignment 5 10
Programming assignment 6 10
Prelims: 30% Prelim 1 15
Prelim 2 15
Total 100


The prelims will cover material from the textbook, lectures, and homework assignments. Both prelims will be in-class. There will be no final exam, but your final report and demo will be due on the first day of finals.