P in Program
L in Variable
D in Declaration
N in Numeral
T in Type-structure
X in Identifier-expr
C in Command
I in Identifier
E in Expression
P ::= D in C
D ::= D,D | D;D | fun I=E | const
I=N
| proc I=C | var I:T | class I=T
| module I={D} | import X
T ::= newint | record D end | X
C ::= L:=E | C;C | if E then C
else C fi
| while E do C
od | skip | call X
E ::= N | @L | E+E |
E=E | not E | X
L ::= X
N ::= | X
X ::= I | X.I