BNF for medl.jj
NON-TERMINALS
setRelOp
::=
java code
setArithOp
::=
java code
addToSymbolTable
::=
java code
searchSymbolTable
::=
java code
error_skipto
::=
java code
RequirementScript
::=
<REQSPEC> <IDENTIFIER>
Statements
Guards
<END>
Statements
::=
( (
Statement
) ( ";" )? )*
Statement
::=
EventDeclaration
|
ConditionDeclaration
|
ActionDeclaration
|
AuxilliaryVariableDeclaration
|
EventDefinition
|
ConditionDefinition
|
SafetyPropertyDefinition
|
AlarmDefinition
EventDeclaration
::=
<IMPORT> <EVENT>
IdentifierList
ConditionDeclaration
::=
<IMPORT> <CONDITION>
IdentifierList
ActionDeclaration
::=
<IMPORT> <ACTION>
IdentifierList
IdentifierList
::=
<IDENTIFIER> ( "," <IDENTIFIER> )*
AuxilliaryVariableDeclaration
::=
<AUXVAR>
PrimitiveType
IdentifierList
EventDefinition
::=
<EVENT> <IDENTIFIER> "="
EventExpression
ConditionDefinition
::=
<CONDITION> <IDENTIFIER> "="
ConditionalExpression
SafetyPropertyDefinition
::=
<PROPERTY> <IDENTIFIER> "="
ConditionalExpression
AlarmDefinition
::=
<ALARM> <IDENTIFIER> "="
EventExpression
EventExpression
::=
(
SimpleEventExpression
( (
EventOp
EventExpression
) )?
OptionalWhen
)
OptionalWhen
::=
( <WHEN>
ConditionalExpression
)*
SimpleEventExpression
::=
( <IDENTIFIER> | "("
EventExpression
")" | <START> "("
ConditionalExpression
")" | <END> "("
ConditionalExpression
")" )
EventOp
::=
( "&&" )
|
( "||" )
Guards
::=
(
Guard
)*
Guard
::=
<IDENTIFIER> "->" "{"
Updates
"}"
Updates
::=
Update
( ";"
Update
)* ";"
Update
::=
( ( <IDENTIFIER> "="
Expression
) | ( <INVOKE> <IDENTIFIER> ) | ( <PRINT>
Expression
) )
Type
::=
( (
PrimitiveType
|
Name
) ( "[" "]" )* )
PrimitiveType
::=
( "boolean" )
|
( "char" )
|
( "byte" )
|
( "short" )
|
( "int" )
|
( "long" )
|
( "float" )
|
( "double" )
ResultType
::=
( "void" )
|
(
Type
)
Name
::=
( <IDENTIFIER> ( "." ( <IDENTIFIER> ) )* )
Expression
::=
ConditionalExpression
ConditionalExpression
::=
(
ConditionalOrExpression
( "?"
Expression
":"
ConditionalExpression
)? )
ConditionalOrExpression
::=
(
ConditionalAndExpression
( "||"
ConditionalAndExpression
)* )
ConditionalAndExpression
::=
(
InclusiveOrExpression
( "&&"
InclusiveOrExpression
)* )
InclusiveOrExpression
::=
(
ExclusiveOrExpression
( "|"
ExclusiveOrExpression
)* )
ExclusiveOrExpression
::=
(
AndExpression
( "^"
AndExpression
)* )
AndExpression
::=
(
EqualityExpression
( "&"
EqualityExpression
)* )
EqualityExpression
::=
( "["
EventExpression
","
EventExpression
")" )
|
( <DEFINED> "("
Expression
")" )
|
InstanceOfExpression
( ( ( "==" | "!=" )
InstanceOfExpression
) )*
InstanceOfExpression
::=
(
RelationalExpression
( "instanceof"
Type
)? )
RelationalExpression
::=
ShiftExpression
( ( ( "<" | ">" | "<=" | ">=" )
ShiftExpression
) )*
ShiftExpression
::=
AdditiveExpression
( ( ( "<<" | ">>" | ">>>" )
AdditiveExpression
) )*
AdditiveExpression
::=
MultiplicativeExpression
( ( ( "+" | "-" )
MultiplicativeExpression
) )*
MultiplicativeExpression
::=
UnaryExpression
( ( ( "*" | "/" | "%" )
UnaryExpression
) )*
UnaryExpression
::=
( ( "+" | "-" )
UnaryExpression
)
|
UnaryExpressionNotPlusMinus
|
( <TIME> "("
EventExpression
")" )
|
( <VALUE> "("
EventExpression
","
Expression
")" )
UnaryExpressionNotPlusMinus
::=
( ( "~" | "!" )
UnaryExpression
)
|
CastExpression
|
PrimaryExpression
CastLookahead
::=
"("
PrimitiveType
|
"("
Name
"[" "]"
|
"("
Name
")" ( "~" | "!" | "(" | <IDENTIFIER> |
Literal
)
CastExpression
::=
( "("
Type
")"
UnaryExpression
| "("
Type
")"
UnaryExpressionNotPlusMinus
)
PrimaryExpression
::=
PrimaryPrefix
(
PrimarySuffix
)*
PrimaryPrefix
::=
Literal
|
"("
Expression
")"
|
ResultType
"." "class"
|
Name
PrimarySuffix
::=
"["
Expression
"]"
|
"." <IDENTIFIER>
|
Arguments
Literal
::=
( <INTEGER_LITERAL> )
|
( <FLOATING_POINT_LITERAL> )
|
( <CHARACTER_LITERAL> )
|
( <STRING_LITERAL> )
|
( "true" )
|
( "false" )
|
( "null" )
Arguments
::=
"(" (
ArgumentList
)? ")"
ArgumentList
::=
Expression
( ","
Expression
)*