BNF for OclParser.jj.jj

NON-TERMINALS

Start ::= ( oclExpression | context ) ( ";" )?
context ::= <context> decList exprType ":" oclExpression
decList ::= varDec ( "," varDec )*
varDec ::= ( lit_name ":" )? pathTypeName
exprType ::= lit_name ( lit_name )?
formalParameterList ::= ( name ":" typeSpecifier ( "," name ":" typeSpecifier )* )?
typeSpecifier ::= ( collectionType | simpleTypeSpecifier )
collectionType ::= pathTypeName "(" oclExpression ")"
oclExpression ::= ( ( letExpression )* "in" )? expression
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 | propertyCall | typeSpecifier | literal | "(" oclExpression ")" | ifExpression )
propertyCall ::= pathName ( timeExpression )? ( qualifiers )? ( propertyCallParameters )?
timeExpression ::= "@" ( <name> | <pre> )
qualifiers ::= "[" actualParameterList "]"
actualParameterList ::= oclExpression ( "," oclExpression )*
propertyCallParameters ::= "(" ( declarator )? ( actualParameterList )? ")"
declarator ::= <name> ( "," <name> )* ( ":" typeSpecifier )? ( ";" <name> ":" typeSpecifier "=" expression )? "|"
simpleTypeSpecifier ::= ( pathTypeName | enumerationType )
enumerationType ::= <enum> "{" "#" <name> ( "," "#" <name> )* "}"
literalObject ::= ( <Tuple> "{" varDefExp ( "," varDefExp )* "}" | pathTypeName "{" ( expressionListOrRange )? "}" )
varDefExp ::= <name> ( ":" typeSpecifier )? "=" expression
expressionListOrRange ::= ( range | expressionList )
expressionList ::= expression ( "," expression )*
range ::= expression ".." expression
pathTypeName ::= ( <name> ) ( "::" <name> )*
pathName ::= ( <name> ) ( "::" <name> )*
literal ::= ( lit_undefined | lit_boolean | lit_integer | lit_real | "#" lit_name | lit_string )
lit_undefined ::= <undefined>
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 ::= ( "." | "->" )