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