completeExpression |
::= |
( Expression )? <EOF> |
completeExpressionFrameOpt |
::= |
ExpressionFrameOpt <EOF> |
completeParameterDeclsOpt |
::= |
ParameterDeclsOpt <EOF> |
completeInteger |
::= |
<INTEGER> <EOF> |
completeReal |
::= |
( <INTEGER> | <REAL> ) <EOF> |
ParameterDeclsOpt |
::= |
( ParameterDecl ( "," ParameterDecl )* )? |
ParameterDecl |
::= |
( <IDENTIFIER> ( ":" TypeSpecifier )? ) |
ParametersOpt |
::= |
( Expression ( "," Expression )* )? |
TypeSpecifier |
::= |
( BasicType | ObjectType | FunctionType ) |
ObjectType |
::= |
<IDENTIFIER> |
BasicType |
::= |
( <kwChar> | <kwInt> | <kwBoolean> | <kwReal> ) |
FunctionType |
::= |
"(" ( TypeSpecifier ( "," TypeSpecifier )* )? ")" "->" TypeSpecifier |
Expression |
::= |
SingleExpression ( ";" SingleExpression )* |
SingleExpression |
::= |
( ( CondExpression | LetExpression | LambdaExpression | WhileExpr | AssignmentExpr | QuantifiedExpression | EnvExpr | MapExpr | ListExpr | SetExpr | BinOp4Expr ) ) |
AtomicExpression |
::= |
( VariableRef | <INTEGER> | <REAL> | <STRING> | <kwTrue> | <kwFalse> | <kwNull> ) |
BinOp4Expr |
::= |
BinOp3Expr ( BinOp4 BinOp4Expr )* |
BinOp4 |
::= |
( "*" | "/" | "&" | <kwMod> | <kwIn> ) |
BinOp3Expr |
::= |
BinOp2Expr ( BinOp3 BinOp3Expr )* |
BinOp3 |
::= |
( "+" | "-" | "|" ) |
BinOp2Expr |
::= |
BinOp1Expr ( BinOp2 BinOp2Expr )* |
BinOp2 |
::= |
( "&&" | "||" ) |
BinOp1Expr |
::= |
ApplicationExpr ( BinOp1 BinOp1Expr )* |
BinOp1 |
::= |
( "=" | "<" | "<=" | ">" | ">=" | "<>" ) |
ApplicationExpr |
::= |
PrimaryExpr ( ( "\'" <IDENTIFIER> ( "(" ParametersOpt ")" )? ) | ( "(" ParametersOpt ")" ) )* |
PrimaryExpr |
::= |
( PrefixExpr | StaticMethodCall | AtomicExpression | NewExpr | ThrowExpr | InstanceofExpr | BoundpExpr | "(" Expression ")" ) |
StaticMethodCall |
::= |
<kwClass> QID "\'" <IDENTIFIER> "(" ParametersOpt ")" |
PrefixExpr |
::= |
PrefixOp SingleExpression |
PrefixOp |
::= |
( "-" | "~" ) |
NewExpr |
::= |
<kwNew> QID "(" ParametersOpt ")" |
InstanceofExpr |
::= |
<kwInstanceof> "(" Expression "," QID ")" |
BoundpExpr |
::= |
<kwIsbound> <IDENTIFIER> |
ThrowExpr |
::= |
<kwThrow> Expression |
CondExpression |
::= |
<kwIf> Expression <kwThen> Expression <kwElse> Expression <kwEnd> |
LetExpression |
::= |
<kwLet> ExpressionFrame ":" Expression <kwEnd> |
LambdaExpression |
::= |
<kwLambda> "(" ParameterDeclsOpt ")" Expression <kwEnd> |
WhileExpr |
::= |
<kwWhile> Expression ":" Expression <kwEnd> |
AssignmentExpr |
::= |
<IDENTIFIER> ":=" SingleExpression |
QuantifiedExpression |
::= |
( ( <kwForall> ) | ( <kwExists> ) ) QuantifiedVars ":" Expression <kwEnd> |
QuantifiedVars |
::= |
SimpleQuantifiedVars ( "|" SimpleQuantifiedVars )* |
SimpleQuantifiedVars |
::= |
SingleQuantifiedVar ( "," SingleQuantifiedVar )* |
SingleQuantifiedVar |
::= |
<IDENTIFIER> <kwIn> Expression |
MapExpr |
::= |
<kwMap> "[" ( Expression "->" Expression ( "," Expression "->" Expression )* )? "]" |
ListExpr |
::= |
"[" ( Expression ( "," Expression )* )? "]" |
SetExpr |
::= |
"{" ( Expression ( "," Expression )* )? "}" |
EnvExpr |
::= |
<kwEnvironment> ( "[" ( <IDENTIFIER> ( ":" TypeSpecifier )? "=" Expression ( "," <IDENTIFIER> ( ":" TypeSpecifier )? "=" Expression )* )? "]" )? |
ExpressionFrameOpt |
::= |
( LocalDecl ( "," LocalDecl )* )? |
ExpressionFrame |
::= |
LocalDecl ( "," LocalDecl )* |
LocalDecl |
::= |
<IDENTIFIER> ( ":" TypeSpecifier )? "=" Expression |
VariableRef |
::= |
<IDENTIFIER> |
QID |
::= |
( <IDENTIFIER> ( "." <IDENTIFIER> )* ) |