
The following is a grammar for the language accepted by
the SmallC compiler.  The names used for nonterminals in the
grammar are compatible with the names used for procedures in
the smallc compiler, so the grammer presents a useful method
of documenting the compiler.  There are also some surprises,
such as a lack of C-compatibility in the ?: operator.

The notation is somewhat informal, and close to the usual
extended BNF:
	[x] => 0 or 1 occurances of x
	[x]* => 0 or more occurances of x
	[x]+ => 1 or more occurances of x
This "looping/option" syntax is used instead of the normal
recursive BNF style where the compiler code has that form.

The grammar is divided to indicate file boundaries.  Apologies
for any mistakes.  We spent three hours deriving this, and figured
it would save others the trouble.

- Geof Cooper
  IMAGEN

