CS 421: Programming Languages and Compilers
Objectives
Students taking this course can expect to acquire the following:
  • an understanding of the major classes of high-level programming languages, language features, and programming styles, with an emphasis on applying concepts from programming language theory;
  • formal methods of specifying the syntax and semantics of programming languages;
  • and the knowledge needed to write parsers, interpreters, and simple compilers for the major classes of programming languages.

Contacting the Course Staff
  • For email and Piazza: please allow about 24 or so hours for a response, except on weekends (see below).
  • The staff do not work on the weekends. If you send or post something late Friday or over the weekend then you should not expect a reply before Monday.
  • Never ever EVER call any staff at home.

Submitting Assignments
There are three kinds of assignments in this course: machine problems (MPs), machine labs (MLs) and web assignments (WAs). MPs and WAs are done at home, using PrairieLearn. MLs are done in the Computer-Based Testing Facility (CBTF) and are done in much the same manner as MPs, and are similar in scope.
You can read the problem description and attempt to solve it either directly in PrairieLearn or dowload a tarball with the problem description and skeleton of the solution. You can work on your machine after you install OCaml version 4.07 Installation instructions for your local machine: link Installation instructions for EWS machines: module load ocaml/4.07.0 (every time you log in). Note that for some assignments it will be necessary to have the version 4.07, because the autograder infrastructure in PrairieLearn will be compiled with that version of Ocaml. When you retrieve an MP (or ML) the directory added will contain a pdf named mpX.pdf (or mlX.pdf) describing the work to be done for the assignment, a file of a name (typically mpX.ml) that is the same name as the file you must submit, and infrastructure to help you test your code. The file mpX.ml is just a stub. You need to delete or comment out the stub code and add your own. The webpage mps contains further information about how to test your code.

MPs, like WAs, will be turned in by entering your answer into text window in PrairieLearn.

Before submitting an MP or ML assignment, you MUST make sure that your MP or ML compiles with the student grading script supplied with the assignment. If your MP or ML fails to compile with the student grading script, your assignment will get NO CREDIT. There will be no partial credit for assignments that fail to compile.
You may do multiple commits of either the MPs or the WAs. Work submitted before the late deadline will not be subject to the late penalty, but work submitted after will.

Extensions
Each MP/AW will normally have an automatic 48-hour extension with a penalty on that MP/WA of 20% the total value of the assignment. If we cannot give such an extension for a particular MP/WA, for example due to scheduling constraints, we will announce that when the MP/WA is handed out.

During the automatic extension, staff is not obliged to answer questions for that MP/WA. You are on your own.

Extensions without a point penalty for the first 48 hours and any extension beyond the 48 hours will only be granted under very unusual circumstances such as a medical or family emergency. A signed note from a responsible party will be required. If you do need such an extension for some legitimate reason, do your best to let us know as soon as possible, preferably before the normal MP/WA deadline.

Regrade Policy
Our goal as the course staff is to grade your work carefully and accurately. Unfortunately, occasionally staff may overlook something, misunderstand an otherwise correct answer, or record a score incorrectly. This is where the regrade procedure steps in.

In order to have your regrade considered you must provide the following:

  • your netid;
  • what assignment or exam question was graded incorrectly; and
  • why you think your answer deserves more points than what the grader gave.
You must also submit your regrade request for a particular assignment within one week of receiving grades for that assignment. It must be submitted directly to the course instructor, not to the TAs. Late regrade requests will not be accepted or read.

Good reasons to ask for a regrade:

  • You used a notation that was unfamiliar to the grader but is standard (e.g., in a textbook for one of your other courses), when no specific notation was prescribed in class.
  • The grader recorded a score incorrectly.
  • The problem was ambiguous (or just plain wrong), causing you to interpret it differently than the grader.
  • The grader marked the problem wrong incorrectly.

Bad reasons to ask for a regrade:

  • Part of your answer "matched" the answer given in the solution. A partially correct answer is still wrong.
    "The difference between an almost right word and a right word is the difference between a lightning bug and lightning." -- Mark Twain
  • You wrote down two or more answers, only one of which was correct. Never put more than one answer for a question unless we tell you that such a thing is legitimate.
  • You expended a lot of effort answering the problem. We are measuring mastery, not effort.
  • You wrote something down.

