CS 421: Programming Languages and Compilers

Note: The late penalty is 20% of the total number of points 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 you earn.

Machine Labs for Fall 2016
Topic PrairieLearn Practice Name Issued Lab Start Date Lab End Date
ML1 OCaml: Basic OCaml Practice Machine Lab 1: Basic OCaml Tuesday, Aug 23 Tuesday, Aug 30 Friday, Sep 2
ML2 Patterns of Recursion, Higher-order Functions Machine Lab Practice 2: Patterns of Recursion Tuesday, Sep 6 Tuesday, Sep 13 Friday, Sep 16
ML3 A Unification-Based Type Inferencer Practice Machine Lab 3: A Unification-Based Type Inferencer Tuesday, Oct 4 Tuesday, Oct 11 Friday, Oct 14
ML4 A Lexer for PicoML Practice Machine Lab 4: A Lexer for PicoML Tuesday, Oct 18 Tuesday, Oct 25 Friday, Oct 28
ML5 A Transition Semantics Evaluator for CPS Friday, Nov 18 Tuesday, Nov 29 Friday, Dec 2

Machine Problems for Fall 2016
Topic: Issued: Due at 20:00 CT (8:00pm CT) on: Automatic extension
(with 20% penalty)
until 20:00pm CT (8:00pm CT) on:
MP1 Pattern Matching and Recursion Tuesday, Aug 30 Tuesday, Sep 6 Thursday, Sep 8
MP2 Higher-Order Functions and Continuation-Passing Style Tuesday, Sep 13 Tuesday, Sep 20 Thursday, Sep 22
MP3 Working with ADTs: Implementing CPS Transformation Tuesday, Sep 20 Tuesday, Oct 4 Thursday, Oct 6
MP4 Unification Algorithm Tuesday, Oct 11 Tuesday, Oct 18 Thursday, Oct 20
MP5 A Parser for PicoML Tuesday, Oct 25 Wednesday, Nov 2 Friday, Nov 4
MP6 An Evaluator for PicoML Wednesday, Nov 9 Wednesday, Nov 16 Friday, Nov 18

Web Assignment (WA) Problems for Fall 2016
Topic: Issued: Due at 20:00 CT (8:00pm CT) on: Automatic extension
(with 20% penalty)
until 20:00 CT (8:00pm CT) on:
WA1 Evaluation and Evironments (Practice) Aug 31, (Full) Sep 13 Saturday, Sep 17 Monday, Sep 19
WA2 Incremental Unification Algorithm Tuesday, Oct 18 Tuesday, Oct 25 Thursday, Oct 27
WA3 Regular Expressions Saturday, Oct 29 Saturday, Nov 5 Monday, Nov 7
WA4 TBD TBD TBD
WA5 TBD TBD TBD
WA6 TBD TBD TBD
WA7 TBD TBD TBD
WA8 TBD TBD TBD
WA9 TBD TBD TBD
WA10 TBD TBD TBD

Signing Up for a Machine Lab

To sign up for a time slot to complete your Machine Lab, do the following:

  1. You can sign up for a time slot to complete your Machine Lab by going to https://edu.cs.illinois.edu/testcenter/.
  2. If you do not see CS 421: Programming Languages as one of your courses, you should click Add a course, and then select CS 421: Programming Languages.
  3. Once you have CS 421: Programming Languages added to your courses, select the appropriate Machine Lab that you wish to sign up for.
  4. You should now be able to select a timeslot from those available to go to the testing facility and complete your Machine Lab. Please contact the instructor if you have a conflict as defined by university policy.

Machine Lab Logistics

There are certain things to remember when you're about to go complete a machine lab:

  • The testing facility is located in the basement of Grainger Library, room 057.
  • You have 50 minutes to complete your Machine Lab (as per the CBTF policy).
  • You will be using PrairieLearn, an online testing suite, to obtain your starter file and submit your solutions.
  • PrairieLearn works only on Firefox and Chrome. Don't use any browser other than those.
  • You will be provided with scratch paper (which you will turn in before you leave).
  • You will be able to, like on MPs, make and test your code against the grader.
  • If you are unable to make a scheduled ML, you must make alternate arrangements with the instructor.
IMPORTANT

You must bring ONLY your iCard and optionally, a writing utensil. Your iCard will be checked and scanned at the testing facility.

You are NOT allowed to bring backpacks or electronic devices (including watches, cellular devices, etc.) to your workstation. There are shelves at the enterance where a bag may be placed, but the CBTF staff are not respoonsible for its safekeeping..

You can find more information on the procedures and policies of the Computer-Based Testing Facility here.


Working on a Machine Lab

While you are completing your Machine Lab, you will have access to the following materials:

  1. PrairieLearn
  2. The starter files we have provided you with (including files to make a grader)
  3. A text editor
  4. OCaml
  5. make

You may want to review the Guide for Doing MPs and the instructions on Interactive Debugging prior to going to the testing facility.

Instructions will be provided on each question on how to untar and complete each question. For completeness, we have included them here as well.

