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 .