Program -> [UsesClause] [DeclSection]...
CompoundStmt UsesClause -> '#' INCLUDE (String/,)...
DeclSection -> ConstSection
-> ProcedureDeclSection
-> VarStmt ';'
ConstSection -> '#' DEFINE ConstantDecl
ConstantDecl -> Ident Expression VarStmt -> Ident Ident [Array] [InitValue] /','...
ArrayDef -> '[' 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 SetConstructor -> SetNode/','...
SetNode -> Expression ['..' Expression] NewOperator -> NEW Designator
RelOp -> '>'
-> '<'
-> '<='
-> '>='
-> '!='
-> '=='
-> IN
-> IS
AddOp -> '+'
-> '-'
-> '||'
-> '^'
MulOp -> '*'
-> '/'
-> '%'
-> '&&'
-> '<<'
-> '>>'
Designator -> ['&'] Ident ['.' Ident | '[' ExprList ']' | '(' ExprList ')']...
ExprList -> Expression/','... Statement -> [SimpleStatement ';' | StructStmt | EmptyStmt]
EmptyStmt -> ';'
StmtList -> (Statement...)
SimpleStatement -> DeleteStmt
-> AssignStmt
-> VarStmt
-> CallStmt
-> ReturnStmt
-> (BREAK | CONTINUE | EXIT)
DeleteStmt -> DELETE Designator AssignStmt -> Designator ['+'|'-'|'*'|'/']'=' Expression
CallStmt -> Designator ['+''+'|'-''-']
ReturnStmt -> RETURN [Expression]
StructStmt -> CompoundStmt
-> ConditionalStmt
-> LoopStmt
-> TryStmt
CompoundStmt -> '{' [StmtList] '}'
ConditionalStmt -> IfStmt
-> CaseStmt
IfStmt -> IF '(' Expression ')' Statement [ELSE Statement]
CaseStmt -> SWITCH '(' Expression ')' '{' (CaseSelector)... [DEFAULT
':' Statement] '}' CaseSelector -> CASE SetConstructor ':' Statement
LoopStmt -> RepeatStmt
-> WhileStmt
-> ForStmt RepeatStmt -> DO Statement [';'] WHILE '(' Expression ')' ';'
WhileStmt -> WHILE '(' Expression ')' Statement
ForStmt -> FOR '(' ForStmtItem ';' Expression ';' ForStmtItem ')'
Statement
ForStmtItem -> AssignStmt
-> VarStmt
-> CallStmt
-> Empty TryStmt -> TRY CompoundStmt (FINALLY | EXCEPT) CompoundStmt
FunctionDecl -> FunctionHeading CompoundStmt
FunctionHeading -> Ident Ident [FormalParameters]
FormalParameters -> '(' [FormalParam/';'...] ')' FormalParam -> TypeIdent (['&'] Ident [InitValue]/',')...