BNF for ElanParser.jj

NON-TERMINALS

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