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