CS 421: Programming Languages and Compilers
Machine Problems for Fall 2008
Topic: Issued: Due at 11:59pm Central Time on: Automatic extension
(with 20% penalty)
until 11:59pm Central Time on:
MP1 OCaml: Basic OCaml Tuesday, Aug 26 Tuesday, Sep 2 Thursday, Sep 4
MP2 Pattern Matching and Recursion Tuesday, Sep 2 Tuesday, Sep 9 Thursday, Sep 11
MP3 Recursion Patterns, Higher-Order Functions and Continuation Passing Style Tuesday, Sep 9 Tuesday, Sep 16 Thursday, Sep 18
MP4 User Defined Types Tuesday, Sep 23 Tuesday, Sep 30 Thursday, Oct 2
MP5 A Unification-Based Type Inferencer Wednesday, Oct 7 Tuesday, Oct 14 Thursday, Oct 16
MP6 Unification Algorithm Tuesday, Oct 14 Tuesday, Oct 21 Thursday, Oct 23
MP7 A Lexer for PicoML Wednesday, Oct 22 Tuesday, Oct 28 Thursday, Oct 30
MP8 A Parser for PicoML Tuesday, Nov 4 Tuesday, Nov 18 Thursday, Nov 20
MP9 An Evaluator for PicoML Wednesday, Nov 19  Tuesday, Dec 2 Thursday, Dec 4

Hand Written Assignments for Fall 2008
Topic: Issued: Due at 2:00pm CT on: Automatic extension
(with 20% penalty)
until 2:00pm CT on:
HW1 Evaluation and Environments Tuesday, Sep 16 Tuesday, Sep 23, 2:00 pm, in class Thurdday, Sep 25, 2:00 pm, in class
HW2 Unification, Type Derivation, Regular Expressions and Finite State Automata, Parse Trees and Ambiguous Grammars Tuesday, Oct 28 Tuesday, Nov 4, 2:00pm, in class No Extension
HW3

Note: The late penaly is 20% of the total number of points possible on the base part of the assignment, plus 20% of the total points possible on the extra credit, if you attempt the extra credit. It is not 20% of the number of points your earn.

Guide for Doing MPs
A guide for how to attack an MP:
  1. Download mpXgrader.tar.gz and untar it (tar xzf mpXgrader.tar.gz where X is the number of the MP). This will create an mpXgrader directory. Go into that directory.
  2. Copy the mpX-skeleton.ml file as mpX.ml. To make sure you have all the necessary pieces, start by executing make. This will create the grader executable. Run the executable (./grader). Examine the failing test cases for places where errors produced by your code. At this point, everything should compile, but the score will be 0.
  3. Read and understand the problem for the handout that you wish to begin working on. (Usually, working from top to bottom makes most sense.) There is a tests file in this directory. This is an important file containing the an incomplete set of test cases; you'll want to add more cases to test your code more thoroughly. Reread the problem from the handout, examining any sample output given. Open the tests file in the mpXgrader directory. Find the test cases given for that problem. Add your own test cases by following the same pattern as of the existing test cases. Try to get a good coverage of your function's behaviour. You should even try to have enough cases to guarantee that you will catch any errors. (This is not always possible, but a desirable goal.) And yes, test cases should be written even before starting the implementation of your function. This is a good software development practice.
  4. If necessary, reread the stament of the problem once more. Place your code for the solution in mpX.ml, replacing the stub found there for it. Implement your function. Try to do this in a step-wise fashion. When you think you have a solution (or enough of a part of one to compile and be worth testing), save you work and execute make and the ./grader again. Examine the passing and failing test cases again. Each failure is an instance where your code failed to give the right output for the given input, and you will need to examine your code to figure out why. When you are finished making a round of corrections, run make, followed by ./grader again. Continue until you find no more errors.
  5. When your code no longer generates any errors for the problem on which you were working, return to steps 3) and 4) to proceed with the next problem you wish to solve, until there are no more problems to be solved.