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