BNF for GTDLParser.jj

NON-TERMINALS

GraphTypeDef ::= <kwGraph> <kwType> <IDENTIFIER> ( LanguageVersionSpec )? "{" ( VertexTypeDecl | EdgeTypeDecl | AttributeDecl | AttributeDef | PredicateDecl | GlobalDecl )* "}"
LanguageVersionSpec ::= <kwVersion> <INTEGER> ( ":" <INTEGER> )*
AttributeDef ::= <kwConst> <IDENTIFIER> "=" <STRING> "."
AttributeDecl ::= <kwAttribute> AttrDeclsOpt "."
AttrDeclsOpt ::= ( AttrDecl ( "," AttrDecl )* )?
AttrDecl ::= ( <kwHidden> | <kwExpert> )? AttrType <IDENTIFIER> ( "=" Expression )?
AttrType ::= ( ( <kwInteger> ) | ( <kwReal> ) | ( <kwString> ( "(" <STRING> ")" )? ) | ( <kwText> ( "(" <STRING> ")" )? ) | ( <kwType> ) | ( <kwFrame> ) | ( <kwExpression> ) | ( <kwParameters> ) | ( <kwOther> ( "(" <STRING> ")" )? ) | ( <kwDerived> ) | ( <kwGraph> ( "(" <STRING> ")" )? ) )
VertexTypeDecl ::= <kwVertex> <kwType> <IDENTIFIER> "(" AttrDeclsOpt ")" ( "[" <STRING> "]" )? ( GraphicAttrDecls )? "."
EdgeTypeDecl ::= <kwEdge> <kwType> <IDENTIFIER> "(" AttrDeclsOpt ")" ( "[" <STRING> "]" )? ( GraphicAttrDecls )? "."
GraphicAttrDecls ::= <kwGraphics> "(" GraphicAttributesOpt ")"
GraphicAttributesOpt ::= ( GraphicAttribute ( "," GraphicAttribute )* )?
GraphicAttribute ::= ( <kwHidden> | <kwExpert> )? GraphicType <IDENTIFIER> "=" GraphicAttributeValue
GraphicType ::= ( ( <kwInteger> ) | ( <kwReal> ) | ( <kwString> ) | ( <kwText> ) | ( <kwColor> ) | ( <kwOther> ) ) ( <STRING> )?
GraphicAttributeValue ::= ( ( <REAL> ) | ( <INTEGER> ) | ( <STRING> ) )
GlobalDecl ::= <kwDeclare> "{" ExpressionFrame "}"
PredicateDecl ::= ( <kwOptional> )? <kwPredicate> <IDENTIFIER> ( <STRING> )? ( ( <kwForall> | <kwExists> ) QuantifiedVars )? ":" Expression <kwEnd>
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 Expression
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> ":=" Expression
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> )* )