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