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 )*