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
::=
( "." | "->" )