Project Requirements
The details of the project are very open ended; the important
thing is that you put some design effort into it and don't just
turn in examples and illustrations from class stitched together.
How you language works, what it is capable of, and what it is
like are all up to you. It does not have to be such a great language
that it will replace C overnight, but it does have to be usable.
Plus, if you have done (or are expecting to do) badly on tests,
this is where some extra effort completely under your own control
can make up for a lot.
The language you implement must be usable, to the extent that
it can run programs that perform useful tasks which could not
practically be performed without a computer.
The program must be sufficiently clearly written and well-structured
that it can be understood (particularly by me) without undue
effort.
The fact that you must be able to run programs tells you that
lexical analysis, parsing, linearising, and execution by some
kind of virtual machine is necessary. A simple recursive
interpreting function is an alternative to the final two stages,
but not a very good alternative.
Errors must be caught and reported to the user. Good recovery
from errors is not required (i.e. after reporting one syntax
or semantic error, it is not necessary for the compiler to
continue any futher; after one run-time error, the program
may be halted).
Anything beyond the basic requirements will be looked on
kindly and will earn extra credit towards examination
deficiencies past and future.
Any deficiencies should be clearly documented. Errors that you
seem to be unaware of are much worse than errors you are
clearly on top of.