Assignment Information
CS536-S24 Intro to PLs and Compilers


Follow the instructions below carefully to submit your work.

Programming Requirements

All programs must be written in Java. Accounts are provided on the CS lab computers. You may work on other machines (e.g., your own computer), but you will need to use the following tools for programming assignments 2 through 6:

You may be able to download these tools onto your own machines, but be aware that your code must also run on the CS Linux machines. If there are differences between the tools that you download and the versions on the Linux machines, this may cause differences in the way your code runs.

Collaboration

All students will work alone on the first programming assignment.

Computer Science and Computer Engineering graduate students must work alone on the remaining programming assignments. Graduate students from other departments, special students, and undergraduates have the option of working in pairs. Only one partner submits the program files, but both partners must submit and hand in the assignment's documentation file.

Submitting someone else's work as your own is academic misconduct and will be dealt with in accordance with the University's Academic Misconduct policies.

Hand-in Instructions

All assignments must be handed in through Gradescope. For each assignment, navigate to the Gradescope assignment designated for that program and upload the files indicated in the program write-up.

Grading Criteria

In general, your program grades will be based on:

Correctness

Correctness includes programming "to specification". For example, if you are given a signature for a method and told to implement that method, you should not change the signature; i.e., you should not change any of the following:

Similarly, if you are told to use specific names for your files, or to have your program produce specific output, use the names and the output exactly as specified -- using similar names/output is not acceptable.

Efficiency

Efficiency is not the major concern of this class, but it is an important aspect of good programming, so needlessly inefficient code may be penalized. For example, you may lose some points for an O(N2) algorithm if there is an obvious equivalent algorithm that is O(N).

Style

Style considerations include reasonable comments (e.g., comments that explain each class, that set off each method, and that explain non-trivial parts of the code), indentation that reflects program structure, and meaningful names (e.g., for methods, fields, and variables).

Test Coverage

Testing is one of the most important (and most difficult) aspects of programming. One goal is to design tests so that every statement in the code is executed at least once. You should also think about "boundary" cases (e.g., applying operations to empty data structures or to structures that contain a single value) and error conditions (for example, if your code throws exceptions or produces error or warning messages under certain conditions, you should be sure to test those conditions — use a try block to catch exceptions so that your test program doesn't halt).

It is important to design tests to produce output that makes it clear whether there are errors in the code. A good approach is to have the test code produce output only if the code being tested behaves in an unexpected way (and in that case, the test code should report the unexpected behavior).

Regrading Requests

Regrading requests must be submitted within *5* days of the release of the grade for a specific programming assignment.