Instructions on Machine Lab Questions
  1. Download the starter file, located here.
  2. Untar the starter file. This can be done in one of two ways:
    • In your terminal, locate the downloaded starter file, then execute tar -zxf ml1.tar.gz.
    • Using a GUI, untar the starter file.
  3. After untarring, a directory will be created named ml$NUMBER-$QUESTION. (e.g. ml1-twoPair)
    • Within the directory are the usual files you can use to make a grader, including an extensive set of tests.
    • We reserve the right to make changes to the provided test suite or run additional tests on submitted code.
  4. Complete the problem below in ml1.ml.
    • If you need to start from scratch, you should make a copy of ml1-skeleton.ml and rename it ml1.ml.
  5. When you have finished the problem, upload the completed ml1.ml file. (Note that submitting the problem will result in your grade being 100%; the grade on PrairieLearn only indicates question completion.)

Instructions for Submitting Assignments
  • Each student is given an svn directory that needs to be checked out once before it can be used for submission as follows:
    mkdir <working_directory>
    svn co https://subversion.ews.illinois.edu/svn/fa16-cs421/<your_netid> <working_directory>
  • After the initial checkout, <working_directory> will contain a subdirectory assignments. Once an assignment (MP or ML) has been announced, if you do an
    svn up
    you will add a directory named after the assignment (e.g. mp1) in the assignments directory. That directory will contain the information posted on the web for that assignment.
  • For a WA, the assignment will be available through PrairieLearn and will be collected there.
  • When you retrieve an MP or ML via svn up the directory added will contain a pdf named mpX.pdf or mlX.pdf describing the work to be done for the assignment, a file with a name (typically mpX.ml or mlX.ml) that is the same name as the file you must submit, and infrastructure to help you test your code. The file mpX.ml or mlX.ml is just a stub. You need to delete or comment out the stub code and add your own. The next section Guide for Doing MPs contains further information about how to test your code. For submission of MPs, you will only need do
    svn commit -m "<your comment here>"
    in the directory where your MP is. You do not need to add it, since we added it is as a stub for you. Please try to avoid committing the .cmo and .cmi files into the svn repository; it only occupies unnecessary space on the server and wastes unnecessary network traffic. You may always restrict svn commit to a specific collection of files and directories by adding a list to the end of the command.

    Before submitting an MP assignment, you MUST make sure that your MP compiles with the student grading script supplied with the assignment. If your MP 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.

    For each ML, we give you the whole set of problems a week before you need to go to the lab to be checke don them. Typically, in the lab you will be asked to do only a fraction (typicaly about a fifth, but may be smaller or larger) of the problem(s) you were given in the pdf. You may go to PrairieLearn to take sample runs of the lab before going to the Computer-Based Testing Facility (CBTF), but only the version of your work you submit in the CBTF will count for your grade. The code you submit in the CBTF must compile to receive credit for it. You will have access to the ocaml compiler and the test suite for you to check before you submit. The next section Guide for Doing MPs is useful for preparing for MLs as well as doing MPs.

  • You may do multiple commits of either the MPs or the WAs. We will only grade the last version committed before the Extension deadline. Each assignment will be classified as on time if its last submission is logged before the Due date of the assignment. If the last submission before the Extension deadline is after the Due date, you will receive a late penalty as described in Extensions.
Guide for Doing MPs
A guide for how to attack an MP:
  1. In your svn repository dircetory, or its subdirectory assignments, do an svn up to retrieve the directory mpX for the MP and all its contents. Go into that directory. (If we need to revise an assignment, you will need to repeat the svn up to obtain the revision.)
  2. 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 were 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 on which you wish to begin working. (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 mpX 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 statement of the problem once more. Place your code for the solution in mpX.ml (or mpX.mll or mpX.mly as specified by the assignment instructions) 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. Consider submitting your partial result so that you will at least get credit for what you have accomplished so far, in case something happens to interfere with your completing the rest of the assignment.
  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.
  6. When you have finished all problems (or given up and left the problem with the stub version originally provided), you will need to submit your file to the svn repository, and described in the previous section.

Interactive Debugging
In addition to running "make" and "grader", you probably want to test and debug your code interactively at the top level:
  1. Enter the directory with your source file.
  2. Type ocaml at the command line.
  3. Type #load "mpXcommon.cmo";; at the OCaml prompt, where X is the number of the assignment (this loads in the common stuff that we give you in compiled form by default).
  4. Type #use "mpX.ml";; at the OCaml prompt, where X is the number of the assignment. This loads in your code, and adds the functions you have defined to the identifiers recognized at top level.
  5. Type in commands followed by ';;' at the OCaml prompt to test your code interactively. Anything that you can do in a code file, you can do interactively. For example, you can define identifiers using 'let x = ...', etc...
  6. With each MP, you will be given a solution in compiled form. You may interactively test the solution to a problem, after having loaded "mpXcommon.cmo", by loading the solution file by typing #load "solution.cmo";;. After that, if you are supposed to write a function called, say splat, and wish to find out what it does on an input, say 39.2, you may execute the solution's version of splat by typing Solution.splat 39.2;;. Notice the capitalization.