Stmt = AssignSt | Block | CallSt | CaseSt | ExitSt | EvalSt | ForSt
| IfSt | LockSt | LoopSt | RaiseSt | RepeatSt | ReturnSt
| TCaseSt | TryXptSt | TryFinSt | WhileSt | WithSt.
S = [ Stmt {";" Stmt} [";"] ].
AssignSt = Expr ":=" Expr.
CallSt = Expr "(" [Actual {"," Actual}] ")".
CaseSt = CASE Expr OF [Case] {"|" Case} [ELSE S] END.
ExitSt = EXIT.
EvalSt = EVAL Expr.
ForSt = FOR Id ":=" Expr TO Expr [BY Expr] DO S END.
IfSt = IF Expr THEN S {ELSIF Expr THEN S} [ELSE S] END.
LockSt = LOCK Expr DO S END.
LoopSt = LOOP S END.
RaiseSt = RAISE QualId ["(" Expr ")"].
RepeatSt = REPEAT S UNTIL Expr.
ReturnSt = RETURN [Expr].
TCaseSt = TYPECASE Expr OF [TCase] {"|" TCase} [ELSE S] END.
TryXptSt = TRY S EXCEPT [Handler] {"|" Handler} [ELSE S] END.
TryFinSt = TRY S FINALLY S END.
WhileSt = WHILE Expr DO S END.
WithSt = WITH Binding {"," Binding} DO S END.
Case = Labels {"," Labels} "=>" S.
Labels = ConstExpr [".." ConstExpr].
Handler = QualId {"," QualId} ["(" Id ")"] "=>" S.
TCase = Type {"," Type} ["(" Id ")"] "=>" S.
Binding = Id "=" Expr.
Actual = Type | [Id ":="] Expr .