## Tools for CSE courses

### Grading an assignment

To grade assignment e.g. ex1, create file ex1.
The file consists of one entry per submission.
An entry can be continued onto the next line either by terminating the line with a backslash or by prefixing the next line with whitespace.
Note: A new line within curly braces does not start a new entry.

Following is the formal structure of a submission entry:
entry:= students [ 'exempt' | unsigned number | [:] penalties ]
students:= student [ [,] students ]
student:= username | id
penalties:= penalty [ penalties ]
penalty:= amount [ {text} ]
amount:= signed number | errorcode [ ( expression ) ]
expression:= numerical expression with variable 'max'

Thus an entry can be a simple grade:
chana 95
or a list of penalties:
chana, danny:
-5 {no documentation}
e1
e2 (max/2) {only half wrong}
e3 (-5)
e5 (5)

or an exemption:
chana exempt
If expression is just an unsigned number, it assumes the sign of the associated errorcode. An entry with no grade or penalties e.g.
chana
is ignored if there are no errorcodes. Otherwise it is effectively 100.

If errorcodes are used they must be defined in file ex1.errorcodes.
Following is the formal structure of an errorcode entry:

name:= [:] signed number [,] text
and following are examples:
e1 -1 no documentation
e2 -2, wrong answer
e3: -3 whatever


### New features to facilitate importing penalties from more than one source

If configuration option multiple_entries is set to true, more than one entry per submission is allowed.
Entries are penalties i.e. structure is:
entry:= students [:] penalties
See above.
An entry is considered a new submission if none of the students are listed in earlier entries.
If at least one student in the entry is listed in an earlier entry, the entry is considered a continuation of the earlier entry's submission.
Of course, it is an error for an entry to continue more than one submission.

If configuration option multiple_files is set to true, entries may be split over more than one file.
The files carry an extension between 0 an 9.
For example, if files ex1.1 and ex1.2 exist, and file ex1 does not exist, they are used instead of it.
See Configuration options.