Course Information

CS421/521: Compilers and Interpreters, Spring 2017, Yale University

  • General Information
  • Textbooks
  • Computers
  • Grading
  • Attendance
  • Assignments
  • Late-Assignments Policy
  • Collaboration Policy
  • How to Submit Programming Assignments
  • Keeping In Touch

  • General Information

    TTh 1:00 PM -2:15 PM, Room 200 Watson.

    Zhong Shao, 314 Watson, 432-6828, zhong dot shao at yale dot edu
    Office hours: T 2:20 - 3:20 PM, Th 4:00 - 5:00 PM, or by appt.

    Teaching Assistant:
    Mengqi Liu, 310 Watson, office: 432-xxxx, mengqi dot liu at yale dot edu
    Office hours: W 3:00 - 4:00 PM, F 3:00 - 4:00 PM, or by appt.


    The required textbooks are (read this to see why we use ML in this course):

  • A. W. Appel, Modern Compiler Implementation in ML (Paperback), 552 pages. Cambridge University Press 2004, ISBN-10: 0521607647.
  • J. D. Ullman, Elements of ML Programming, ML97 Edition (2nd Edition) (Paperback), Prentice-Hall 1998. ISBN-10: 0137903870.
  • Also, the following books are optional readings and are on reserve at the Becton Library:
  • A. V. Aho, M. S. Lam, R. Sethi, and J. D. Ullman, Compilers: Principles, Techniques, and Tools (2nd Edition), Addison Wesley 2006.
  • S. Muchnick, Advanced Compiler Design and Implementation, Morgan Kaufmann 1997.
  • L. C. Paulson, ML for the Working Programmer (2nd Edition), Cambridge University Press 1996.
  • C. Fraser and D. Hanson., A Retargetable C Compiler: Design and Implementation, The Benjamin/Cummings Publishing Company, Inc. 1995.
  • C. Reade, Elements of Functional Programming, Addison Wesley 1989
  • A. W. Appel, Compiling with Continuations, Cambridge University Press 1992.

  • Computers

    You will be using the Intel Linux PCs in the Zoo computing lab. These machines are named as follows:

           aphid        bumblebee    cardinal    chameleon  cicada       
           cobra        cricket      frog        gator      giraffe
           grizzly      hippo        hornet      jaguar     ladybug      
           lion         macaw        monkey      newt       peacock     
           perch        python       rattlesnake rhino      scorpion    
           swan         termite      tick        turtle     viper      

    To access these PCs, you can either directly login from their consoles in the Zoo, or just remotely login from other machines across the campus.

    If you plan to take the course for credit, you should get an account on these machines in the first week. Please visit the following web site to create a cs421 class directory (or to just sign up for a zoo account):


    Do not allow anyone else to use your accounts for any purpose. They are for your use alone, and you are responsible for any misuse. Your passwords control access to your accounts and should be kept secret.


    Your grade will be calculated as follows: These weights are subject to minor variation.

    Exams are scheduled in advance; unless prior arrangements are made, a grade of zero will be recorded for missed exams.


    Attendance at lectures is expected but will not be recorded. Students are, however, fully responsible for all material presented in lectures, even if some of it does not appear in the "official" lecture notes. Class attendance is recommended strongly.

    Lecture notes will be made available. Watch for an announcement of their availability.


    There will be 7 programming assignments, Assignments are due at 11:59 PM on the date specified in the Schedule sheet.

    For each programming assignment, you must turn in two things: the code, and a writeup describing what you did and why, and how you tested your program. The writeup is an important part of your work and will contribute significantly to your assignment grade.

    Most assignment will have style points. This style grade evaluates both the layout of your code and your use of the SML programming language. The layout part of the grade focuses mainly on your ability to make the program easily readable. As a concrete goal, we recommend that your lines rarely exceed 100 characters in width, and that spaces are used for alignment (if you want to align things). Tabulations can be used with parsimony for indentation purposes only (see this article for a discussion on the subject). Concerning your use of SML, we will make sure that you understand and use higher-order functions, pattern-matching, and more generally, functional programming.

    Late-Assignments Policy

    Each student is given 100 discretionary late hours for programming assignments, but any one assignment may only be up to 72 hours late (this is because we will post the sample solution after then). These are calendar hours, not business hours. As the homework assignments are submitted electronically, the "write date" on the student's homework file will be considered the completion date for late assignments.

    After you use up all of your discretionary late hours, assignments turned in late will be graded according to the following formula: S = R * (1 - t / c), where S is the grade given, R is the grade the work would have gotten if turned in on time, t is the amount of time by which the work was late, and c is equal to four days. Thus, the value of a late assignment decays daily, with a half-life of just over two days. Examples: work turned in five minutes late gets 99.9% credit, one hour late gets 99.0% credit, six hours late gets 93.8% credit, one day late gets 75.0% credit, two days late gets 50.0%, and three days late gets 25.0%. Assignments submitted more than 72 hours late will not be accepted.

    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.

    Collaboration Policy

    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 or lab assistants for help in debugging).

    Do not, under any circumstances, copy another person's program. Writing code for use by another or using another's code in any form violates the University's academic regulations and will be dealt with harshly.

    How to Submit Programming Assignments

    For each programming assignment, you must turn in two things: your programs; a README file for the writeup, the writeup is an important part of your work and will contribute significantly to your assignment grade.

    To submit your solutions to the programming assignments electronically, first change to the directory where your solutions are, and then use the following command.

         /c/cs421/bin/submit number files
    number is the assignment number and files is the list of files for that assignment. For example,
         /c/cs421/bin/submit 3 README tiger.lex
    submits the files README,, and tiger.lex for a fictitious assignment 3.

    The submit command copies your files to the directory /c/cs421/SUBMIT/number/login and lists all the files that you have submitted for assignment number. Here, login is your user account name.

    There is also unsubmit, which allows you to retract one or more files. For example,

         /c/cs421/bin/unsubmit 3 tiger.lex
    would remove your tiger.lex from the submission directory.

    You can also check what files you have submitted by using the check command. For example,

         /c/cs421/bin/check 3
    would list all the files your have submitted so far for assignment 3.

    Usually, you can omit the /c/cs421/bin/ prefix if /c/cs421/bin/ is already added to your PATH variable.

    Keeping In Touch

    We will use the piazza forum for announcements and discussions.

    Copyright (c) 1998 - 2017, Zhong Shao, Dept. of Computer Science, Yale University