Collaboration
You are allowed to collaborate on the machine problems (MPs) and the web assignments (WAs) of this course, in order to figure out how to solve the problem, resolve things you don't understand, and help each other track down errors or bugs. Nevertheless, you must each write and test your code separately and submit your own solution. Similarly, you must write up your own WA separately from others.

If your collaboration extended beyond understanding for what the problem was asking, then you should note on your assignment with whom you collaborated. As always, you are subject to the rules for plagiarism. Whether you pass this course or not will depend heavily on whether you pass the exams -- and those are non-collaborative.

We allow you to collaborate for several reasons:

  • all research done indicates that students learn more when they are allowed to work together;
  • our own ability to respond to student questions is increased because your peers are able to give help.
However, you have to collaborate intelligently in order to get the most out of it. If you ask a friend to describe the solution completely to you and then write it down (in your own phrasing), you will get the credit but you'll fail the exam because you never learned the methods/techniques/concepts. If you copy a friend's solution directly or substantially, that will be considered cheating, unless you give a clear cite of your source. If you work as a group, each writing part and sharing it with the others, that is also considered cheating, unless your cite all members from whom you copied. The penalties for being discovered cheating are described in the next section, below. If you offer your solution for others to copy, you should protect yourself from being accused of cheating by reporting this as well. Then, if some of those to whom you have lent your work fail to cite you, you will be protected from cheating accusations (unless they also claim they lent the same problem to you). If you copy your solutions from friends or other sources, you must cite your source.

Think of MPs and web assignments as being part of the practice for the exam. Many of the problems will be used as a basis for the exam problems themselves. In fact, when it comes time to study, we will likely advise you to redo your MPs and written assignments.

Policy on Cheating

We will be looking for cheating on both assignments and exams. The penalty for being caught cheating a first time -- either sharing your solution or copying anyone else's solution on an exam, or copying anyone else's solution on an assignment without citation -- is that you will receive a negative score for the unit cheated on equal to the value of the unit. A assignment (MP or web assignment) is one unit. A numbered problem on a test, including all its parts, is a unit. The penalty if you are caught cheating a second time is a grade of F for the class. You should take all reasonable precautions to prevent others from cheating and report any suspected cheating.

Grading
Our goal is to have grades back to you as soon as possible. In practice, this will probably take about a week for each assignment or exam. Whenever your assignment or exam is graded, a note will be posted on the main course website, and the graded assignment will be added to you assignment repository.

Grading Breakdown
Work Weight Notes
Machine Problems, Web Assignments, and Machine Labs (combined)20%
Midterm 120%
Midterm 220%
Final Exam40%
ProjectNA Only for 4-unit graduate students

Textbooks
There is no required textbook for this course. However, the following textbooks are recommended reading: (see also the resources page)
  • The Objective Caml system, release 3.12 Documentation and user's manual by Xavier Leroy (with Damien Doligez, Jacques Garrigue, Didier Rémy and Jérôme Vouillon), from the official INRIA website for OCAML.
  • an online book about OCaml from CalTech.
  • Modern Compiler Implementation in ML by Andrew Appel. Published by Cambridge University Press. ISBN 0-521-60764-7 (paperback).
  • Compilers: Principles, Techniques, and Tools, also known as "The Dragon Book"; by Aho, Sethi, and Ullman. Published by Addison-Wesley. ISBN: 0-201-10088-6.
  • Essentials of Programming Languages, 2nd Edition; by Friedman, Wand, and Haynes. Published by MIT Press 2001. ISBN: 0-262-06217-8.
  • Advanced Programming Language Design, by Raphael A. Finkel. Addison Wesley Publishing Company, 1996.
  • Programming Language Pragmatics, by Michael L. Scott. Morgan Kaufman Publishers, 2000.
  • Concepts, Techniques, and Models of Computer Programming Peter Van Roy and Seif Haridi, MIT Press, 2004 ISBN 0-262-22069-5
  • Online OCaml compiler (can be used for some quick hacks; note that it is not the substitute for the real copy of OCaml or the version that we need in the course): Link 1 Link 2.

README
Objectives
Contacting Staff
Submitting Assignments
Extensions
Regrade Policy
Collaboration
Policy on Cheating
Grading
Textbooks
FAQ