The syntax and class definitions presented above, omit some messy details in the interest of clarity. The actual system used does not allow function names such as `+' and `if' and does not make an implicit connection between syntax rules and method invocations.
It is also necessary to indicate that the parameters to the `if' method should not be eagerly evaluated and to distinguish between the `left-hand' and `right-hand' values of identifiers. Finally, it is necessary to indicate how repeated syntactic constructs are to be handled.
Nevertheless, even with all the messy details included, the specification should still be well within the grasp of the average student. This remains to be seen, however, since I have yet to present the course.
It is hard to imagine, however, that this approach will present the students with greater difficulties than they would encounter in the study of Kamin-style interpreters or the various other formalisms used to specify programming language semantics.
The full specification is available on-line.
Prof Herman Venter