Course Schedule, Notes & Assignments

Home Details Schedule

horizontal rule

Course Lectures and Staff

Lectures: TTh 3:00-4:20pm, Computer Science Building 102

Prof: David Walker

* Phone: 258-7654
* E-Mail:
* Office: 412 Computer Science Building

* Office hours: TTh 4:30-5:30PM or by appointment

Teaching Assistant: Guilherme Ottoni

* Phone: 258-7727

* E-Mail: ottoni@CS.Princeton.EDU

* Office: 213 Computer Science Building

* Office Hours:  Friday, 2-3PM; Monday, 2-2:30PM or by appointment

Undergrad Coordinator:  Tina McCoy

* Office: 410 CS Building
* Phone: 258-1746
* E-Mail:


Mailing List:

You are encouraged to use the COS 320 mailing list to ask questions of other students in the class about the course material.  The course staff will read the mailing list and interject or answer questions when appropriate.  Occasionally, the course staff will make announcements via the mailing list so all members of COS 320 are required to subscribe and read their COS 320 email.

To subscribe, send an e-mail with the word "subscribe" in the body of the message to

To post to this list, send your email to:

General information about the mailing list is at:


Most of the assignments will be programmed in SML, which has often been called "a domain specific programming language for building compilers."  If you have a PC running Windows or Linux, then you should also be able to install ML there. You can grab a copy of the compiler from the official server at Bell Labs.  In a couple of days, you can also log into and run sml from there.  Follow the directions given on assignment No. 1.

Future assignments will involve compiling to the MIPS assembly language and using the SPIM simulator to run your code:

The SPIM Simulator.
This is an excellent document describing the MIPS assembly language, calling conventions, and using the SPIM simulator.


The SPIM Homepage.
If you would like to install SPIM on your own machine, source code and binaries can be downloaded from this site.



David Walker

* Office: 412 CS Building


* Andrew W. Appel, Modern Compiler Implementation in ML. Cambridge University Press, 1998.  (Required)

* You will also need a reference manual for SML.  For getting started, with the SML/NJ system I recommend looking at this tutorial.  For more information on the SML language itself, I recommend looking here.  There are still more tutorials here.


Your grade will be calculated as follows:

bullet25% midterm
bullet35% final
bullet40% assignments

I reserve the right to change this allocation of grades as I see fit at any time.


There will be a midterm exam and a final exam. The exercises at the end of each chapter of Modern Compiler Implementation in ML are (somewhat)representative of the questions that will appear on the exam. The best way to study for the exams is to do your homework and do these exercises.


There will be approximately 8-10 weekly programming assignments. You may work individually or in pairs on these assignments.  These assignments are described on the assignments web page. You can get help with the assignments by sending electronic mail to the class mailing list, or by calling or visiting Professor Walker or the teaching assistant. Ask for help when you need it!

The late policy is to encourage submissions that are on-time. Therefore, you will lose 30% credit on the first day and 10% for each additional day late. This means that all credit is lost one week after the due date.

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. You are responsible for planning ahead and managing your time so that you can complete the assignments on time. You must either finish on time or accept the consequences of doing otherwise.

Penalties are waived only for unforeseen circumstances, like illness, and then only with an appropriate written excuse.

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. Writing code for use by another or using another person's code in any form without explicitly acknowledging them violates the University's academic regulations.

horizontal rule

Back to Top