Princeton University
Computer Science Department

Computer Science 320
Compiling Techniques

Prof. Andrew W. Appel

Spring 2011

General Information | Schedule and Readings

Course Summary

Understand the design and construction of compilers. Concepts include syntactical analysis, semantics, code generation, optimization, and run-time systems. A complete compiler for a small language will be implemented in ML.

Prerequisites: 217 and 226.


Administrative Information

Lectures: TTh 3:00-4:20pm, in Friend 008
Professor: Andrew Appel, room 219 CS Building, phone 258-4627
Office hours: Fridays 1:30-2:30 p.m. or by appointment
Teaching Assistant: Feng Liu,, rm 223 CS building
Office hours: Sundays 1:00-3:00 p.m. or by appointment (Note!)
Undergraduate Coordinator: Donna O'Leary, room 210 CS Building, phone 258-1746

Required Texts:
Recommended Text:


Install SML/NJ v. 110.73 on your computer.

You may find it useful to run SML under emacs. This will let you take advantage of rudimentary support for automatic indentation, syntax-highlighting, and special keybindings. Details.



Your grade will be calculated as follows:


Weekly programming assignments, as listed in the last column of the schedule, are due Mondays at 11:00pm.

You can get help with the assignments by sending electronic mail to or directly to the teaching assistant (see above), or by calling or visiting Professor Appel or the teaching assistant. Ask for help when you need it!

Assignments should be turned in on time so the grader can grade everybody's assignments together and get the graded assigments back to you quickly. If you turn in the assignments late, you derail this process. We can forgive a couple of hours lateness, but after that we must impose penalties, approximately 10%/day.

There will be no extensions due to scheduling conflicts, computer downtime, or other such factors, except under truly extraordinary circumstances. Extensions will be granted only for university-sanctioned excuses such as illness, and then only with the proper documentation.

Programming, like composition, is an individual creative process. Individuals must reach their own understanding of the problem and discover a path to its solution. During this time, discussions with friends are encouraged. However, when the time comes to write the code that solves the problem, such discussions are no longer appropriate - the program must be your own work (although you may ask teaching assistants for help in debugging). If you have a question about how to use some feature of C, UNIX, ML, etc., then you can certainly ask your friends or the teaching assistants.

Do not, under any circumstances, copy another person's program. Do not let anyone copy your program. Writing code for use by another or using another code in any form violates the University's academic regulations.

Submitting Programming Assignments

Submit your solutions to the programming assignments electronically using dropbox. Details will be provided for each assignment.