BNF for OclParser.jj.jj

NON-TERMINALS

Start ::= oclExpression ";"
operationName ::= ( name | "=" | "+" | "-" | "<" | "<=" | ">=" | ">" | "/" | "*" | "<>" | "implies" | "not" | "or" | "xor" | "and" )
formalParameterList ::= ( name ":" typeSpecifier ( "," name ":" typeSpecifier )* )?
typeSpecifier ::= ( collectionType | simpleTypeSpecifier )
collectionType ::= pathTypeName "(" oclExpression ")"
oclExpression ::= ( ( letExpression )* "in" )? expression
returnType ::= typeSpecifier
expression ::= logicalExpression
letExpression ::= "let" name ( "(" formalParameterList ")" )? ( ":" typeSpecifier )? "=" expression
ifExpression ::= "if" expression "then" expression "else" expression "endif"
logicalExpression ::= ( relationalExpression ( logicalOperator relationalExpression )* )
relationalExpression ::= ( additiveExpression ( relationalOperator additiveExpression )? )
additiveExpression ::= ( multiplicativeExpression ( addOperator multiplicativeExpression )* )
multiplicativeExpression ::= ( unaryExpression ( multiplyOperator unaryExpression )* )
unaryExpression ::= ( unaryOperator postfixExpression )
| postfixExpression
postfixExpression ::= ( primaryExpression ( postfixOperator propertyCall )* )
primaryExpression ::= ( literalObject | typeSpecifier | literal | propertyCall | "(" oclExpression ")" | ifExpression )
propertyCall ::= pathName ( timeExpression )? ( qualifiers )? ( propertyCallParameters )?
timeExpression ::= "@" ( <name> | <pre> )
qualifiers ::= "[" actualParameterList "]"
actualParameterList ::= oclExpression ( "," oclExpression )*
propertyCallParameters ::= "(" ( declarator )? ( actualParameterList )? ")"
declarator ::= <name> ( "," <name> )* ( ":" simpleTypeSpecifier )? ( ";" name ":" typeSpecifier "=" expression )? "|"
simpleTypeSpecifier ::= ( pathTypeName | enumerationType )
enumerationType ::= <enum> "{" "#" <name> ( "," "#" <name> )* "}"
literalObject ::= pathTypeName "{" ( expressionListOrRange )? "}"
expressionListOrRange ::= ( range | expressionList )
expressionList ::= expression ( "," expression )*
range ::= expression ".." expression
pathTypeName ::= ( "~" <name> ) ( "::" <name> )*
pathName ::= ( <name> ) ( "::" <name> )*
literal ::= ( lit_boolean | lit_integer | lit_real | "#" lit_name | lit_string )
lit_boolean ::= <bool>
lit_integer ::= <integer>
lit_real ::= <real>
lit_name ::= <name>
lit_string ::= <string>
name ::= <name>
logicalOperator ::= ( <and> | <or> | <xor> | <implies> )
relationalOperator ::= ( "=" | ">" | "<" | ">=" | "<=" | "<>" )
addOperator ::= ( "+" | "-" )
multiplyOperator ::= ( "*" | "/" )
unaryOperator ::= ( "-" | <not> )
postfixOperator ::= ( "." | "->" )