Grammar StitchTreeWalker ANTLR-generated HTML file from C:\eclipse\data\rainbow\org.sa.rainbow.lang\src\org\sa\rainbow\stitch\parser/stitchT.g
Terence Parr, MageLang Institute
|
Definition of tree parser StitchTreeWalker, which is a subclass of TreeParser. script : #( MODULE id:IDENTIFIER beh.createModule(#id); #( IMPORTS ( importSt )* ) beh.doImports(); functions #( TACTICS ( tactic )* ) #( STRATEGIES ( strategy )* ) ) ; importSt : #( i1:IMPORT_LIB s1:STRING_LIT imp = beh.createImport(#i1, #s1); ( importRenames )* ) | #( i2:IMPORT_MODEL s2:STRING_LIT imp = beh.createImport(#i2, #s2); ( importRenames )* ) | #( i3:IMPORT_OP s3:STRING_LIT imp = beh.createImport(#i3, #s3); ( importRenames )* ) ; functions : #( FUNC_LIST ( var )* ) ; tactic : #( TACTIC id:IDENTIFIER beh.beginTactic(#id); params vars condition action effect ) ; strategy : #( STRATEGY id:IDENTIFIER beh.beginStrategy(#id); expr beh.doStrategyCondition(Strategy.ConditionKind.APPLICABILITY); functions ( strategyNode )* ) ; importRenames : #( AS id1:IDENTIFIER id2:IDENTIFIER ) ; var : #( v:VAR_DEF beh.beginStatement(#v); t:TYPE id:IDENTIFIER ( #( ASSIGN expr ) | ) ) ; params : #( PARAM_LIST ( param )* ) ; vars : #( VAR_LIST ( var )* ) ; condition : #( cn:CONDITION beh.beginConditionBlock(#cn); ( expr )* ) ; action : #( ac:ACTION beh.beginActionBlock(#ac); ( statement )* ) ; effect : #( ef:EFFECT beh.beginEffectBlock(#ef); ( expr )* ) ; expr : ( #( EXPR expr ) | quanExpr | setExpr | assignExpr | logicalExpr | relationalExpr | arithmeticExpr | unaryExpr | idExpr ) ; statement : ( #( sl:STMT_LIST beh.beginStatement(#sl); ( statement )* ( errorHandler | ) ) | var | #( x:EXPR beh.beginStatement(#x); expr beh.endStatement(); ) | ifStmt | whileStmt | forStmt | EMPTY_STMT ) ; strategyNode : #( l:IDENTIFIER beh.beginStrategyNode(#l); strategyCond tacticRef ) ; strategyCond : #( STRATEGY_COND ( #( HASH ( #( pid1:IDENTIFIER ( pid2:IDENTIFIER | ) ) | pl:FLOAT_LIT ) ) beh.doStrategyProbability(#pid1, #pid2, #pl); | ) ( expr beh.doStrategyCondition(Strategy.ConditionKind.EXPRESSION); | SUCCESS beh.doStrategyCondition(Strategy.ConditionKind.SUCCESS); | FAILURE beh.doStrategyCondition(Strategy.ConditionKind.FAILURE); | DEFAULT beh.doStrategyCondition(Strategy.ConditionKind.DEFAULT); ) ) ; tacticRef : #( t1:IDENTIFIER beh.beginReferencedTactic(#t1); exprs ) ( #( AT expr ) | ) ( strategyBranch | DONE ) | DONE | NULLTACTIC | #( DO ( v:IDENTIFIER | i:INTEGER_LIT ) t2:IDENTIFIER beh.doStrategyLoop(#v, #i, #t2); ) | #( DO_UNSPEC t3:IDENTIFIER beh.doStrategyLoop(null, null, #t3); ) ; exprs : #( EXPR_LIST ( expr )* ) ; strategyBranch : #( STRATEGY_BRANCH beh.beginBranching(); ( strategyNode )+ ) ; errorHandler : #( e:ERROR beh.beginStatement(#e); ( expr statement )* ) ; ifStmt : #( si:IF beh.beginStatement(#si); expr statement ( statement | ) ) ; whileStmt : #( w:WHILE beh.beginStatement(#w); expr statement ) ; forStmt : #( f:FOR beh.beginStatement(#f); ( forInit beh.markForCondition(); forCond forIter statement | forEach beh.markForEach(); statement ) ) ; forInit : #( FOR_INIT ( ( var )+ | exprs | ) ) ; forCond : #( FOR_COND ( expr | ) ) ; forIter : #( FOR_ITER ( exprs | ) ) ; forEach : #( FOR_EACH param expr ) ; param : #( PARAM t:TYPE id:IDENTIFIER ) ; quanExpr : #( fa:FORALL beh.beginQuantifiedExpression(); params expr beh.doQuantifiedExpression(); expr ) | #( e:EXISTS beh.beginQuantifiedExpression(); params expr beh.doQuantifiedExpression(); expr ) | #( eu:EXISTS_UNIQUE beh.beginQuantifiedExpression(); params expr beh.doQuantifiedExpression(); expr ) | #( s:SELECT beh.beginQuantifiedExpression(); params expr beh.doQuantifiedExpression(); expr ) ; setExpr : #( s:SET ( expr ( expr )* | ) ) ; assignExpr : #( aa:ASSIGN beh.lOp(); expr beh.rOp(); expr ) ; logicalExpr : #( imp:IMPLIES beh.lOp(); expr beh.rOp(); expr ) | #( iff:IFF beh.lOp(); expr beh.rOp(); expr ) | #( lor:LOGICAL_OR beh.lOp(); expr beh.rOp(); expr ) | #( lnd:LOGICAL_AND beh.lOp(); expr beh.rOp(); expr ) ; relationalExpr : #( ne:NE beh.lOp(); expr beh.rOp(); expr ) | #( eq:EQ beh.lOp(); expr beh.rOp(); expr ) | #( lt:LT beh.lOp(); expr beh.rOp(); expr ) | #( le:LE beh.lOp(); expr beh.rOp(); expr ) | #( ge:GE beh.lOp(); expr beh.rOp(); expr ) | #( gt:GT beh.lOp(); expr beh.rOp(); expr ) ; arithmeticExpr : #( p:PLUS beh.lOp(); expr beh.rOp(); expr ) | #( m:MINUS beh.lOp(); expr beh.rOp(); expr ) | #( t:STAR beh.lOp(); expr beh.rOp(); expr ) | #( d:SLASH beh.lOp(); expr beh.rOp(); expr ) | #( r:MOD beh.lOp(); expr beh.rOp(); expr ) ; unaryExpr : #( ic:INCR beh.lOp(); expr ) | #( dc:DECR beh.lOp(); expr ) | #( um:UNARY_MINUS beh.lOp(); expr ) | #( ln:LOGICAL_NOT beh.lOp(); expr ) ; idExpr : IDENTIFIER | methodCall | INTEGER_LIT | FLOAT_LIT | STRING_LIT | CHAR_LIT | TRUE | FALSE | NULL ; methodCall : #( mc:METHOD_CALL id:IDENTIFIER ( exprs | ) ) ;