| Policy | ::= { Statement | Procedure } | 
| Procedure | ::= ( 'procedure' | 'function' ) <identifier> '(' [Parameters] ')' BlockStatement | 
| Parameters | ::= Parameter {',' Parameter } | 
| Parameter | ::= <identifier> ['=' Expression] | 
| Statements | ::= Statement { Statement } | 
| Statement | ::= IfStatement | ForStatement | DoWhileStatement | WhileStatement | SwitchStatement | BreakStatement | ContinueStatement | ReturnStatement | AcceptStatement | RejectStatement | IncludeStatement | ReadOnlyStatement | ReadOnlyExceptStatement | ExpressionStatement | BlockStatement | 
| IfStatement | ::= 'if' '(' Expression ')' Statement [ 'else' Statement ] | 
| WhileStatement | ::= 'while' '(' Expression ')' Statement | 
| DoWhileStatement | ::= 'do' BlockStatement 'while' '(' Expression ')' ';' | 
| ForStatement | ::= 'for' '(' Expressions ';' Expression ';' [Expression] ')' Statement | 'for' '(' <identifier> 'in' Expression ')' Statement | 
| SwitchStatement | ::= 'switch' '(' Expression ')' '{' [Cases][Default] '}' | 
| Cases | ::= Case { Case } | 
| Case | ::= 'case' Expression ':' Statements | 
| Default | ::= 'default' Statements | 
| BreakStatement | ::= 'break' ';' | 
| ContinueStatement | ::= 'continue' ';' | 
| ReturnStatement | ::= 'return' [ Expression ] ';' | 
| IncludeStatement | ::= 'include' Expression ';' | 
| AcceptStatement | ::= 'accept' ';' | 
| RejectStatement | ::= 'reject' [ Expression ] ';' | 
| ReadOnlyStatement | ::= 'readonly' Expression ';' | 
| ReadOnlyExceptStatement | ::= 'readonlyexcept' Expression ';' | 
| ExpressionStatement | ::= Expression ';' | 
| BlockStatement | ::= '{' Statements '}' | 
| Expressions | ::= Expression {',' Expressions } | 
| Expression | ::= AssignmentExpression | ConditionalExpression | 
| AssignmentExpression | ::= PrimaryExpression { AssignmentOp Expression } | 
| AssignmentOp | ::= '=' | '+=' | '-=' | '*=' | '/=' | 
| ConditionalExpression | ::= LogicalOrExpression [ '?' Expression ':' Expression ] | 
| LogicalOrExpression | ::= LogicalAndExpression { '||' LogicalAndExpression } | 
| LogicalAndExpression | ::= BitwiseOrExpression { '&&' BitwiseOrExpression } | 
| BitwiseOrExpression | ::= BitwiseAndExpression { '|' BitwiseAndExpression } | 
| BitwiseAndExpression | ::= EqualityExpression { '&' EqualityExpression } | 
| EqualityExpression | ::= RelationalExpression { EqualityOp RelationalExpression } | 
| EqualityOp | ::= '==' | '!= | 
| RelationalExpression | ::= AdditiveExpression { RelationalOp AdditiveExpression } | 
| RelationalOp | ::= '<' | '>' | '<=' | '>=' | 'in' | 
| AdditiveExpression | ::= MultiplicativeExpression { AdditiveOp MultiplicativeExpression } | 
| AdditiveOp | ::= '+' | '-' | 
| MultiplicativeExpression | ::= PrimaryExpression { MultiplicativeOp PrimaryExpression } | 
| MultiplicativeOp | ::= '*' | '/' | '%' | 
| PrimaryExpression | ::= PrefixAssignmentExpression | DesignatorExpression | LiteralExpression | '-' Expression | '!' Expression | 'typeof' Expression | 'defined' <identifier> | '(' Expression ')' | 
| PrefixAssignmentExpression | ::= PrefixOp <identifier> | 
| PrefixOp | ::= '++' | '--' | 
| DesignatorExpression | ::= <identifier> | <identifier> PostfixOp | <identifier> Arguments | <identifier> ListAccess { ListAccess } | 
| PostfixOp | ::= '++' | '--' | 
| Arguments | ::= '(' [Expressions] ')' | 
| ListAccess | ::= '[' Expression ']' | 
| LiteralExpression | ::= <string> | <number> | <hexnumber> | <octalnumber> | <realnumber> | ListLiteral | 
| ListLiteral | ::= '{' [Expressions] '}' |