Program -> Statements Statements -> Statement... Block -> '{' Statements '}' ImportStmt -> IMPORT (String/,)... VarStmt -> VAR (VarDecl/',')... VarDecl -> Ident [Array] [InitValue] Array -> '[' (ArrayDim/',')... ']' ArrayDim -> Expression InitValue -> '=' Expression Expression -> SimpleExpression [RelOp SimpleExpression]... SimpleExpression -> ['-'] Term [AddOp Term]... Term -> Factor [MulOp Factor]... Factor -> Designator -> UnsignedNumber -> String -> '(' Expression ')' -> '!' Factor -> '[' SetConstructor ']' -> NewOperator -> '<' FRString '>' SetConstructor -> SetNode/','... SetNode -> Expression ['..' Expression] NewOperator -> NEW Designator RelOp -> '>' -> '<' -> '<=' -> '>=' -> '!=' -> '==' -> IN -> IS AddOp -> '+' -> '-' -> '||' -> '^' MulOp -> '*' -> '/' -> '%' -> '&&' -> '<<' -> '>>' Designator -> ['&'] Ident ['.' Ident | '[' ExprList ']' | '(' [ExprList] ')']... ExprList -> Expression/','... Statement -> (AssignStmt | CallStmt | BreakStmt | ContinueStmt | DeleteStmt | DoWhileStmt | ForStmt | FunctionStmt | IfStmt | ImportStmt | ReturnStmt | SwitchStmt | VarStmt | WhileStmt | WithStmt | Block) [';'] BreakStmt -> BREAK ContinueStmt -> CONTINUE DeleteStmt -> DELETE Designator AssignStmt -> Designator ['+'|'-'|'*'|'/']'=' Expression CallStmt -> Designator ['+''+'|'-''-'] ReturnStmt -> RETURN [Expression] IfStmt -> IF '(' Expression ')' Statement [ELSE Statement] SwitchStmt -> SWITCH '(' Expression ')' '{' (CaseSelector)... [DEFAULT ':' Statement] '}' CaseSelector -> CASE SetConstructor ':' Statement DoWhileStmt -> DO Statement [';'] WHILE '(' Expression ')' ';' WhileStmt -> WHILE '(' Expression ')' Statement ForStmt -> FOR '(' ForStmtItem ';' Expression ';' ForStmtItem ')' Statement ForStmtItem -> AssignStmt -> CallStmt -> VarStmt -> Empty TryStmt -> TRY CompoundStmt (FINALLY | EXCEPT) CompoundStmt FunctionStmt -> FunctionHeading Block FunctionHeading -> FUNCTION Ident FormalParameters FormalParameters -> '(' [FormalParam/','...] ')' FormalParam -> ['&'] Ident WithStmt -> WITH '(' Designator ')' Statement