| 
 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] '}'  |