diff --git a/tool/src/org/antlr/v4/Tool.java b/tool/src/org/antlr/v4/Tool.java index ec4d276c0..2a7f9f978 100644 --- a/tool/src/org/antlr/v4/Tool.java +++ b/tool/src/org/antlr/v4/Tool.java @@ -4,7 +4,7 @@ import org.antlr.runtime.*; import org.antlr.v4.parse.ANTLRLexer; import org.antlr.v4.parse.ANTLRParser; import org.antlr.v4.parse.GrammarASTAdaptor; -import org.antlr.v4.semantics.SemanticsPipeline; +import org.antlr.v4.semantics.SemanticPipeline; import org.antlr.v4.tool.*; import java.io.File; @@ -330,12 +330,15 @@ public class Tool { lexerAST = extractImplicitLexer(ast); // alters ast } Grammar g = new Grammar(this, ast); + g.fileName = grammarFileNames.get(0); process(g); if ( lexerAST!=null ) { // todo: don't process if errors in parser - Grammar g2 = new Grammar(this, lexerAST); - g2.implicitLexer = true; - process(g2); + Grammar lexerg = new Grammar(this, lexerAST); + lexerg.fileName = grammarFileNames.get(0); + g.implicitLexer = lexerg; + lexerg.implicitLexerOwner = g; + process(lexerg); } } @@ -344,8 +347,10 @@ public class Tool { g.loadImportedGrammars(); if ( g.ast!=null && internalOption_PrintGrammarTree ) System.out.println(g.ast.toStringTree()); //g.ast.inspect(); - SemanticsPipeline sem = new SemanticsPipeline(); + SemanticPipeline sem = new SemanticPipeline(); sem.process(g); + + // todo: add strings we collected to lexer? } // TODO: Move to ast manipulation class? @@ -371,6 +376,7 @@ public class Tool { public GrammarRootAST extractImplicitLexer(GrammarRootAST combinedAST) { //System.out.println("before="+combinedAST.toStringTree()); GrammarASTAdaptor adaptor = new GrammarASTAdaptor(combinedAST.token.getInputStream()); + List elements = combinedAST.getChildren(); // MAKE A GRAMMAR ROOT and ID String lexerName = combinedAST.getChild(0).getText()+"Lexer"; @@ -395,15 +401,16 @@ public class Tool { } // MOVE lexer:: actions - List elements = combinedAST.getChildren(); + List actionsWeMoved = new ArrayList(); for (GrammarAST e : elements) { if ( e.getType()==ANTLRParser.AT ) { if ( e.getChild(0).getText().equals("lexer") ) { lexerAST.addChild(e); - elements.remove(e); + actionsWeMoved.add(e); } } } + elements.removeAll(actionsWeMoved); GrammarAST combinedRulesRoot = (GrammarAST)combinedAST.getFirstChildWithType(ANTLRParser.RULES); if ( combinedRulesRoot==null ) return lexerAST; diff --git a/tool/src/org/antlr/v4/parse/ANTLRLexer.java b/tool/src/org/antlr/v4/parse/ANTLRLexer.java index 64536373b..f4178d553 100644 --- a/tool/src/org/antlr/v4/parse/ANTLRLexer.java +++ b/tool/src/org/antlr/v4/parse/ANTLRLexer.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 ANTLRLexer.g 2010-02-06 14:39:32 +// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 ANTLRLexer.g 2010-02-06 15:46:36 /* [The "BSD licence"] @@ -263,7 +263,7 @@ public class ANTLRLexer extends Lexer { if ( (( input.LA(2) != '/')) ) { alt3=1; } - else if ( (((( true )&&( !(input.LA(1) == '*' && input.LA(2) == '/') ))||( true ))) ) { + else if ( ((( true )||(( true )&&( !(input.LA(1) == '*' && input.LA(2) == '/') )))) ) { alt3=2; } else { diff --git a/tool/src/org/antlr/v4/parse/ANTLRParser.g b/tool/src/org/antlr/v4/parse/ANTLRParser.g index b52de4de6..6951f0404 100644 --- a/tool/src/org/antlr/v4/parse/ANTLRParser.g +++ b/tool/src/org/antlr/v4/parse/ANTLRParser.g @@ -722,7 +722,7 @@ block // ruleref : RULE_REF ARG_ACTION? - ( (op=ROOT|op=BANG) -> ^($op RULE_REF ARG_ACTION?) + ( (op=ROOT|op=BANG) -> ^($op ^(RULE_REF ARG_ACTION?)) | -> ^(RULE_REF ARG_ACTION?) ) ; diff --git a/tool/src/org/antlr/v4/parse/ANTLRParser.java b/tool/src/org/antlr/v4/parse/ANTLRParser.java index 0298cdfba..e149bc5bd 100644 --- a/tool/src/org/antlr/v4/parse/ANTLRParser.java +++ b/tool/src/org/antlr/v4/parse/ANTLRParser.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 ANTLRParser.g 2010-02-06 14:39:34 +// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 ANTLRParser.g 2010-02-06 15:46:38 /* [The "BSD licence"] @@ -284,7 +284,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: id, prequelConstruct, rules, DOC_COMMENT, grammarType + // elements: rules, prequelConstruct, grammarType, DOC_COMMENT, id // token labels: // rule labels: retval // token list labels: @@ -788,7 +788,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: OPTIONS, option + // elements: option, OPTIONS // token labels: // rule labels: retval // token list labels: @@ -1123,7 +1123,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: IMPORT, delegateGrammar + // elements: delegateGrammar, IMPORT // token labels: // rule labels: retval // token list labels: @@ -1404,7 +1404,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: tokenSpec, TOKENS + // elements: TOKENS, tokenSpec // token labels: // rule labels: retval // token list labels: @@ -1559,7 +1559,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: id, STRING_LITERAL, ASSIGN + // elements: STRING_LITERAL, ASSIGN, id // token labels: // rule labels: retval // token list labels: @@ -1699,7 +1699,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: ACTION, SCOPE, id + // elements: ACTION, id, SCOPE // token labels: // rule labels: retval // token list labels: @@ -1853,7 +1853,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: AT, id, actionScopeName, ACTION + // elements: ACTION, AT, id, actionScopeName // token labels: // rule labels: retval // token list labels: @@ -2353,7 +2353,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: ARG_ACTION, ruleModifiers, altListAsBlock, exceptionGroup, ruleReturns, rulePrequel, DOC_COMMENT, id + // elements: ruleReturns, altListAsBlock, DOC_COMMENT, id, exceptionGroup, rulePrequel, ARG_ACTION, ruleModifiers // token labels: // rule labels: retval // token list labels: @@ -2579,7 +2579,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: CATCH, ACTION, ARG_ACTION + // elements: ACTION, CATCH, ARG_ACTION // token labels: // rule labels: retval // token list labels: @@ -2662,7 +2662,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: FINALLY, ACTION + // elements: ACTION, FINALLY // token labels: // rule labels: retval // token list labels: @@ -3106,7 +3106,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: SCOPE, ACTION + // elements: ACTION, SCOPE // token labels: // rule labels: retval // token list labels: @@ -3185,7 +3185,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: id, SCOPE + // elements: SCOPE, id // token labels: // rule labels: retval // token list labels: @@ -3284,7 +3284,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: id, AT, ACTION + // elements: AT, id, ACTION // token labels: // rule labels: retval // token list labels: @@ -3800,7 +3800,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: elements, rewrite + // elements: rewrite, elements // token labels: // rule labels: retval // token list labels: @@ -4165,7 +4165,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: labeledElement, ebnfSuffix + // elements: ebnfSuffix, labeledElement // token labels: // rule labels: retval // token list labels: @@ -4944,7 +4944,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: block, blockSuffixe + // elements: blockSuffixe, block // token labels: // rule labels: retval // token list labels: @@ -5450,7 +5450,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: DOT, ruleref, id + // elements: ruleref, DOT, id // token labels: // rule labels: retval // token list labels: @@ -5508,7 +5508,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: id, terminal, DOT + // elements: id, DOT, terminal // token labels: // rule labels: retval // token list labels: @@ -5707,7 +5707,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: NOT, notTerminal + // elements: notTerminal, NOT // token labels: // rule labels: retval // token list labels: @@ -5750,7 +5750,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: NOT, block + // elements: block, NOT // token labels: // rule labels: retval // token list labels: @@ -6014,7 +6014,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: optionsSpec, ACTION, altList, ra + // elements: ACTION, altList, optionsSpec, ra // token labels: // rule labels: retval // token list labels: @@ -6086,7 +6086,7 @@ public class ANTLRParser extends Parser { }; // $ANTLR start "ruleref" - // ANTLRParser.g:723:1: ruleref : RULE_REF ( ARG_ACTION )? ( (op= ROOT | op= BANG ) -> ^( $op RULE_REF ( ARG_ACTION )? ) | -> ^( RULE_REF ( ARG_ACTION )? ) ) ; + // ANTLRParser.g:723:1: ruleref : RULE_REF ( ARG_ACTION )? ( (op= ROOT | op= BANG ) -> ^( $op ^( RULE_REF ( ARG_ACTION )? ) ) | -> ^( RULE_REF ( ARG_ACTION )? ) ) ; public final ANTLRParser.ruleref_return ruleref() throws RecognitionException { ANTLRParser.ruleref_return retval = new ANTLRParser.ruleref_return(); retval.start = input.LT(1); @@ -6106,8 +6106,8 @@ public class ANTLRParser extends Parser { RewriteRuleTokenStream stream_ARG_ACTION=new RewriteRuleTokenStream(adaptor,"token ARG_ACTION"); try { - // ANTLRParser.g:724:5: ( RULE_REF ( ARG_ACTION )? ( (op= ROOT | op= BANG ) -> ^( $op RULE_REF ( ARG_ACTION )? ) | -> ^( RULE_REF ( ARG_ACTION )? ) ) ) - // ANTLRParser.g:724:7: RULE_REF ( ARG_ACTION )? ( (op= ROOT | op= BANG ) -> ^( $op RULE_REF ( ARG_ACTION )? ) | -> ^( RULE_REF ( ARG_ACTION )? ) ) + // ANTLRParser.g:724:5: ( RULE_REF ( ARG_ACTION )? ( (op= ROOT | op= BANG ) -> ^( $op ^( RULE_REF ( ARG_ACTION )? ) ) | -> ^( RULE_REF ( ARG_ACTION )? ) ) ) + // ANTLRParser.g:724:7: RULE_REF ( ARG_ACTION )? ( (op= ROOT | op= BANG ) -> ^( $op ^( RULE_REF ( ARG_ACTION )? ) ) | -> ^( RULE_REF ( ARG_ACTION )? ) ) { RULE_REF152=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref3702); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RULE_REF.add(RULE_REF152); @@ -6132,7 +6132,7 @@ public class ANTLRParser extends Parser { } - // ANTLRParser.g:725:3: ( (op= ROOT | op= BANG ) -> ^( $op RULE_REF ( ARG_ACTION )? ) | -> ^( RULE_REF ( ARG_ACTION )? ) ) + // ANTLRParser.g:725:3: ( (op= ROOT | op= BANG ) -> ^( $op ^( RULE_REF ( ARG_ACTION )? ) ) | -> ^( RULE_REF ( ARG_ACTION )? ) ) int alt52=2; int LA52_0 = input.LA(1); @@ -6195,7 +6195,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: RULE_REF, op, ARG_ACTION + // elements: ARG_ACTION, op, RULE_REF // token labels: op // rule labels: retval // token list labels: @@ -6207,21 +6207,28 @@ public class ANTLRParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (GrammarAST)adaptor.nil(); - // 725:23: -> ^( $op RULE_REF ( ARG_ACTION )? ) + // 725:23: -> ^( $op ^( RULE_REF ( ARG_ACTION )? ) ) { - // ANTLRParser.g:725:26: ^( $op RULE_REF ( ARG_ACTION )? ) + // ANTLRParser.g:725:26: ^( $op ^( RULE_REF ( ARG_ACTION )? ) ) { GrammarAST root_1 = (GrammarAST)adaptor.nil(); root_1 = (GrammarAST)adaptor.becomeRoot(stream_op.nextNode(), root_1); - adaptor.addChild(root_1, stream_RULE_REF.nextNode()); - // ANTLRParser.g:725:41: ( ARG_ACTION )? + // ANTLRParser.g:725:32: ^( RULE_REF ( ARG_ACTION )? ) + { + GrammarAST root_2 = (GrammarAST)adaptor.nil(); + root_2 = (GrammarAST)adaptor.becomeRoot(stream_RULE_REF.nextNode(), root_2); + + // ANTLRParser.g:725:43: ( ARG_ACTION )? if ( stream_ARG_ACTION.hasNext() ) { - adaptor.addChild(root_1, stream_ARG_ACTION.nextNode()); + adaptor.addChild(root_2, stream_ARG_ACTION.nextNode()); } stream_ARG_ACTION.reset(); + adaptor.addChild(root_1, root_2); + } + adaptor.addChild(root_0, root_1); } @@ -6321,18 +6328,18 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_rangeElement_in_range3781); + pushFollow(FOLLOW_rangeElement_in_range3783); rangeElement154=rangeElement(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) adaptor.addChild(root_0, rangeElement154.getTree()); - RANGE155=(Token)match(input,RANGE,FOLLOW_RANGE_in_range3783); if (state.failed) return retval; + RANGE155=(Token)match(input,RANGE,FOLLOW_RANGE_in_range3785); if (state.failed) return retval; if ( state.backtracking==0 ) { RANGE155_tree = (GrammarAST)adaptor.create(RANGE155); root_0 = (GrammarAST)adaptor.becomeRoot(RANGE155_tree, root_0); } - pushFollow(FOLLOW_rangeElement_in_range3786); + pushFollow(FOLLOW_rangeElement_in_range3788); rangeElement156=rangeElement(); state._fsp--; @@ -6492,7 +6499,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:759:7: TOKEN_REF ( ARG_ACTION )? ( elementOptions )? { - TOKEN_REF158=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal3880); if (state.failed) return retval; + TOKEN_REF158=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal3882); if (state.failed) return retval; if ( state.backtracking==0 ) stream_TOKEN_REF.add(TOKEN_REF158); // ANTLRParser.g:759:17: ( ARG_ACTION )? @@ -6506,7 +6513,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:759:17: ARG_ACTION { - ARG_ACTION159=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal3882); if (state.failed) return retval; + ARG_ACTION159=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal3884); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ARG_ACTION.add(ARG_ACTION159); @@ -6526,7 +6533,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:759:29: elementOptions { - pushFollow(FOLLOW_elementOptions_in_terminal3885); + pushFollow(FOLLOW_elementOptions_in_terminal3887); elementOptions160=elementOptions(); state._fsp--; @@ -6583,7 +6590,7 @@ public class ANTLRParser extends Parser { case 2 : // ANTLRParser.g:760:7: STRING_LITERAL ( elementOptions )? { - STRING_LITERAL161=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal3909); if (state.failed) return retval; + STRING_LITERAL161=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal3911); if (state.failed) return retval; if ( state.backtracking==0 ) stream_STRING_LITERAL.add(STRING_LITERAL161); // ANTLRParser.g:760:22: ( elementOptions )? @@ -6597,7 +6604,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:760:22: elementOptions { - pushFollow(FOLLOW_elementOptions_in_terminal3911); + pushFollow(FOLLOW_elementOptions_in_terminal3913); elementOptions162=elementOptions(); state._fsp--; @@ -6612,7 +6619,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: elementOptions, STRING_LITERAL + // elements: STRING_LITERAL, elementOptions // token labels: // rule labels: retval // token list labels: @@ -6648,7 +6655,7 @@ public class ANTLRParser extends Parser { case 3 : // ANTLRParser.g:766:7: DOT ( elementOptions )? { - DOT163=(Token)match(input,DOT,FOLLOW_DOT_in_terminal3958); if (state.failed) return retval; + DOT163=(Token)match(input,DOT,FOLLOW_DOT_in_terminal3960); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOT.add(DOT163); // ANTLRParser.g:766:11: ( elementOptions )? @@ -6662,7 +6669,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:766:11: elementOptions { - pushFollow(FOLLOW_elementOptions_in_terminal3960); + pushFollow(FOLLOW_elementOptions_in_terminal3962); elementOptions164=elementOptions(); state._fsp--; @@ -6727,7 +6734,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:768:5: ROOT { - ROOT165=(Token)match(input,ROOT,FOLLOW_ROOT_in_terminal3991); if (state.failed) return retval; + ROOT165=(Token)match(input,ROOT,FOLLOW_ROOT_in_terminal3993); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ROOT.add(ROOT165); @@ -6764,7 +6771,7 @@ public class ANTLRParser extends Parser { case 2 : // ANTLRParser.g:769:5: BANG { - BANG166=(Token)match(input,BANG,FOLLOW_BANG_in_terminal4015); if (state.failed) return retval; + BANG166=(Token)match(input,BANG,FOLLOW_BANG_in_terminal4017); if (state.failed) return retval; if ( state.backtracking==0 ) stream_BANG.add(BANG166); @@ -6856,10 +6863,10 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:780:5: ( LT elementOption ( COMMA elementOption )* GT -> ^( ELEMENT_OPTIONS ( elementOption )+ ) ) // ANTLRParser.g:782:7: LT elementOption ( COMMA elementOption )* GT { - LT167=(Token)match(input,LT,FOLLOW_LT_in_elementOptions4079); if (state.failed) return retval; + LT167=(Token)match(input,LT,FOLLOW_LT_in_elementOptions4081); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LT.add(LT167); - pushFollow(FOLLOW_elementOption_in_elementOptions4081); + pushFollow(FOLLOW_elementOption_in_elementOptions4083); elementOption168=elementOption(); state._fsp--; @@ -6880,10 +6887,10 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:782:25: COMMA elementOption { - COMMA169=(Token)match(input,COMMA,FOLLOW_COMMA_in_elementOptions4084); if (state.failed) return retval; + COMMA169=(Token)match(input,COMMA,FOLLOW_COMMA_in_elementOptions4086); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA169); - pushFollow(FOLLOW_elementOption_in_elementOptions4086); + pushFollow(FOLLOW_elementOption_in_elementOptions4088); elementOption170=elementOption(); state._fsp--; @@ -6898,7 +6905,7 @@ public class ANTLRParser extends Parser { } } while (true); - GT171=(Token)match(input,GT,FOLLOW_GT_in_elementOptions4090); if (state.failed) return retval; + GT171=(Token)match(input,GT,FOLLOW_GT_in_elementOptions4092); if (state.failed) return retval; if ( state.backtracking==0 ) stream_GT.add(GT171); @@ -7059,7 +7066,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_qid_in_elementOption4125); + pushFollow(FOLLOW_qid_in_elementOption4127); qid172=qid(); state._fsp--; @@ -7073,13 +7080,13 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_id_in_elementOption4147); + pushFollow(FOLLOW_id_in_elementOption4149); id173=id(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) adaptor.addChild(root_0, id173.getTree()); - ASSIGN174=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_elementOption4149); if (state.failed) return retval; + ASSIGN174=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_elementOption4151); if (state.failed) return retval; if ( state.backtracking==0 ) { ASSIGN174_tree = (GrammarAST)adaptor.create(ASSIGN174); root_0 = (GrammarAST)adaptor.becomeRoot(ASSIGN174_tree, root_0); @@ -7105,7 +7112,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:792:19: qid { - pushFollow(FOLLOW_qid_in_elementOption4153); + pushFollow(FOLLOW_qid_in_elementOption4155); qid175=qid(); state._fsp--; @@ -7117,7 +7124,7 @@ public class ANTLRParser extends Parser { case 2 : // ANTLRParser.g:792:25: STRING_LITERAL { - STRING_LITERAL176=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_elementOption4157); if (state.failed) return retval; + STRING_LITERAL176=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_elementOption4159); if (state.failed) return retval; if ( state.backtracking==0 ) { STRING_LITERAL176_tree = new TerminalAST(STRING_LITERAL176) ; adaptor.addChild(root_0, STRING_LITERAL176_tree); @@ -7198,7 +7205,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:796:4: predicatedRewrite { - pushFollow(FOLLOW_predicatedRewrite_in_rewrite4175); + pushFollow(FOLLOW_predicatedRewrite_in_rewrite4177); predicatedRewrite177=predicatedRewrite(); state._fsp--; @@ -7213,7 +7220,7 @@ public class ANTLRParser extends Parser { } } while (true); - pushFollow(FOLLOW_nakedRewrite_in_rewrite4178); + pushFollow(FOLLOW_nakedRewrite_in_rewrite4180); nakedRewrite178=nakedRewrite(); state._fsp--; @@ -7295,13 +7302,13 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:800:2: ( RARROW SEMPRED rewriteAlt -> {$rewriteAlt.isTemplate}? ^( ST_RESULT[$RARROW] SEMPRED rewriteAlt ) -> ^( RESULT[$RARROW] SEMPRED rewriteAlt ) ) // ANTLRParser.g:800:4: RARROW SEMPRED rewriteAlt { - RARROW179=(Token)match(input,RARROW,FOLLOW_RARROW_in_predicatedRewrite4196); if (state.failed) return retval; + RARROW179=(Token)match(input,RARROW,FOLLOW_RARROW_in_predicatedRewrite4198); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RARROW.add(RARROW179); - SEMPRED180=(Token)match(input,SEMPRED,FOLLOW_SEMPRED_in_predicatedRewrite4198); if (state.failed) return retval; + SEMPRED180=(Token)match(input,SEMPRED,FOLLOW_SEMPRED_in_predicatedRewrite4200); if (state.failed) return retval; if ( state.backtracking==0 ) stream_SEMPRED.add(SEMPRED180); - pushFollow(FOLLOW_rewriteAlt_in_predicatedRewrite4200); + pushFollow(FOLLOW_rewriteAlt_in_predicatedRewrite4202); rewriteAlt181=rewriteAlt(); state._fsp--; @@ -7310,7 +7317,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: SEMPRED, rewriteAlt, SEMPRED, rewriteAlt + // elements: rewriteAlt, rewriteAlt, SEMPRED, SEMPRED // token labels: // rule labels: retval // token list labels: @@ -7397,10 +7404,10 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:806:2: ( RARROW rewriteAlt -> {$rewriteAlt.isTemplate}? ^( ST_RESULT[$RARROW] rewriteAlt ) -> ^( RESULT[$RARROW] rewriteAlt ) ) // ANTLRParser.g:806:4: RARROW rewriteAlt { - RARROW182=(Token)match(input,RARROW,FOLLOW_RARROW_in_nakedRewrite4240); if (state.failed) return retval; + RARROW182=(Token)match(input,RARROW,FOLLOW_RARROW_in_nakedRewrite4242); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RARROW.add(RARROW182); - pushFollow(FOLLOW_rewriteAlt_in_nakedRewrite4242); + pushFollow(FOLLOW_rewriteAlt_in_nakedRewrite4244); rewriteAlt183=rewriteAlt(); state._fsp--; @@ -7502,7 +7509,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_rewriteTemplate_in_rewriteAlt4306); + pushFollow(FOLLOW_rewriteTemplate_in_rewriteAlt4308); rewriteTemplate184=rewriteTemplate(); state._fsp--; @@ -7519,7 +7526,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_rewriteTreeAlt_in_rewriteAlt4345); + pushFollow(FOLLOW_rewriteTreeAlt_in_rewriteAlt4347); rewriteTreeAlt185=rewriteTreeAlt(); state._fsp--; @@ -7533,7 +7540,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - ETC186=(Token)match(input,ETC,FOLLOW_ETC_in_rewriteAlt4360); if (state.failed) return retval; + ETC186=(Token)match(input,ETC,FOLLOW_ETC_in_rewriteAlt4362); if (state.failed) return retval; if ( state.backtracking==0 ) { ETC186_tree = (GrammarAST)adaptor.create(ETC186); adaptor.addChild(root_0, ETC186_tree); @@ -7625,7 +7632,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:829:7: rewriteTreeElement { - pushFollow(FOLLOW_rewriteTreeElement_in_rewriteTreeAlt4391); + pushFollow(FOLLOW_rewriteTreeElement_in_rewriteTreeAlt4393); rewriteTreeElement187=rewriteTreeElement(); state._fsp--; @@ -7742,7 +7749,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTreeElement4415); + pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTreeElement4417); rewriteTreeAtom188=rewriteTreeAtom(); state._fsp--; @@ -7754,13 +7761,13 @@ public class ANTLRParser extends Parser { case 2 : // ANTLRParser.g:834:4: rewriteTreeAtom ebnfSuffix { - pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTreeElement4420); + pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTreeElement4422); rewriteTreeAtom189=rewriteTreeAtom(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_rewriteTreeAtom.add(rewriteTreeAtom189.getTree()); - pushFollow(FOLLOW_ebnfSuffix_in_rewriteTreeElement4422); + pushFollow(FOLLOW_ebnfSuffix_in_rewriteTreeElement4424); ebnfSuffix190=ebnfSuffix(); state._fsp--; @@ -7816,7 +7823,7 @@ public class ANTLRParser extends Parser { case 3 : // ANTLRParser.g:835:6: rewriteTree ( ebnfSuffix -> ^( ebnfSuffix ^( REWRITE_BLOCK ^( ALT rewriteTree ) ) ) | -> rewriteTree ) { - pushFollow(FOLLOW_rewriteTree_in_rewriteTreeElement4447); + pushFollow(FOLLOW_rewriteTree_in_rewriteTreeElement4449); rewriteTree191=rewriteTree(); state._fsp--; @@ -7843,7 +7850,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:836:5: ebnfSuffix { - pushFollow(FOLLOW_ebnfSuffix_in_rewriteTreeElement4453); + pushFollow(FOLLOW_ebnfSuffix_in_rewriteTreeElement4455); ebnfSuffix192=ebnfSuffix(); state._fsp--; @@ -7932,7 +7939,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_rewriteTreeEbnf_in_rewriteTreeElement4492); + pushFollow(FOLLOW_rewriteTreeEbnf_in_rewriteTreeElement4494); rewriteTreeEbnf193=rewriteTreeEbnf(); state._fsp--; @@ -8042,7 +8049,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:844:9: TOKEN_REF ( elementOptions )? ( ARG_ACTION )? { - TOKEN_REF194=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom4508); if (state.failed) return retval; + TOKEN_REF194=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom4510); if (state.failed) return retval; if ( state.backtracking==0 ) stream_TOKEN_REF.add(TOKEN_REF194); // ANTLRParser.g:844:19: ( elementOptions )? @@ -8056,7 +8063,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:844:19: elementOptions { - pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom4510); + pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom4512); elementOptions195=elementOptions(); state._fsp--; @@ -8079,7 +8086,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:844:35: ARG_ACTION { - ARG_ACTION196=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rewriteTreeAtom4513); if (state.failed) return retval; + ARG_ACTION196=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rewriteTreeAtom4515); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ARG_ACTION.add(ARG_ACTION196); @@ -8091,7 +8098,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: elementOptions, ARG_ACTION, TOKEN_REF + // elements: ARG_ACTION, elementOptions, TOKEN_REF // token labels: // rule labels: retval // token list labels: @@ -8135,7 +8142,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - RULE_REF197=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_rewriteTreeAtom4540); if (state.failed) return retval; + RULE_REF197=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_rewriteTreeAtom4542); if (state.failed) return retval; if ( state.backtracking==0 ) { RULE_REF197_tree = (GrammarAST)adaptor.create(RULE_REF197); adaptor.addChild(root_0, RULE_REF197_tree); @@ -8146,7 +8153,7 @@ public class ANTLRParser extends Parser { case 3 : // ANTLRParser.g:846:6: STRING_LITERAL ( elementOptions )? { - STRING_LITERAL198=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_rewriteTreeAtom4547); if (state.failed) return retval; + STRING_LITERAL198=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_rewriteTreeAtom4549); if (state.failed) return retval; if ( state.backtracking==0 ) stream_STRING_LITERAL.add(STRING_LITERAL198); // ANTLRParser.g:846:21: ( elementOptions )? @@ -8160,7 +8167,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:846:21: elementOptions { - pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom4549); + pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom4551); elementOptions199=elementOptions(); state._fsp--; @@ -8175,7 +8182,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: elementOptions, STRING_LITERAL + // elements: STRING_LITERAL, elementOptions // token labels: // rule labels: retval // token list labels: @@ -8211,10 +8218,10 @@ public class ANTLRParser extends Parser { case 4 : // ANTLRParser.g:847:6: DOLLAR id { - DOLLAR200=(Token)match(input,DOLLAR,FOLLOW_DOLLAR_in_rewriteTreeAtom4572); if (state.failed) return retval; + DOLLAR200=(Token)match(input,DOLLAR,FOLLOW_DOLLAR_in_rewriteTreeAtom4574); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOLLAR.add(DOLLAR200); - pushFollow(FOLLOW_id_in_rewriteTreeAtom4574); + pushFollow(FOLLOW_id_in_rewriteTreeAtom4576); id201=id(); state._fsp--; @@ -8248,7 +8255,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - ACTION202=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewriteTreeAtom4585); if (state.failed) return retval; + ACTION202=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewriteTreeAtom4587); if (state.failed) return retval; if ( state.backtracking==0 ) { ACTION202_tree = (GrammarAST)adaptor.create(ACTION202); adaptor.addChild(root_0, ACTION202_tree); @@ -8311,19 +8318,19 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:859:2: (lp= LPAREN rewriteTreeAlt RPAREN ebnfSuffix -> ^( ebnfSuffix ^( REWRITE_BLOCK[$lp] rewriteTreeAlt ) ) ) // ANTLRParser.g:859:4: lp= LPAREN rewriteTreeAlt RPAREN ebnfSuffix { - lp=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteTreeEbnf4608); if (state.failed) return retval; + lp=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteTreeEbnf4610); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(lp); - pushFollow(FOLLOW_rewriteTreeAlt_in_rewriteTreeEbnf4610); + pushFollow(FOLLOW_rewriteTreeAlt_in_rewriteTreeEbnf4612); rewriteTreeAlt203=rewriteTreeAlt(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_rewriteTreeAlt.add(rewriteTreeAlt203.getTree()); - RPAREN204=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteTreeEbnf4612); if (state.failed) return retval; + RPAREN204=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteTreeEbnf4614); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN204); - pushFollow(FOLLOW_ebnfSuffix_in_rewriteTreeEbnf4614); + pushFollow(FOLLOW_ebnfSuffix_in_rewriteTreeEbnf4616); ebnfSuffix205=ebnfSuffix(); state._fsp--; @@ -8332,7 +8339,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: ebnfSuffix, rewriteTreeAlt + // elements: rewriteTreeAlt, ebnfSuffix // token labels: // rule labels: retval // token list labels: @@ -8424,10 +8431,10 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:863:2: ( TREE_BEGIN rewriteTreeAtom ( rewriteTreeElement )* RPAREN -> ^( TREE_BEGIN rewriteTreeAtom ( rewriteTreeElement )* ) ) // ANTLRParser.g:863:4: TREE_BEGIN rewriteTreeAtom ( rewriteTreeElement )* RPAREN { - TREE_BEGIN206=(Token)match(input,TREE_BEGIN,FOLLOW_TREE_BEGIN_in_rewriteTree4638); if (state.failed) return retval; + TREE_BEGIN206=(Token)match(input,TREE_BEGIN,FOLLOW_TREE_BEGIN_in_rewriteTree4640); if (state.failed) return retval; if ( state.backtracking==0 ) stream_TREE_BEGIN.add(TREE_BEGIN206); - pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTree4640); + pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTree4642); rewriteTreeAtom207=rewriteTreeAtom(); state._fsp--; @@ -8448,7 +8455,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:863:31: rewriteTreeElement { - pushFollow(FOLLOW_rewriteTreeElement_in_rewriteTree4642); + pushFollow(FOLLOW_rewriteTreeElement_in_rewriteTree4644); rewriteTreeElement208=rewriteTreeElement(); state._fsp--; @@ -8463,7 +8470,7 @@ public class ANTLRParser extends Parser { } } while (true); - RPAREN209=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteTree4645); if (state.failed) return retval; + RPAREN209=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteTree4647); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN209); @@ -8567,19 +8574,19 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:879:3: TEMPLATE LPAREN rewriteTemplateArgs RPAREN (str= DOUBLE_QUOTE_STRING_LITERAL | str= DOUBLE_ANGLE_STRING_LITERAL ) { - TEMPLATE210=(Token)match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteTemplate4677); if (state.failed) return retval; + TEMPLATE210=(Token)match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteTemplate4679); if (state.failed) return retval; if ( state.backtracking==0 ) stream_TEMPLATE.add(TEMPLATE210); - LPAREN211=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteTemplate4679); if (state.failed) return retval; + LPAREN211=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteTemplate4681); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN211); - pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplate4681); + pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplate4683); rewriteTemplateArgs212=rewriteTemplateArgs(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_rewriteTemplateArgs.add(rewriteTemplateArgs212.getTree()); - RPAREN213=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteTemplate4683); if (state.failed) return retval; + RPAREN213=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteTemplate4685); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN213); // ANTLRParser.g:880:3: (str= DOUBLE_QUOTE_STRING_LITERAL | str= DOUBLE_ANGLE_STRING_LITERAL ) @@ -8603,7 +8610,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:880:5: str= DOUBLE_QUOTE_STRING_LITERAL { - str=(Token)match(input,DOUBLE_QUOTE_STRING_LITERAL,FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewriteTemplate4691); if (state.failed) return retval; + str=(Token)match(input,DOUBLE_QUOTE_STRING_LITERAL,FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewriteTemplate4693); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOUBLE_QUOTE_STRING_LITERAL.add(str); @@ -8612,7 +8619,7 @@ public class ANTLRParser extends Parser { case 2 : // ANTLRParser.g:880:39: str= DOUBLE_ANGLE_STRING_LITERAL { - str=(Token)match(input,DOUBLE_ANGLE_STRING_LITERAL,FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewriteTemplate4697); if (state.failed) return retval; + str=(Token)match(input,DOUBLE_ANGLE_STRING_LITERAL,FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewriteTemplate4699); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOUBLE_ANGLE_STRING_LITERAL.add(str); @@ -8624,7 +8631,7 @@ public class ANTLRParser extends Parser { // AST REWRITE - // elements: str, TEMPLATE, rewriteTemplateArgs + // elements: TEMPLATE, rewriteTemplateArgs, str // token labels: str // rule labels: retval // token list labels: @@ -8664,7 +8671,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_rewriteTemplateRef_in_rewriteTemplate4723); + pushFollow(FOLLOW_rewriteTemplateRef_in_rewriteTemplate4725); rewriteTemplateRef214=rewriteTemplateRef(); state._fsp--; @@ -8678,7 +8685,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_rewriteIndirectTemplateHead_in_rewriteTemplate4732); + pushFollow(FOLLOW_rewriteIndirectTemplateHead_in_rewriteTemplate4734); rewriteIndirectTemplateHead215=rewriteIndirectTemplateHead(); state._fsp--; @@ -8692,7 +8699,7 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - ACTION216=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewriteTemplate4741); if (state.failed) return retval; + ACTION216=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewriteTemplate4743); if (state.failed) return retval; if ( state.backtracking==0 ) { ACTION216_tree = (GrammarAST)adaptor.create(ACTION216); adaptor.addChild(root_0, ACTION216_tree); @@ -8752,22 +8759,22 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:895:2: ( id LPAREN rewriteTemplateArgs RPAREN -> ^( TEMPLATE[$LPAREN,\"TEMPLATE\"] id ( rewriteTemplateArgs )? ) ) // ANTLRParser.g:895:4: id LPAREN rewriteTemplateArgs RPAREN { - pushFollow(FOLLOW_id_in_rewriteTemplateRef4754); + pushFollow(FOLLOW_id_in_rewriteTemplateRef4756); id217=id(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_id.add(id217.getTree()); - LPAREN218=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteTemplateRef4756); if (state.failed) return retval; + LPAREN218=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteTemplateRef4758); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN218); - pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplateRef4758); + pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplateRef4760); rewriteTemplateArgs219=rewriteTemplateArgs(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_rewriteTemplateArgs.add(rewriteTemplateArgs219.getTree()); - RPAREN220=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteTemplateRef4760); if (state.failed) return retval; + RPAREN220=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteTemplateRef4762); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN220); @@ -8861,31 +8868,31 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:901:2: (lp= LPAREN ACTION RPAREN LPAREN rewriteTemplateArgs RPAREN -> ^( TEMPLATE[$lp,\"TEMPLATE\"] ACTION ( rewriteTemplateArgs )? ) ) // ANTLRParser.g:901:4: lp= LPAREN ACTION RPAREN LPAREN rewriteTemplateArgs RPAREN { - lp=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteIndirectTemplateHead4789); if (state.failed) return retval; + lp=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteIndirectTemplateHead4791); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(lp); - ACTION221=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewriteIndirectTemplateHead4791); if (state.failed) return retval; + ACTION221=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewriteIndirectTemplateHead4793); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ACTION.add(ACTION221); - RPAREN222=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteIndirectTemplateHead4793); if (state.failed) return retval; + RPAREN222=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteIndirectTemplateHead4795); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN222); - LPAREN223=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteIndirectTemplateHead4795); if (state.failed) return retval; + LPAREN223=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_rewriteIndirectTemplateHead4797); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN223); - pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteIndirectTemplateHead4797); + pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteIndirectTemplateHead4799); rewriteTemplateArgs224=rewriteTemplateArgs(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_rewriteTemplateArgs.add(rewriteTemplateArgs224.getTree()); - RPAREN225=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteIndirectTemplateHead4799); if (state.failed) return retval; + RPAREN225=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_rewriteIndirectTemplateHead4801); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN225); // AST REWRITE - // elements: ACTION, rewriteTemplateArgs + // elements: rewriteTemplateArgs, ACTION // token labels: // rule labels: retval // token list labels: @@ -8983,7 +8990,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:906:4: rewriteTemplateArg ( COMMA rewriteTemplateArg )* { - pushFollow(FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs4824); + pushFollow(FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs4826); rewriteTemplateArg226=rewriteTemplateArg(); state._fsp--; @@ -9004,10 +9011,10 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:906:24: COMMA rewriteTemplateArg { - COMMA227=(Token)match(input,COMMA,FOLLOW_COMMA_in_rewriteTemplateArgs4827); if (state.failed) return retval; + COMMA227=(Token)match(input,COMMA,FOLLOW_COMMA_in_rewriteTemplateArgs4829); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA227); - pushFollow(FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs4829); + pushFollow(FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs4831); rewriteTemplateArg228=rewriteTemplateArg(); state._fsp--; @@ -9116,16 +9123,16 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:912:2: ( id ASSIGN ACTION -> ^( ARG[$ASSIGN] id ACTION ) ) // ANTLRParser.g:912:6: id ASSIGN ACTION { - pushFollow(FOLLOW_id_in_rewriteTemplateArg4858); + pushFollow(FOLLOW_id_in_rewriteTemplateArg4860); id229=id(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_id.add(id229.getTree()); - ASSIGN230=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_rewriteTemplateArg4860); if (state.failed) return retval; + ASSIGN230=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_rewriteTemplateArg4862); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN230); - ACTION231=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewriteTemplateArg4862); if (state.failed) return retval; + ACTION231=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewriteTemplateArg4864); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ACTION.add(ACTION231); @@ -9235,7 +9242,7 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:920:7: RULE_REF { - RULE_REF232=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_id4891); if (state.failed) return retval; + RULE_REF232=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_id4893); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RULE_REF.add(RULE_REF232); @@ -9264,7 +9271,7 @@ public class ANTLRParser extends Parser { case 2 : // ANTLRParser.g:921:7: TOKEN_REF { - TOKEN_REF233=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_id4904); if (state.failed) return retval; + TOKEN_REF233=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_id4906); if (state.failed) return retval; if ( state.backtracking==0 ) stream_TOKEN_REF.add(TOKEN_REF233); @@ -9293,7 +9300,7 @@ public class ANTLRParser extends Parser { case 3 : // ANTLRParser.g:922:7: TEMPLATE { - TEMPLATE234=(Token)match(input,TEMPLATE,FOLLOW_TEMPLATE_in_id4916); if (state.failed) return retval; + TEMPLATE234=(Token)match(input,TEMPLATE,FOLLOW_TEMPLATE_in_id4918); if (state.failed) return retval; if ( state.backtracking==0 ) stream_TEMPLATE.add(TEMPLATE234); @@ -9367,7 +9374,7 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:925:5: ( id ( DOT id )* -> ID[$qid.start, $text] ) // ANTLRParser.g:925:7: id ( DOT id )* { - pushFollow(FOLLOW_id_in_qid4939); + pushFollow(FOLLOW_id_in_qid4941); id235=id(); state._fsp--; @@ -9388,10 +9395,10 @@ public class ANTLRParser extends Parser { case 1 : // ANTLRParser.g:925:11: DOT id { - DOT236=(Token)match(input,DOT,FOLLOW_DOT_in_qid4942); if (state.failed) return retval; + DOT236=(Token)match(input,DOT,FOLLOW_DOT_in_qid4944); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOT.add(DOT236); - pushFollow(FOLLOW_id_in_qid4944); + pushFollow(FOLLOW_id_in_qid4946); id237=id(); state._fsp--; @@ -9474,13 +9481,13 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_alternative_in_alternativeEntry4960); + pushFollow(FOLLOW_alternative_in_alternativeEntry4962); alternative238=alternative(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) adaptor.addChild(root_0, alternative238.getTree()); - EOF239=(Token)match(input,EOF,FOLLOW_EOF_in_alternativeEntry4962); if (state.failed) return retval; + EOF239=(Token)match(input,EOF,FOLLOW_EOF_in_alternativeEntry4964); if (state.failed) return retval; if ( state.backtracking==0 ) { EOF239_tree = (GrammarAST)adaptor.create(EOF239); adaptor.addChild(root_0, EOF239_tree); @@ -9533,13 +9540,13 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_element_in_elementEntry4971); + pushFollow(FOLLOW_element_in_elementEntry4973); element240=element(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) adaptor.addChild(root_0, element240.getTree()); - EOF241=(Token)match(input,EOF,FOLLOW_EOF_in_elementEntry4973); if (state.failed) return retval; + EOF241=(Token)match(input,EOF,FOLLOW_EOF_in_elementEntry4975); if (state.failed) return retval; if ( state.backtracking==0 ) { EOF241_tree = (GrammarAST)adaptor.create(EOF241); adaptor.addChild(root_0, EOF241_tree); @@ -9592,13 +9599,13 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_rule_in_ruleEntry4981); + pushFollow(FOLLOW_rule_in_ruleEntry4983); rule242=rule(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) adaptor.addChild(root_0, rule242.getTree()); - EOF243=(Token)match(input,EOF,FOLLOW_EOF_in_ruleEntry4983); if (state.failed) return retval; + EOF243=(Token)match(input,EOF,FOLLOW_EOF_in_ruleEntry4985); if (state.failed) return retval; if ( state.backtracking==0 ) { EOF243_tree = (GrammarAST)adaptor.create(EOF243); adaptor.addChild(root_0, EOF243_tree); @@ -9651,13 +9658,13 @@ public class ANTLRParser extends Parser { { root_0 = (GrammarAST)adaptor.nil(); - pushFollow(FOLLOW_block_in_blockEntry4991); + pushFollow(FOLLOW_block_in_blockEntry4993); block244=block(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) adaptor.addChild(root_0, block244.getTree()); - EOF245=(Token)match(input,EOF,FOLLOW_EOF_in_blockEntry4993); if (state.failed) return retval; + EOF245=(Token)match(input,EOF,FOLLOW_EOF_in_blockEntry4995); if (state.failed) return retval; if ( state.backtracking==0 ) { EOF245_tree = (GrammarAST)adaptor.create(EOF245); adaptor.addChild(root_0, EOF245_tree); @@ -9690,7 +9697,7 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:815:7: ( rewriteTemplate ) // ANTLRParser.g:815:7: rewriteTemplate { - pushFollow(FOLLOW_rewriteTemplate_in_synpred1_ANTLRParser4306); + pushFollow(FOLLOW_rewriteTemplate_in_synpred1_ANTLRParser4308); rewriteTemplate(); state._fsp--; @@ -9705,7 +9712,7 @@ public class ANTLRParser extends Parser { // ANTLRParser.g:821:7: ( rewriteTreeAlt ) // ANTLRParser.g:821:7: rewriteTreeAlt { - pushFollow(FOLLOW_rewriteTreeAlt_in_synpred2_ANTLRParser4345); + pushFollow(FOLLOW_rewriteTreeAlt_in_synpred2_ANTLRParser4347); rewriteTreeAlt(); state._fsp--; @@ -10540,103 +10547,103 @@ public class ANTLRParser extends Parser { public static final BitSet FOLLOW_ARG_ACTION_in_ruleref3704 = new BitSet(new long[]{0x0010800000000002L}); public static final BitSet FOLLOW_ROOT_in_ruleref3714 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_BANG_in_ruleref3718 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rangeElement_in_range3781 = new BitSet(new long[]{0x0080000000000000L}); - public static final BitSet FOLLOW_RANGE_in_range3783 = new BitSet(new long[]{0xC000000000000000L,0x0000000000000008L}); - public static final BitSet FOLLOW_rangeElement_in_range3786 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rangeElement_in_range3783 = new BitSet(new long[]{0x0080000000000000L}); + public static final BitSet FOLLOW_RANGE_in_range3785 = new BitSet(new long[]{0xC000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_rangeElement_in_range3788 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_set_in_rangeElement0 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal3880 = new BitSet(new long[]{0x0010880000004002L}); - public static final BitSet FOLLOW_ARG_ACTION_in_terminal3882 = new BitSet(new long[]{0x0010880000000002L}); - public static final BitSet FOLLOW_elementOptions_in_terminal3885 = new BitSet(new long[]{0x0010800000000002L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_terminal3909 = new BitSet(new long[]{0x0010880000000002L}); - public static final BitSet FOLLOW_elementOptions_in_terminal3911 = new BitSet(new long[]{0x0010800000000002L}); - public static final BitSet FOLLOW_DOT_in_terminal3958 = new BitSet(new long[]{0x0010880000000002L}); - public static final BitSet FOLLOW_elementOptions_in_terminal3960 = new BitSet(new long[]{0x0010800000000002L}); - public static final BitSet FOLLOW_ROOT_in_terminal3991 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BANG_in_terminal4015 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LT_in_elementOptions4079 = new BitSet(new long[]{0xC000000800000000L}); - public static final BitSet FOLLOW_elementOption_in_elementOptions4081 = new BitSet(new long[]{0x0000104000000000L}); - public static final BitSet FOLLOW_COMMA_in_elementOptions4084 = new BitSet(new long[]{0xC000000800000000L}); - public static final BitSet FOLLOW_elementOption_in_elementOptions4086 = new BitSet(new long[]{0x0000104000000000L}); - public static final BitSet FOLLOW_GT_in_elementOptions4090 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_qid_in_elementOption4125 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_id_in_elementOption4147 = new BitSet(new long[]{0x0000200000000000L}); - public static final BitSet FOLLOW_ASSIGN_in_elementOption4149 = new BitSet(new long[]{0xC000000800000000L,0x0000000000000008L}); - public static final BitSet FOLLOW_qid_in_elementOption4153 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_elementOption4157 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_predicatedRewrite_in_rewrite4175 = new BitSet(new long[]{0x0200000000000000L}); - public static final BitSet FOLLOW_nakedRewrite_in_rewrite4178 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_RARROW_in_predicatedRewrite4196 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_SEMPRED_in_predicatedRewrite4198 = new BitSet(new long[]{0xC520010800010000L,0x0000000000000008L}); - public static final BitSet FOLLOW_rewriteAlt_in_predicatedRewrite4200 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_RARROW_in_nakedRewrite4240 = new BitSet(new long[]{0xC520010800010000L,0x0000000000000008L}); - public static final BitSet FOLLOW_rewriteAlt_in_nakedRewrite4242 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTemplate_in_rewriteAlt4306 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTreeAlt_in_rewriteAlt4345 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ETC_in_rewriteAlt4360 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTreeElement_in_rewriteTreeAlt4391 = new BitSet(new long[]{0xC420010000010002L,0x0000000000000008L}); - public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTreeElement4415 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTreeElement4420 = new BitSet(new long[]{0x0003400000000000L}); - public static final BitSet FOLLOW_ebnfSuffix_in_rewriteTreeElement4422 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTree_in_rewriteTreeElement4447 = new BitSet(new long[]{0x0003400000000002L}); - public static final BitSet FOLLOW_ebnfSuffix_in_rewriteTreeElement4453 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTreeEbnf_in_rewriteTreeElement4492 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom4508 = new BitSet(new long[]{0x0000080000004002L}); - public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom4510 = new BitSet(new long[]{0x0000000000004002L}); - public static final BitSet FOLLOW_ARG_ACTION_in_rewriteTreeAtom4513 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_RULE_REF_in_rewriteTreeAtom4540 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_rewriteTreeAtom4547 = new BitSet(new long[]{0x0000080000000002L}); - public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom4549 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOLLAR_in_rewriteTreeAtom4572 = new BitSet(new long[]{0xC000000800000000L}); - public static final BitSet FOLLOW_id_in_rewriteTreeAtom4574 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ACTION_in_rewriteTreeAtom4585 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_rewriteTreeEbnf4608 = new BitSet(new long[]{0xC420010000010000L,0x0000000000000008L}); - public static final BitSet FOLLOW_rewriteTreeAlt_in_rewriteTreeEbnf4610 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_RPAREN_in_rewriteTreeEbnf4612 = new BitSet(new long[]{0x0003400000000000L}); - public static final BitSet FOLLOW_ebnfSuffix_in_rewriteTreeEbnf4614 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TREE_BEGIN_in_rewriteTree4638 = new BitSet(new long[]{0xC020000000010000L,0x0000000000000008L}); - public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTree4640 = new BitSet(new long[]{0xC420030000010000L,0x0000000000000008L}); - public static final BitSet FOLLOW_rewriteTreeElement_in_rewriteTree4642 = new BitSet(new long[]{0xC420030000010000L,0x0000000000000008L}); - public static final BitSet FOLLOW_RPAREN_in_rewriteTree4645 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TEMPLATE_in_rewriteTemplate4677 = new BitSet(new long[]{0x0000010000000000L}); - public static final BitSet FOLLOW_LPAREN_in_rewriteTemplate4679 = new BitSet(new long[]{0xC000020800000000L}); - public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplate4681 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_RPAREN_in_rewriteTemplate4683 = new BitSet(new long[]{0x0000000000000C00L}); - public static final BitSet FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewriteTemplate4691 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewriteTemplate4697 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTemplateRef_in_rewriteTemplate4723 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteIndirectTemplateHead_in_rewriteTemplate4732 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ACTION_in_rewriteTemplate4741 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_id_in_rewriteTemplateRef4754 = new BitSet(new long[]{0x0000010000000000L}); - public static final BitSet FOLLOW_LPAREN_in_rewriteTemplateRef4756 = new BitSet(new long[]{0xC000020800000000L}); - public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplateRef4758 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_RPAREN_in_rewriteTemplateRef4760 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_rewriteIndirectTemplateHead4789 = new BitSet(new long[]{0x0000000000010000L}); - public static final BitSet FOLLOW_ACTION_in_rewriteIndirectTemplateHead4791 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_RPAREN_in_rewriteIndirectTemplateHead4793 = new BitSet(new long[]{0x0000010000000000L}); - public static final BitSet FOLLOW_LPAREN_in_rewriteIndirectTemplateHead4795 = new BitSet(new long[]{0xC000020800000000L}); - public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteIndirectTemplateHead4797 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_RPAREN_in_rewriteIndirectTemplateHead4799 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs4824 = new BitSet(new long[]{0x0000004000000002L}); - public static final BitSet FOLLOW_COMMA_in_rewriteTemplateArgs4827 = new BitSet(new long[]{0xC000000800000000L}); - public static final BitSet FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs4829 = new BitSet(new long[]{0x0000004000000002L}); - public static final BitSet FOLLOW_id_in_rewriteTemplateArg4858 = new BitSet(new long[]{0x0000200000000000L}); - public static final BitSet FOLLOW_ASSIGN_in_rewriteTemplateArg4860 = new BitSet(new long[]{0x0000000000010000L}); - public static final BitSet FOLLOW_ACTION_in_rewriteTemplateArg4862 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_RULE_REF_in_id4891 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TOKEN_REF_in_id4904 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TEMPLATE_in_id4916 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_id_in_qid4939 = new BitSet(new long[]{0x0040000000000002L}); - public static final BitSet FOLLOW_DOT_in_qid4942 = new BitSet(new long[]{0xC000000800000000L}); - public static final BitSet FOLLOW_id_in_qid4944 = new BitSet(new long[]{0x0040000000000002L}); - public static final BitSet FOLLOW_alternative_in_alternativeEntry4960 = new BitSet(new long[]{0x0000000000000000L}); - public static final BitSet FOLLOW_EOF_in_alternativeEntry4962 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_element_in_elementEntry4971 = new BitSet(new long[]{0x0000000000000000L}); - public static final BitSet FOLLOW_EOF_in_elementEntry4973 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rule_in_ruleEntry4981 = new BitSet(new long[]{0x0000000000000000L}); - public static final BitSet FOLLOW_EOF_in_ruleEntry4983 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_block_in_blockEntry4991 = new BitSet(new long[]{0x0000000000000000L}); - public static final BitSet FOLLOW_EOF_in_blockEntry4993 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTemplate_in_synpred1_ANTLRParser4306 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTreeAlt_in_synpred2_ANTLRParser4345 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal3882 = new BitSet(new long[]{0x0010880000004002L}); + public static final BitSet FOLLOW_ARG_ACTION_in_terminal3884 = new BitSet(new long[]{0x0010880000000002L}); + public static final BitSet FOLLOW_elementOptions_in_terminal3887 = new BitSet(new long[]{0x0010800000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_terminal3911 = new BitSet(new long[]{0x0010880000000002L}); + public static final BitSet FOLLOW_elementOptions_in_terminal3913 = new BitSet(new long[]{0x0010800000000002L}); + public static final BitSet FOLLOW_DOT_in_terminal3960 = new BitSet(new long[]{0x0010880000000002L}); + public static final BitSet FOLLOW_elementOptions_in_terminal3962 = new BitSet(new long[]{0x0010800000000002L}); + public static final BitSet FOLLOW_ROOT_in_terminal3993 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BANG_in_terminal4017 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LT_in_elementOptions4081 = new BitSet(new long[]{0xC000000800000000L}); + public static final BitSet FOLLOW_elementOption_in_elementOptions4083 = new BitSet(new long[]{0x0000104000000000L}); + public static final BitSet FOLLOW_COMMA_in_elementOptions4086 = new BitSet(new long[]{0xC000000800000000L}); + public static final BitSet FOLLOW_elementOption_in_elementOptions4088 = new BitSet(new long[]{0x0000104000000000L}); + public static final BitSet FOLLOW_GT_in_elementOptions4092 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_qid_in_elementOption4127 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_elementOption4149 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ASSIGN_in_elementOption4151 = new BitSet(new long[]{0xC000000800000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_qid_in_elementOption4155 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_elementOption4159 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_predicatedRewrite_in_rewrite4177 = new BitSet(new long[]{0x0200000000000000L}); + public static final BitSet FOLLOW_nakedRewrite_in_rewrite4180 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RARROW_in_predicatedRewrite4198 = new BitSet(new long[]{0x0000000000000010L}); + public static final BitSet FOLLOW_SEMPRED_in_predicatedRewrite4200 = new BitSet(new long[]{0xC520010800010000L,0x0000000000000008L}); + public static final BitSet FOLLOW_rewriteAlt_in_predicatedRewrite4202 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RARROW_in_nakedRewrite4242 = new BitSet(new long[]{0xC520010800010000L,0x0000000000000008L}); + public static final BitSet FOLLOW_rewriteAlt_in_nakedRewrite4244 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTemplate_in_rewriteAlt4308 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTreeAlt_in_rewriteAlt4347 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ETC_in_rewriteAlt4362 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTreeElement_in_rewriteTreeAlt4393 = new BitSet(new long[]{0xC420010000010002L,0x0000000000000008L}); + public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTreeElement4417 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTreeElement4422 = new BitSet(new long[]{0x0003400000000000L}); + public static final BitSet FOLLOW_ebnfSuffix_in_rewriteTreeElement4424 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTree_in_rewriteTreeElement4449 = new BitSet(new long[]{0x0003400000000002L}); + public static final BitSet FOLLOW_ebnfSuffix_in_rewriteTreeElement4455 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTreeEbnf_in_rewriteTreeElement4494 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom4510 = new BitSet(new long[]{0x0000080000004002L}); + public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom4512 = new BitSet(new long[]{0x0000000000004002L}); + public static final BitSet FOLLOW_ARG_ACTION_in_rewriteTreeAtom4515 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_REF_in_rewriteTreeAtom4542 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_rewriteTreeAtom4549 = new BitSet(new long[]{0x0000080000000002L}); + public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom4551 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOLLAR_in_rewriteTreeAtom4574 = new BitSet(new long[]{0xC000000800000000L}); + public static final BitSet FOLLOW_id_in_rewriteTreeAtom4576 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACTION_in_rewriteTreeAtom4587 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_rewriteTreeEbnf4610 = new BitSet(new long[]{0xC420010000010000L,0x0000000000000008L}); + public static final BitSet FOLLOW_rewriteTreeAlt_in_rewriteTreeEbnf4612 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_RPAREN_in_rewriteTreeEbnf4614 = new BitSet(new long[]{0x0003400000000000L}); + public static final BitSet FOLLOW_ebnfSuffix_in_rewriteTreeEbnf4616 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TREE_BEGIN_in_rewriteTree4640 = new BitSet(new long[]{0xC020000000010000L,0x0000000000000008L}); + public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTree4642 = new BitSet(new long[]{0xC420030000010000L,0x0000000000000008L}); + public static final BitSet FOLLOW_rewriteTreeElement_in_rewriteTree4644 = new BitSet(new long[]{0xC420030000010000L,0x0000000000000008L}); + public static final BitSet FOLLOW_RPAREN_in_rewriteTree4647 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TEMPLATE_in_rewriteTemplate4679 = new BitSet(new long[]{0x0000010000000000L}); + public static final BitSet FOLLOW_LPAREN_in_rewriteTemplate4681 = new BitSet(new long[]{0xC000020800000000L}); + public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplate4683 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_RPAREN_in_rewriteTemplate4685 = new BitSet(new long[]{0x0000000000000C00L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewriteTemplate4693 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewriteTemplate4699 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTemplateRef_in_rewriteTemplate4725 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteIndirectTemplateHead_in_rewriteTemplate4734 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACTION_in_rewriteTemplate4743 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_rewriteTemplateRef4756 = new BitSet(new long[]{0x0000010000000000L}); + public static final BitSet FOLLOW_LPAREN_in_rewriteTemplateRef4758 = new BitSet(new long[]{0xC000020800000000L}); + public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplateRef4760 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_RPAREN_in_rewriteTemplateRef4762 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_rewriteIndirectTemplateHead4791 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_ACTION_in_rewriteIndirectTemplateHead4793 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_RPAREN_in_rewriteIndirectTemplateHead4795 = new BitSet(new long[]{0x0000010000000000L}); + public static final BitSet FOLLOW_LPAREN_in_rewriteIndirectTemplateHead4797 = new BitSet(new long[]{0xC000020800000000L}); + public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteIndirectTemplateHead4799 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_RPAREN_in_rewriteIndirectTemplateHead4801 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs4826 = new BitSet(new long[]{0x0000004000000002L}); + public static final BitSet FOLLOW_COMMA_in_rewriteTemplateArgs4829 = new BitSet(new long[]{0xC000000800000000L}); + public static final BitSet FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs4831 = new BitSet(new long[]{0x0000004000000002L}); + public static final BitSet FOLLOW_id_in_rewriteTemplateArg4860 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ASSIGN_in_rewriteTemplateArg4862 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_ACTION_in_rewriteTemplateArg4864 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_REF_in_id4893 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_id4906 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TEMPLATE_in_id4918 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_qid4941 = new BitSet(new long[]{0x0040000000000002L}); + public static final BitSet FOLLOW_DOT_in_qid4944 = new BitSet(new long[]{0xC000000800000000L}); + public static final BitSet FOLLOW_id_in_qid4946 = new BitSet(new long[]{0x0040000000000002L}); + public static final BitSet FOLLOW_alternative_in_alternativeEntry4962 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_EOF_in_alternativeEntry4964 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_element_in_elementEntry4973 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_EOF_in_elementEntry4975 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rule_in_ruleEntry4983 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_EOF_in_ruleEntry4985 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_block_in_blockEntry4993 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_EOF_in_blockEntry4995 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTemplate_in_synpred1_ANTLRParser4308 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTreeAlt_in_synpred2_ANTLRParser4347 = new BitSet(new long[]{0x0000000000000002L}); } \ No newline at end of file diff --git a/tool/src/org/antlr/v4/parse/ASTVerifier.g b/tool/src/org/antlr/v4/parse/ASTVerifier.g index 4e359fa51..3d04ab8ac 100644 --- a/tool/src/org/antlr/v4/parse/ASTVerifier.g +++ b/tool/src/org/antlr/v4/parse/ASTVerifier.g @@ -302,8 +302,8 @@ block ; ruleref - : ^(ROOT RULE_REF ARG_ACTION?) - | ^(BANG RULE_REF ARG_ACTION?) + : ^(ROOT ^(RULE_REF ARG_ACTION?)) + | ^(BANG ^(RULE_REF ARG_ACTION?)) | ^(RULE_REF ARG_ACTION?) ; diff --git a/tool/src/org/antlr/v4/parse/ASTVerifier.java b/tool/src/org/antlr/v4/parse/ASTVerifier.java index 6c939a8e5..b2646237d 100644 --- a/tool/src/org/antlr/v4/parse/ASTVerifier.java +++ b/tool/src/org/antlr/v4/parse/ASTVerifier.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 ASTVerifier.g 2010-02-06 14:39:35 +// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 ASTVerifier.g 2010-02-06 15:46:39 /* [The "BSD license"] @@ -2671,10 +2671,10 @@ public class ASTVerifier extends TreeParser { // $ANTLR start "ruleref" - // ASTVerifier.g:304:1: ruleref : ( ^( ROOT RULE_REF ( ARG_ACTION )? ) | ^( BANG RULE_REF ( ARG_ACTION )? ) | ^( RULE_REF ( ARG_ACTION )? ) ); + // ASTVerifier.g:304:1: ruleref : ( ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) | ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) | ^( RULE_REF ( ARG_ACTION )? ) ); public final void ruleref() throws RecognitionException { try { - // ASTVerifier.g:305:5: ( ^( ROOT RULE_REF ( ARG_ACTION )? ) | ^( BANG RULE_REF ( ARG_ACTION )? ) | ^( RULE_REF ( ARG_ACTION )? ) ) + // ASTVerifier.g:305:5: ( ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) | ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) | ^( RULE_REF ( ARG_ACTION )? ) ) int alt41=3; switch ( input.LA(1) ) { case ROOT: @@ -2701,60 +2701,72 @@ public class ASTVerifier extends TreeParser { switch (alt41) { case 1 : - // ASTVerifier.g:305:7: ^( ROOT RULE_REF ( ARG_ACTION )? ) + // ASTVerifier.g:305:7: ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) { match(input,ROOT,FOLLOW_ROOT_in_ruleref1201); match(input, Token.DOWN, null); - match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref1203); - // ASTVerifier.g:305:23: ( ARG_ACTION )? - int alt38=2; - int LA38_0 = input.LA(1); + match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref1204); - if ( (LA38_0==ARG_ACTION) ) { - alt38=1; + if ( input.LA(1)==Token.DOWN ) { + match(input, Token.DOWN, null); + // ASTVerifier.g:305:25: ( ARG_ACTION )? + int alt38=2; + int LA38_0 = input.LA(1); + + if ( (LA38_0==ARG_ACTION) ) { + alt38=1; + } + switch (alt38) { + case 1 : + // ASTVerifier.g:305:25: ARG_ACTION + { + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref1206); + + } + break; + + } + + + match(input, Token.UP, null); } - switch (alt38) { - case 1 : - // ASTVerifier.g:305:23: ARG_ACTION - { - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref1205); - - } - break; - - } - match(input, Token.UP, null); } break; case 2 : - // ASTVerifier.g:306:7: ^( BANG RULE_REF ( ARG_ACTION )? ) + // ASTVerifier.g:306:7: ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) { - match(input,BANG,FOLLOW_BANG_in_ruleref1216); + match(input,BANG,FOLLOW_BANG_in_ruleref1218); match(input, Token.DOWN, null); - match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref1218); - // ASTVerifier.g:306:23: ( ARG_ACTION )? - int alt39=2; - int LA39_0 = input.LA(1); + match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref1221); - if ( (LA39_0==ARG_ACTION) ) { - alt39=1; + if ( input.LA(1)==Token.DOWN ) { + match(input, Token.DOWN, null); + // ASTVerifier.g:306:25: ( ARG_ACTION )? + int alt39=2; + int LA39_0 = input.LA(1); + + if ( (LA39_0==ARG_ACTION) ) { + alt39=1; + } + switch (alt39) { + case 1 : + // ASTVerifier.g:306:25: ARG_ACTION + { + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref1223); + + } + break; + + } + + + match(input, Token.UP, null); } - switch (alt39) { - case 1 : - // ASTVerifier.g:306:23: ARG_ACTION - { - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref1220); - - } - break; - - } - match(input, Token.UP, null); @@ -2763,7 +2775,7 @@ public class ASTVerifier extends TreeParser { case 3 : // ASTVerifier.g:307:7: ^( RULE_REF ( ARG_ACTION )? ) { - match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref1231); + match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref1235); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); @@ -2778,7 +2790,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:307:18: ARG_ACTION { - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref1233); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref1237); } break; @@ -2812,15 +2824,15 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:311:5: ( ^( RANGE rangeElement rangeElement ) ) // ASTVerifier.g:311:7: ^( RANGE rangeElement rangeElement ) { - match(input,RANGE,FOLLOW_RANGE_in_range1253); + match(input,RANGE,FOLLOW_RANGE_in_range1257); match(input, Token.DOWN, null); - pushFollow(FOLLOW_rangeElement_in_range1255); + pushFollow(FOLLOW_rangeElement_in_range1259); rangeElement(); state._fsp--; - pushFollow(FOLLOW_rangeElement_in_range1257); + pushFollow(FOLLOW_rangeElement_in_range1261); rangeElement(); state._fsp--; @@ -2884,10 +2896,10 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:321:8: ^( STRING_LITERAL elementOptions ) { - match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal1310); + match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal1314); match(input, Token.DOWN, null); - pushFollow(FOLLOW_elementOptions_in_terminal1312); + pushFollow(FOLLOW_elementOptions_in_terminal1316); elementOptions(); state._fsp--; @@ -2900,18 +2912,18 @@ public class ASTVerifier extends TreeParser { case 2 : // ASTVerifier.g:322:7: STRING_LITERAL { - match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal1321); + match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal1325); } break; case 3 : // ASTVerifier.g:323:7: ^( TOKEN_REF ARG_ACTION elementOptions ) { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal1330); + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal1334); match(input, Token.DOWN, null); - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal1332); - pushFollow(FOLLOW_elementOptions_in_terminal1334); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal1336); + pushFollow(FOLLOW_elementOptions_in_terminal1338); elementOptions(); state._fsp--; @@ -2924,10 +2936,10 @@ public class ASTVerifier extends TreeParser { case 4 : // ASTVerifier.g:324:7: ^( TOKEN_REF ARG_ACTION ) { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal1344); + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal1348); match(input, Token.DOWN, null); - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal1346); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal1350); match(input, Token.UP, null); @@ -2936,10 +2948,10 @@ public class ASTVerifier extends TreeParser { case 5 : // ASTVerifier.g:325:7: ^( TOKEN_REF elementOptions ) { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal1356); + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal1360); match(input, Token.DOWN, null); - pushFollow(FOLLOW_elementOptions_in_terminal1358); + pushFollow(FOLLOW_elementOptions_in_terminal1362); elementOptions(); state._fsp--; @@ -2952,17 +2964,17 @@ public class ASTVerifier extends TreeParser { case 6 : // ASTVerifier.g:326:7: TOKEN_REF { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal1367); + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal1371); } break; case 7 : // ASTVerifier.g:327:7: ^( WILDCARD elementOptions ) { - match(input,WILDCARD,FOLLOW_WILDCARD_in_terminal1376); + match(input,WILDCARD,FOLLOW_WILDCARD_in_terminal1380); match(input, Token.DOWN, null); - pushFollow(FOLLOW_elementOptions_in_terminal1378); + pushFollow(FOLLOW_elementOptions_in_terminal1382); elementOptions(); state._fsp--; @@ -2975,17 +2987,17 @@ public class ASTVerifier extends TreeParser { case 8 : // ASTVerifier.g:328:7: WILDCARD { - match(input,WILDCARD,FOLLOW_WILDCARD_in_terminal1387); + match(input,WILDCARD,FOLLOW_WILDCARD_in_terminal1391); } break; case 9 : // ASTVerifier.g:329:7: ^( ROOT terminal ) { - match(input,ROOT,FOLLOW_ROOT_in_terminal1396); + match(input,ROOT,FOLLOW_ROOT_in_terminal1400); match(input, Token.DOWN, null); - pushFollow(FOLLOW_terminal_in_terminal1398); + pushFollow(FOLLOW_terminal_in_terminal1402); terminal(); state._fsp--; @@ -2998,10 +3010,10 @@ public class ASTVerifier extends TreeParser { case 10 : // ASTVerifier.g:330:7: ^( BANG terminal ) { - match(input,BANG,FOLLOW_BANG_in_terminal1408); + match(input,BANG,FOLLOW_BANG_in_terminal1412); match(input, Token.DOWN, null); - pushFollow(FOLLOW_terminal_in_terminal1410); + pushFollow(FOLLOW_terminal_in_terminal1414); terminal(); state._fsp--; @@ -3032,7 +3044,7 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:334:5: ( ^( ELEMENT_OPTIONS ( elementOption )+ ) ) // ASTVerifier.g:334:7: ^( ELEMENT_OPTIONS ( elementOption )+ ) { - match(input,ELEMENT_OPTIONS,FOLLOW_ELEMENT_OPTIONS_in_elementOptions1429); + match(input,ELEMENT_OPTIONS,FOLLOW_ELEMENT_OPTIONS_in_elementOptions1433); match(input, Token.DOWN, null); // ASTVerifier.g:334:25: ( elementOption )+ @@ -3051,7 +3063,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:334:25: elementOption { - pushFollow(FOLLOW_elementOption_in_elementOptions1431); + pushFollow(FOLLOW_elementOption_in_elementOptions1435); elementOption(); state._fsp--; @@ -3143,18 +3155,18 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:338:7: ID { - match(input,ID,FOLLOW_ID_in_elementOption1450); + match(input,ID,FOLLOW_ID_in_elementOption1454); } break; case 2 : // ASTVerifier.g:339:9: ^( ASSIGN ID ID ) { - match(input,ASSIGN,FOLLOW_ASSIGN_in_elementOption1461); + match(input,ASSIGN,FOLLOW_ASSIGN_in_elementOption1465); match(input, Token.DOWN, null); - match(input,ID,FOLLOW_ID_in_elementOption1463); - match(input,ID,FOLLOW_ID_in_elementOption1465); + match(input,ID,FOLLOW_ID_in_elementOption1467); + match(input,ID,FOLLOW_ID_in_elementOption1469); match(input, Token.UP, null); @@ -3163,11 +3175,11 @@ public class ASTVerifier extends TreeParser { case 3 : // ASTVerifier.g:340:9: ^( ASSIGN ID STRING_LITERAL ) { - match(input,ASSIGN,FOLLOW_ASSIGN_in_elementOption1477); + match(input,ASSIGN,FOLLOW_ASSIGN_in_elementOption1481); match(input, Token.DOWN, null); - match(input,ID,FOLLOW_ID_in_elementOption1479); - match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_elementOption1481); + match(input,ID,FOLLOW_ID_in_elementOption1483); + match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_elementOption1485); match(input, Token.UP, null); @@ -3236,7 +3248,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:344:4: predicatedRewrite { - pushFollow(FOLLOW_predicatedRewrite_in_rewrite1496); + pushFollow(FOLLOW_predicatedRewrite_in_rewrite1500); predicatedRewrite(); state._fsp--; @@ -3250,7 +3262,7 @@ public class ASTVerifier extends TreeParser { } } while (true); - pushFollow(FOLLOW_nakedRewrite_in_rewrite1499); + pushFollow(FOLLOW_nakedRewrite_in_rewrite1503); nakedRewrite(); state._fsp--; @@ -3294,11 +3306,11 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:348:4: ^( ST_RESULT SEMPRED rewriteAlt ) { - match(input,ST_RESULT,FOLLOW_ST_RESULT_in_predicatedRewrite1511); + match(input,ST_RESULT,FOLLOW_ST_RESULT_in_predicatedRewrite1515); match(input, Token.DOWN, null); - match(input,SEMPRED,FOLLOW_SEMPRED_in_predicatedRewrite1513); - pushFollow(FOLLOW_rewriteAlt_in_predicatedRewrite1515); + match(input,SEMPRED,FOLLOW_SEMPRED_in_predicatedRewrite1517); + pushFollow(FOLLOW_rewriteAlt_in_predicatedRewrite1519); rewriteAlt(); state._fsp--; @@ -3311,11 +3323,11 @@ public class ASTVerifier extends TreeParser { case 2 : // ASTVerifier.g:349:4: ^( RESULT SEMPRED rewriteAlt ) { - match(input,RESULT,FOLLOW_RESULT_in_predicatedRewrite1522); + match(input,RESULT,FOLLOW_RESULT_in_predicatedRewrite1526); match(input, Token.DOWN, null); - match(input,SEMPRED,FOLLOW_SEMPRED_in_predicatedRewrite1524); - pushFollow(FOLLOW_rewriteAlt_in_predicatedRewrite1526); + match(input,SEMPRED,FOLLOW_SEMPRED_in_predicatedRewrite1528); + pushFollow(FOLLOW_rewriteAlt_in_predicatedRewrite1530); rewriteAlt(); state._fsp--; @@ -3363,10 +3375,10 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:353:4: ^( ST_RESULT rewriteAlt ) { - match(input,ST_RESULT,FOLLOW_ST_RESULT_in_nakedRewrite1540); + match(input,ST_RESULT,FOLLOW_ST_RESULT_in_nakedRewrite1544); match(input, Token.DOWN, null); - pushFollow(FOLLOW_rewriteAlt_in_nakedRewrite1542); + pushFollow(FOLLOW_rewriteAlt_in_nakedRewrite1546); rewriteAlt(); state._fsp--; @@ -3379,10 +3391,10 @@ public class ASTVerifier extends TreeParser { case 2 : // ASTVerifier.g:354:4: ^( RESULT rewriteAlt ) { - match(input,RESULT,FOLLOW_RESULT_in_nakedRewrite1549); + match(input,RESULT,FOLLOW_RESULT_in_nakedRewrite1553); match(input, Token.DOWN, null); - pushFollow(FOLLOW_rewriteAlt_in_nakedRewrite1551); + pushFollow(FOLLOW_rewriteAlt_in_nakedRewrite1555); rewriteAlt(); state._fsp--; @@ -3445,7 +3457,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:358:7: rewriteTemplate { - pushFollow(FOLLOW_rewriteTemplate_in_rewriteAlt1567); + pushFollow(FOLLOW_rewriteTemplate_in_rewriteAlt1571); rewriteTemplate(); state._fsp--; @@ -3456,7 +3468,7 @@ public class ASTVerifier extends TreeParser { case 2 : // ASTVerifier.g:359:7: rewriteTreeAlt { - pushFollow(FOLLOW_rewriteTreeAlt_in_rewriteAlt1575); + pushFollow(FOLLOW_rewriteTreeAlt_in_rewriteAlt1579); rewriteTreeAlt(); state._fsp--; @@ -3467,14 +3479,14 @@ public class ASTVerifier extends TreeParser { case 3 : // ASTVerifier.g:360:7: ETC { - match(input,ETC,FOLLOW_ETC_in_rewriteAlt1583); + match(input,ETC,FOLLOW_ETC_in_rewriteAlt1587); } break; case 4 : // ASTVerifier.g:361:7: EPSILON { - match(input,EPSILON,FOLLOW_EPSILON_in_rewriteAlt1591); + match(input,EPSILON,FOLLOW_EPSILON_in_rewriteAlt1595); } break; @@ -3499,7 +3511,7 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:365:5: ( ^( ALT ( rewriteTreeElement )+ ) ) // ASTVerifier.g:365:7: ^( ALT ( rewriteTreeElement )+ ) { - match(input,ALT,FOLLOW_ALT_in_rewriteTreeAlt1610); + match(input,ALT,FOLLOW_ALT_in_rewriteTreeAlt1614); match(input, Token.DOWN, null); // ASTVerifier.g:365:13: ( rewriteTreeElement )+ @@ -3518,7 +3530,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:365:13: rewriteTreeElement { - pushFollow(FOLLOW_rewriteTreeElement_in_rewriteTreeAlt1612); + pushFollow(FOLLOW_rewriteTreeElement_in_rewriteTreeAlt1616); rewriteTreeElement(); state._fsp--; @@ -3592,7 +3604,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:369:4: rewriteTreeAtom { - pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTreeElement1628); + pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTreeElement1632); rewriteTreeAtom(); state._fsp--; @@ -3603,7 +3615,7 @@ public class ASTVerifier extends TreeParser { case 2 : // ASTVerifier.g:370:4: rewriteTree { - pushFollow(FOLLOW_rewriteTree_in_rewriteTreeElement1633); + pushFollow(FOLLOW_rewriteTree_in_rewriteTreeElement1637); rewriteTree(); state._fsp--; @@ -3614,7 +3626,7 @@ public class ASTVerifier extends TreeParser { case 3 : // ASTVerifier.g:371:6: rewriteTreeEbnf { - pushFollow(FOLLOW_rewriteTreeEbnf_in_rewriteTreeElement1640); + pushFollow(FOLLOW_rewriteTreeEbnf_in_rewriteTreeElement1644); rewriteTreeEbnf(); state._fsp--; @@ -3647,15 +3659,15 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:375:9: ^( TOKEN_REF elementOptions ARG_ACTION ) { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom1657); + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom1661); match(input, Token.DOWN, null); - pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom1659); + pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom1663); elementOptions(); state._fsp--; - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rewriteTreeAtom1661); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rewriteTreeAtom1665); match(input, Token.UP, null); @@ -3664,10 +3676,10 @@ public class ASTVerifier extends TreeParser { case 2 : // ASTVerifier.g:376:9: ^( TOKEN_REF elementOptions ) { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom1673); + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom1677); match(input, Token.DOWN, null); - pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom1675); + pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom1679); elementOptions(); state._fsp--; @@ -3680,10 +3692,10 @@ public class ASTVerifier extends TreeParser { case 3 : // ASTVerifier.g:377:9: ^( TOKEN_REF ARG_ACTION ) { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom1687); + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom1691); match(input, Token.DOWN, null); - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rewriteTreeAtom1689); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rewriteTreeAtom1693); match(input, Token.UP, null); @@ -3692,24 +3704,24 @@ public class ASTVerifier extends TreeParser { case 4 : // ASTVerifier.g:378:6: TOKEN_REF { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom1697); + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewriteTreeAtom1701); } break; case 5 : // ASTVerifier.g:379:9: RULE_REF { - match(input,RULE_REF,FOLLOW_RULE_REF_in_rewriteTreeAtom1707); + match(input,RULE_REF,FOLLOW_RULE_REF_in_rewriteTreeAtom1711); } break; case 6 : // ASTVerifier.g:380:6: ^( STRING_LITERAL elementOptions ) { - match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_rewriteTreeAtom1715); + match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_rewriteTreeAtom1719); match(input, Token.DOWN, null); - pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom1717); + pushFollow(FOLLOW_elementOptions_in_rewriteTreeAtom1721); elementOptions(); state._fsp--; @@ -3722,21 +3734,21 @@ public class ASTVerifier extends TreeParser { case 7 : // ASTVerifier.g:381:6: STRING_LITERAL { - match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_rewriteTreeAtom1725); + match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_rewriteTreeAtom1729); } break; case 8 : // ASTVerifier.g:382:6: LABEL { - match(input,LABEL,FOLLOW_LABEL_in_rewriteTreeAtom1733); + match(input,LABEL,FOLLOW_LABEL_in_rewriteTreeAtom1737); } break; case 9 : // ASTVerifier.g:383:4: ACTION { - match(input,ACTION,FOLLOW_ACTION_in_rewriteTreeAtom1738); + match(input,ACTION,FOLLOW_ACTION_in_rewriteTreeAtom1742); } break; @@ -3761,17 +3773,17 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:387:2: ( ^( ebnfSuffix ^( REWRITE_BLOCK rewriteTreeAlt ) ) ) // ASTVerifier.g:387:4: ^( ebnfSuffix ^( REWRITE_BLOCK rewriteTreeAlt ) ) { - pushFollow(FOLLOW_ebnfSuffix_in_rewriteTreeEbnf1750); + pushFollow(FOLLOW_ebnfSuffix_in_rewriteTreeEbnf1754); ebnfSuffix(); state._fsp--; match(input, Token.DOWN, null); - match(input,REWRITE_BLOCK,FOLLOW_REWRITE_BLOCK_in_rewriteTreeEbnf1753); + match(input,REWRITE_BLOCK,FOLLOW_REWRITE_BLOCK_in_rewriteTreeEbnf1757); match(input, Token.DOWN, null); - pushFollow(FOLLOW_rewriteTreeAlt_in_rewriteTreeEbnf1755); + pushFollow(FOLLOW_rewriteTreeAlt_in_rewriteTreeEbnf1759); rewriteTreeAlt(); state._fsp--; @@ -3802,10 +3814,10 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:390:2: ( ^( TREE_BEGIN rewriteTreeAtom ( rewriteTreeElement )* ) ) // ASTVerifier.g:390:4: ^( TREE_BEGIN rewriteTreeAtom ( rewriteTreeElement )* ) { - match(input,TREE_BEGIN,FOLLOW_TREE_BEGIN_in_rewriteTree1768); + match(input,TREE_BEGIN,FOLLOW_TREE_BEGIN_in_rewriteTree1772); match(input, Token.DOWN, null); - pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTree1770); + pushFollow(FOLLOW_rewriteTreeAtom_in_rewriteTree1774); rewriteTreeAtom(); state._fsp--; @@ -3825,7 +3837,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:390:33: rewriteTreeElement { - pushFollow(FOLLOW_rewriteTreeElement_in_rewriteTree1772); + pushFollow(FOLLOW_rewriteTreeElement_in_rewriteTree1776); rewriteTreeElement(); state._fsp--; @@ -3867,7 +3879,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:394:4: ^( TEMPLATE ( rewriteTemplateArgs )? DOUBLE_QUOTE_STRING_LITERAL ) { - match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteTemplate1787); + match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteTemplate1791); match(input, Token.DOWN, null); // ASTVerifier.g:394:15: ( rewriteTemplateArgs )? @@ -3881,7 +3893,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:394:15: rewriteTemplateArgs { - pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplate1789); + pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplate1793); rewriteTemplateArgs(); state._fsp--; @@ -3892,7 +3904,7 @@ public class ASTVerifier extends TreeParser { } - match(input,DOUBLE_QUOTE_STRING_LITERAL,FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewriteTemplate1792); + match(input,DOUBLE_QUOTE_STRING_LITERAL,FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewriteTemplate1796); match(input, Token.UP, null); @@ -3901,7 +3913,7 @@ public class ASTVerifier extends TreeParser { case 2 : // ASTVerifier.g:395:4: ^( TEMPLATE ( rewriteTemplateArgs )? DOUBLE_ANGLE_STRING_LITERAL ) { - match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteTemplate1799); + match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteTemplate1803); match(input, Token.DOWN, null); // ASTVerifier.g:395:15: ( rewriteTemplateArgs )? @@ -3915,7 +3927,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:395:15: rewriteTemplateArgs { - pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplate1801); + pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplate1805); rewriteTemplateArgs(); state._fsp--; @@ -3926,7 +3938,7 @@ public class ASTVerifier extends TreeParser { } - match(input,DOUBLE_ANGLE_STRING_LITERAL,FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewriteTemplate1804); + match(input,DOUBLE_ANGLE_STRING_LITERAL,FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewriteTemplate1808); match(input, Token.UP, null); @@ -3935,7 +3947,7 @@ public class ASTVerifier extends TreeParser { case 3 : // ASTVerifier.g:396:4: rewriteTemplateRef { - pushFollow(FOLLOW_rewriteTemplateRef_in_rewriteTemplate1810); + pushFollow(FOLLOW_rewriteTemplateRef_in_rewriteTemplate1814); rewriteTemplateRef(); state._fsp--; @@ -3946,7 +3958,7 @@ public class ASTVerifier extends TreeParser { case 4 : // ASTVerifier.g:397:4: rewriteIndirectTemplateHead { - pushFollow(FOLLOW_rewriteIndirectTemplateHead_in_rewriteTemplate1815); + pushFollow(FOLLOW_rewriteIndirectTemplateHead_in_rewriteTemplate1819); rewriteIndirectTemplateHead(); state._fsp--; @@ -3957,7 +3969,7 @@ public class ASTVerifier extends TreeParser { case 5 : // ASTVerifier.g:398:4: ACTION { - match(input,ACTION,FOLLOW_ACTION_in_rewriteTemplate1820); + match(input,ACTION,FOLLOW_ACTION_in_rewriteTemplate1824); } break; @@ -3982,10 +3994,10 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:402:2: ( ^( TEMPLATE ID ( rewriteTemplateArgs )? ) ) // ASTVerifier.g:402:4: ^( TEMPLATE ID ( rewriteTemplateArgs )? ) { - match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteTemplateRef1832); + match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteTemplateRef1836); match(input, Token.DOWN, null); - match(input,ID,FOLLOW_ID_in_rewriteTemplateRef1834); + match(input,ID,FOLLOW_ID_in_rewriteTemplateRef1838); // ASTVerifier.g:402:18: ( rewriteTemplateArgs )? int alt56=2; int LA56_0 = input.LA(1); @@ -3997,7 +4009,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:402:18: rewriteTemplateArgs { - pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplateRef1836); + pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteTemplateRef1840); rewriteTemplateArgs(); state._fsp--; @@ -4032,10 +4044,10 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:406:2: ( ^( TEMPLATE ACTION ( rewriteTemplateArgs )? ) ) // ASTVerifier.g:406:4: ^( TEMPLATE ACTION ( rewriteTemplateArgs )? ) { - match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteIndirectTemplateHead1850); + match(input,TEMPLATE,FOLLOW_TEMPLATE_in_rewriteIndirectTemplateHead1854); match(input, Token.DOWN, null); - match(input,ACTION,FOLLOW_ACTION_in_rewriteIndirectTemplateHead1852); + match(input,ACTION,FOLLOW_ACTION_in_rewriteIndirectTemplateHead1856); // ASTVerifier.g:406:22: ( rewriteTemplateArgs )? int alt57=2; int LA57_0 = input.LA(1); @@ -4047,7 +4059,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:406:22: rewriteTemplateArgs { - pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteIndirectTemplateHead1854); + pushFollow(FOLLOW_rewriteTemplateArgs_in_rewriteIndirectTemplateHead1858); rewriteTemplateArgs(); state._fsp--; @@ -4082,7 +4094,7 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:410:2: ( ^( ARGLIST ( rewriteTemplateArg )+ ) ) // ASTVerifier.g:410:4: ^( ARGLIST ( rewriteTemplateArg )+ ) { - match(input,ARGLIST,FOLLOW_ARGLIST_in_rewriteTemplateArgs1868); + match(input,ARGLIST,FOLLOW_ARGLIST_in_rewriteTemplateArgs1872); match(input, Token.DOWN, null); // ASTVerifier.g:410:14: ( rewriteTemplateArg )+ @@ -4101,7 +4113,7 @@ public class ASTVerifier extends TreeParser { case 1 : // ASTVerifier.g:410:14: rewriteTemplateArg { - pushFollow(FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs1870); + pushFollow(FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs1874); rewriteTemplateArg(); state._fsp--; @@ -4143,11 +4155,11 @@ public class ASTVerifier extends TreeParser { // ASTVerifier.g:414:2: ( ^( ARG ID ACTION ) ) // ASTVerifier.g:414:6: ^( ARG ID ACTION ) { - match(input,ARG,FOLLOW_ARG_in_rewriteTemplateArg1886); + match(input,ARG,FOLLOW_ARG_in_rewriteTemplateArg1890); match(input, Token.DOWN, null); - match(input,ID,FOLLOW_ID_in_rewriteTemplateArg1888); - match(input,ACTION,FOLLOW_ACTION_in_rewriteTemplateArg1890); + match(input,ID,FOLLOW_ID_in_rewriteTemplateArg1892); + match(input,ACTION,FOLLOW_ACTION_in_rewriteTemplateArg1894); match(input, Token.UP, null); @@ -4668,104 +4680,104 @@ public class ASTVerifier extends TreeParser { public static final BitSet FOLLOW_ACTION_in_block1179 = new BitSet(new long[]{0x0800000100290000L,0x0000002000100000L}); public static final BitSet FOLLOW_altList_in_block1182 = new BitSet(new long[]{0x0000000000000008L}); public static final BitSet FOLLOW_ROOT_in_ruleref1201 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_RULE_REF_in_ruleref1203 = new BitSet(new long[]{0x0000000000004008L}); - public static final BitSet FOLLOW_ARG_ACTION_in_ruleref1205 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_BANG_in_ruleref1216 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_RULE_REF_in_ruleref1218 = new BitSet(new long[]{0x0000000000004008L}); - public static final BitSet FOLLOW_ARG_ACTION_in_ruleref1220 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_RULE_REF_in_ruleref1231 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_ruleref1233 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_RANGE_in_range1253 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rangeElement_in_range1255 = new BitSet(new long[]{0xC000000000000000L,0x0000000000000008L}); - public static final BitSet FOLLOW_rangeElement_in_range1257 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_RULE_REF_in_ruleref1204 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleref1206 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_BANG_in_ruleref1218 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_RULE_REF_in_ruleref1221 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleref1223 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_RULE_REF_in_ruleref1235 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleref1237 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_RANGE_in_range1257 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rangeElement_in_range1259 = new BitSet(new long[]{0xC000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_rangeElement_in_range1261 = new BitSet(new long[]{0x0000000000000008L}); public static final BitSet FOLLOW_set_in_rangeElement0 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_terminal1310 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_elementOptions_in_terminal1312 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_terminal1321 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal1330 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_terminal1332 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L}); - public static final BitSet FOLLOW_elementOptions_in_terminal1334 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal1344 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_terminal1346 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal1356 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_elementOptions_in_terminal1358 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal1367 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_WILDCARD_in_terminal1376 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_elementOptions_in_terminal1378 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_WILDCARD_in_terminal1387 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ROOT_in_terminal1396 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_terminal_in_terminal1398 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_BANG_in_terminal1408 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_terminal_in_terminal1410 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ELEMENT_OPTIONS_in_elementOptions1429 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_elementOption_in_elementOptions1431 = new BitSet(new long[]{0x0000200000000008L,0x0000000000800000L}); - public static final BitSet FOLLOW_ID_in_elementOption1450 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ASSIGN_in_elementOption1461 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_elementOption1463 = new BitSet(new long[]{0x0000000000000000L,0x0000000000800000L}); - public static final BitSet FOLLOW_ID_in_elementOption1465 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ASSIGN_in_elementOption1477 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_elementOption1479 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_elementOption1481 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_predicatedRewrite_in_rewrite1496 = new BitSet(new long[]{0x0000000000000000L,0x0000001000400000L}); - public static final BitSet FOLLOW_nakedRewrite_in_rewrite1499 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ST_RESULT_in_predicatedRewrite1511 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_SEMPRED_in_predicatedRewrite1513 = new BitSet(new long[]{0x0100000800010000L,0x0000000000180000L}); - public static final BitSet FOLLOW_rewriteAlt_in_predicatedRewrite1515 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_RESULT_in_predicatedRewrite1522 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_SEMPRED_in_predicatedRewrite1524 = new BitSet(new long[]{0x0100000800010000L,0x0000000000180000L}); - public static final BitSet FOLLOW_rewriteAlt_in_predicatedRewrite1526 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ST_RESULT_in_nakedRewrite1540 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rewriteAlt_in_nakedRewrite1542 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_RESULT_in_nakedRewrite1549 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rewriteAlt_in_nakedRewrite1551 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_rewriteTemplate_in_rewriteAlt1567 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTreeAlt_in_rewriteAlt1575 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ETC_in_rewriteAlt1583 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_EPSILON_in_rewriteAlt1591 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ALT_in_rewriteTreeAlt1610 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rewriteTreeElement_in_rewriteTreeAlt1612 = new BitSet(new long[]{0xC400000000010008L,0x000000002001C008L}); - public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTreeElement1628 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTree_in_rewriteTreeElement1633 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteTreeEbnf_in_rewriteTreeElement1640 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom1657 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom1659 = new BitSet(new long[]{0x0000000000004000L}); - public static final BitSet FOLLOW_ARG_ACTION_in_rewriteTreeAtom1661 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom1673 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom1675 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom1687 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_rewriteTreeAtom1689 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom1697 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_RULE_REF_in_rewriteTreeAtom1707 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_rewriteTreeAtom1715 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom1717 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_rewriteTreeAtom1725 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LABEL_in_rewriteTreeAtom1733 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ACTION_in_rewriteTreeAtom1738 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ebnfSuffix_in_rewriteTreeEbnf1750 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_REWRITE_BLOCK_in_rewriteTreeEbnf1753 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rewriteTreeAlt_in_rewriteTreeEbnf1755 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TREE_BEGIN_in_rewriteTree1768 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTree1770 = new BitSet(new long[]{0xC400000000010008L,0x000000002001C008L}); - public static final BitSet FOLLOW_rewriteTreeElement_in_rewriteTree1772 = new BitSet(new long[]{0xC400000000010008L,0x000000002001C008L}); - public static final BitSet FOLLOW_TEMPLATE_in_rewriteTemplate1787 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplate1789 = new BitSet(new long[]{0x0000000000000400L}); - public static final BitSet FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewriteTemplate1792 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TEMPLATE_in_rewriteTemplate1799 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplate1801 = new BitSet(new long[]{0x0000000000000800L}); - public static final BitSet FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewriteTemplate1804 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_rewriteTemplateRef_in_rewriteTemplate1810 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_rewriteIndirectTemplateHead_in_rewriteTemplate1815 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ACTION_in_rewriteTemplate1820 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TEMPLATE_in_rewriteTemplateRef1832 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_rewriteTemplateRef1834 = new BitSet(new long[]{0x0000000000000008L,0x0000000002000000L}); - public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplateRef1836 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TEMPLATE_in_rewriteIndirectTemplateHead1850 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ACTION_in_rewriteIndirectTemplateHead1852 = new BitSet(new long[]{0x0000000000000008L,0x0000000002000000L}); - public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteIndirectTemplateHead1854 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ARGLIST_in_rewriteTemplateArgs1868 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs1870 = new BitSet(new long[]{0x0000000000000008L,0x0000000001000000L}); - public static final BitSet FOLLOW_ARG_in_rewriteTemplateArg1886 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_rewriteTemplateArg1888 = new BitSet(new long[]{0x0000000000010000L}); - public static final BitSet FOLLOW_ACTION_in_rewriteTemplateArg1890 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_terminal1314 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_elementOptions_in_terminal1316 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_terminal1325 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal1334 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_terminal1336 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L}); + public static final BitSet FOLLOW_elementOptions_in_terminal1338 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal1348 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_terminal1350 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal1360 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_elementOptions_in_terminal1362 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal1371 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_WILDCARD_in_terminal1380 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_elementOptions_in_terminal1382 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_WILDCARD_in_terminal1391 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ROOT_in_terminal1400 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_terminal_in_terminal1402 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_BANG_in_terminal1412 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_terminal_in_terminal1414 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ELEMENT_OPTIONS_in_elementOptions1433 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_elementOption_in_elementOptions1435 = new BitSet(new long[]{0x0000200000000008L,0x0000000000800000L}); + public static final BitSet FOLLOW_ID_in_elementOption1454 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ASSIGN_in_elementOption1465 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_elementOption1467 = new BitSet(new long[]{0x0000000000000000L,0x0000000000800000L}); + public static final BitSet FOLLOW_ID_in_elementOption1469 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ASSIGN_in_elementOption1481 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_elementOption1483 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_elementOption1485 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_predicatedRewrite_in_rewrite1500 = new BitSet(new long[]{0x0000000000000000L,0x0000001000400000L}); + public static final BitSet FOLLOW_nakedRewrite_in_rewrite1503 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ST_RESULT_in_predicatedRewrite1515 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_SEMPRED_in_predicatedRewrite1517 = new BitSet(new long[]{0x0100000800010000L,0x0000000000180000L}); + public static final BitSet FOLLOW_rewriteAlt_in_predicatedRewrite1519 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_RESULT_in_predicatedRewrite1526 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_SEMPRED_in_predicatedRewrite1528 = new BitSet(new long[]{0x0100000800010000L,0x0000000000180000L}); + public static final BitSet FOLLOW_rewriteAlt_in_predicatedRewrite1530 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ST_RESULT_in_nakedRewrite1544 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rewriteAlt_in_nakedRewrite1546 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_RESULT_in_nakedRewrite1553 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rewriteAlt_in_nakedRewrite1555 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_rewriteTemplate_in_rewriteAlt1571 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTreeAlt_in_rewriteAlt1579 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ETC_in_rewriteAlt1587 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_EPSILON_in_rewriteAlt1595 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ALT_in_rewriteTreeAlt1614 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rewriteTreeElement_in_rewriteTreeAlt1616 = new BitSet(new long[]{0xC400000000010008L,0x000000002001C008L}); + public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTreeElement1632 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTree_in_rewriteTreeElement1637 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteTreeEbnf_in_rewriteTreeElement1644 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom1661 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom1663 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_ARG_ACTION_in_rewriteTreeAtom1665 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom1677 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom1679 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom1691 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_rewriteTreeAtom1693 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TOKEN_REF_in_rewriteTreeAtom1701 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_REF_in_rewriteTreeAtom1711 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_rewriteTreeAtom1719 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_elementOptions_in_rewriteTreeAtom1721 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_rewriteTreeAtom1729 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LABEL_in_rewriteTreeAtom1737 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACTION_in_rewriteTreeAtom1742 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ebnfSuffix_in_rewriteTreeEbnf1754 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_REWRITE_BLOCK_in_rewriteTreeEbnf1757 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rewriteTreeAlt_in_rewriteTreeEbnf1759 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TREE_BEGIN_in_rewriteTree1772 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rewriteTreeAtom_in_rewriteTree1774 = new BitSet(new long[]{0xC400000000010008L,0x000000002001C008L}); + public static final BitSet FOLLOW_rewriteTreeElement_in_rewriteTree1776 = new BitSet(new long[]{0xC400000000010008L,0x000000002001C008L}); + public static final BitSet FOLLOW_TEMPLATE_in_rewriteTemplate1791 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplate1793 = new BitSet(new long[]{0x0000000000000400L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewriteTemplate1796 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TEMPLATE_in_rewriteTemplate1803 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplate1805 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewriteTemplate1808 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_rewriteTemplateRef_in_rewriteTemplate1814 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewriteIndirectTemplateHead_in_rewriteTemplate1819 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACTION_in_rewriteTemplate1824 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TEMPLATE_in_rewriteTemplateRef1836 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_rewriteTemplateRef1838 = new BitSet(new long[]{0x0000000000000008L,0x0000000002000000L}); + public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteTemplateRef1840 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TEMPLATE_in_rewriteIndirectTemplateHead1854 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ACTION_in_rewriteIndirectTemplateHead1856 = new BitSet(new long[]{0x0000000000000008L,0x0000000002000000L}); + public static final BitSet FOLLOW_rewriteTemplateArgs_in_rewriteIndirectTemplateHead1858 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ARGLIST_in_rewriteTemplateArgs1872 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_rewriteTemplateArg_in_rewriteTemplateArgs1874 = new BitSet(new long[]{0x0000000000000008L,0x0000000001000000L}); + public static final BitSet FOLLOW_ARG_in_rewriteTemplateArg1890 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_rewriteTemplateArg1892 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_ACTION_in_rewriteTemplateArg1894 = new BitSet(new long[]{0x0000000000000008L}); } \ No newline at end of file diff --git a/tool/src/org/antlr/v4/semantics/BasicSemanticChecks.java b/tool/src/org/antlr/v4/semantics/BasicSemanticChecks.java index d3c1abaed..433f8c6fe 100644 --- a/tool/src/org/antlr/v4/semantics/BasicSemanticChecks.java +++ b/tool/src/org/antlr/v4/semantics/BasicSemanticChecks.java @@ -117,7 +117,7 @@ public class BasicSemanticChecks { // TODO: track errors? protected static void checkGrammarName(Grammar g, Token nameToken) { - if ( g.implicitLexer ) return; + if ( g.implicitLexer==null ) return; String fullyQualifiedName = nameToken.getInputStream().getSourceName(); File f = new File(fullyQualifiedName); String fileName = f.getName(); diff --git a/tool/src/org/antlr/v4/semantics/BasicSemanticTriggers.java b/tool/src/org/antlr/v4/semantics/BasicSemanticTriggers.java index c5c399ab7..79313f30b 100644 --- a/tool/src/org/antlr/v4/semantics/BasicSemanticTriggers.java +++ b/tool/src/org/antlr/v4/semantics/BasicSemanticTriggers.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 BasicSemanticTriggers.g 2010-02-06 14:39:36 +// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 BasicSemanticTriggers.g 2010-02-06 15:47:26 /* [The "BSD license"] diff --git a/tool/src/org/antlr/v4/semantics/CollectSymbols.g b/tool/src/org/antlr/v4/semantics/CollectSymbols.g index 6512e9fe4..4ef461cf3 100644 --- a/tool/src/org/antlr/v4/semantics/CollectSymbols.g +++ b/tool/src/org/antlr/v4/semantics/CollectSymbols.g @@ -24,8 +24,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** Triggers for defining rules, tokens, scopes, and actions. - * Side-effects: ... +/** Collects rules, terminals, strings, actions, scopes etc... from AST + * Side-effects: None */ tree grammar CollectSymbols; options { @@ -70,7 +70,9 @@ import org.antlr.v4.tool.*; @members { Rule currentRule = null; public List rules = new ArrayList(); +public List rulerefs = new ArrayList(); public List terminals = new ArrayList(); +public List strings = new ArrayList(); public List aliases = new ArrayList(); public List scopes = new ArrayList(); public List actions = new ArrayList(); @@ -88,6 +90,7 @@ topdown | rule | ruleArg | ruleReturns + | ruleref | terminal ; @@ -100,14 +103,16 @@ globalScope ; action - : {inContext("GRAMMAR")}? ^(AT sc=ID? ID ACTION) + : {inContext("GRAMMAR")}? ^(AT ID? ID ACTION) {actions.add($AT);} ; tokenAlias : {inContext("TOKENS")}? - ( ^(ASSIGN t=ID STRING_LITERAL) {terminals.add($t); aliases.add($ASSIGN);} - | t=ID {terminals.add($t);} + ( ^(ASSIGN t=ID STRING_LITERAL) + {terminals.add($t); aliases.add($ASSIGN); strings.add($STRING_LITERAL);} + | t=ID + {terminals.add($t);} ) ; @@ -139,14 +144,11 @@ ruleScopeSpec ; terminal - : {!inContext("TOKENS ASSIGN")}? STRING_LITERAL {terminals.add($start);} + : {!inContext("TOKENS ASSIGN")}? STRING_LITERAL {terminals.add($start); + strings.add($STRING_LITERAL);} | TOKEN_REF {terminals.add($start);} ; -/* ruleref - : ^(ROOT RULE_REF ARG_ACTION?) - | ^(BANG RULE_REF ARG_ACTION?) - | ^(RULE_REF ARG_ACTION?) - ; -*/ + : ^(RULE_REF ARG_ACTION?) {rulerefs.add($RULE_REF);} + ; \ No newline at end of file diff --git a/tool/src/org/antlr/v4/semantics/CollectSymbols.java b/tool/src/org/antlr/v4/semantics/CollectSymbols.java index 64b9f8a30..0adb904ac 100644 --- a/tool/src/org/antlr/v4/semantics/CollectSymbols.java +++ b/tool/src/org/antlr/v4/semantics/CollectSymbols.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 CollectSymbols.g 2010-02-05 14:20:12 +// $ANTLR 3.2.1-SNAPSHOT Jan 26, 2010 15:12:28 CollectSymbols.g 2010-02-06 15:47:26 /* [The "BSD license"] @@ -37,16 +37,17 @@ import org.antlr.v4.tool.Rule; import java.util.ArrayList; import java.util.List; -/** Triggers for defining rules, tokens, scopes, and actions. - * Side-effects: ... +/** Collects rules, terminals, strings, actions, scopes etc... from AST + * Side-effects: None */ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final String[] tokenNames = new String[] { - "", "", "", "", "SEMPRED", "FORCED_ACTION", "DOC_COMMENT", "SRC", "NLCHARS", "COMMENT", "DOUBLE_QUOTE_STRING_LITERAL", "DOUBLE_ANGLE_STRING_LITERAL", "ACTION_STRING_LITERAL", "ACTION_CHAR_LITERAL", "ARG_ACTION", "NESTED_ACTION", "ACTION", "ACTION_ESC", "WSNLCHARS", "OPTIONS", "TOKENS", "SCOPE", "IMPORT", "FRAGMENT", "LEXER", "PARSER", "TREE", "GRAMMAR", "PROTECTED", "PUBLIC", "PRIVATE", "RETURNS", "THROWS", "CATCH", "FINALLY", "TEMPLATE", "COLON", "COLONCOLON", "COMMA", "SEMI", "LPAREN", "RPAREN", "IMPLIES", "LT", "GT", "ASSIGN", "QUESTION", "BANG", "STAR", "PLUS", "PLUS_ASSIGN", "OR", "ROOT", "DOLLAR", "DOT", "RANGE", "ETC", "RARROW", "TREE_BEGIN", "AT", "NOT", "RBRACE", "TOKEN_REF", "RULE_REF", "INT", "WSCHARS", "ESC_SEQ", "STRING_LITERAL", "HEX_DIGIT", "UNICODE_ESC", "WS", "ERRCHAR", "RULE", "RULES", "RULEMODIFIERS", "RULEACTIONS", "BLOCK", "REWRITE_BLOCK", "OPTIONAL", "CLOSURE", "POSITIVE_CLOSURE", "SYNPRED", "CHAR_RANGE", "EPSILON", "ALT", "ALTLIST", "RESULT", "ID", "ARG", "ARGLIST", "RET", "INITACTION", "LABEL", "GATED_SEMPRED", "SYN_SEMPRED", "BACKTRACK_SEMPRED", "WILDCARD", "LIST", "ELEMENT_OPTIONS", "ST_RESULT", "ALT_REWRITE" + "", "", "", "", "SEMPRED", "FORCED_ACTION", "DOC_COMMENT", "SRC", "NLCHARS", "COMMENT", "DOUBLE_QUOTE_STRING_LITERAL", "DOUBLE_ANGLE_STRING_LITERAL", "ACTION_STRING_LITERAL", "ACTION_CHAR_LITERAL", "ARG_ACTION", "NESTED_ACTION", "ACTION", "ACTION_ESC", "WSNLCHARS", "OPTIONS", "TOKENS", "SCOPE", "IMPORT", "FRAGMENT", "LEXER", "PARSER", "TREE", "GRAMMAR", "PROTECTED", "PUBLIC", "PRIVATE", "RETURNS", "THROWS", "CATCH", "FINALLY", "TEMPLATE", "COLON", "COLONCOLON", "COMMA", "SEMI", "LPAREN", "RPAREN", "IMPLIES", "LT", "GT", "ASSIGN", "QUESTION", "BANG", "STAR", "PLUS", "PLUS_ASSIGN", "OR", "ROOT", "DOLLAR", "DOT", "RANGE", "ETC", "RARROW", "TREE_BEGIN", "AT", "NOT", "RBRACE", "TOKEN_REF", "RULE_REF", "INT", "WSCHARS", "ESC_SEQ", "STRING_LITERAL", "HEX_DIGIT", "UNICODE_ESC", "WS", "ERRCHAR", "RULE", "RULES", "RULEMODIFIERS", "RULEACTIONS", "BLOCK", "REWRITE_BLOCK", "OPTIONAL", "CLOSURE", "POSITIVE_CLOSURE", "SYNPRED", "CHAR_RANGE", "EPSILON", "ALT", "ALTLIST", "RESULT", "ID", "ARG", "ARGLIST", "RET", "COMBINED", "INITACTION", "LABEL", "GATED_SEMPRED", "SYN_SEMPRED", "BACKTRACK_SEMPRED", "WILDCARD", "LIST", "ELEMENT_OPTIONS", "ST_RESULT", "ALT_REWRITE" }; + public static final int COMBINED=91; public static final int LT=43; public static final int STAR=48; - public static final int BACKTRACK_SEMPRED=95; + public static final int BACKTRACK_SEMPRED=96; public static final int DOUBLE_ANGLE_STRING_LITERAL=11; public static final int FORCED_ACTION=5; public static final int ARGLIST=89; @@ -57,7 +58,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final int ACTION=16; public static final int TOKEN_REF=62; public static final int RULEMODIFIERS=74; - public static final int ST_RESULT=99; + public static final int ST_RESULT=100; public static final int RPAREN=41; public static final int RET=90; public static final int IMPORT=22; @@ -70,8 +71,8 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final int GRAMMAR=27; public static final int RULEACTIONS=75; public static final int WSCHARS=65; - public static final int INITACTION=91; - public static final int ALT_REWRITE=100; + public static final int INITACTION=92; + public static final int ALT_REWRITE=101; public static final int IMPLIES=42; public static final int RULE=72; public static final int RBRACE=61; @@ -82,7 +83,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final int CHAR_RANGE=82; public static final int INT=64; public static final int EPSILON=83; - public static final int LIST=97; + public static final int LIST=98; public static final int COLONCOLON=37; public static final int WSNLCHARS=18; public static final int WS=70; @@ -94,7 +95,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final int PARSER=25; public static final int DOLLAR=53; public static final int PROTECTED=28; - public static final int ELEMENT_OPTIONS=98; + public static final int ELEMENT_OPTIONS=99; public static final int NESTED_ACTION=15; public static final int FRAGMENT=23; public static final int ID=87; @@ -107,7 +108,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final int SCOPE=21; public static final int ETC=56; public static final int COMMA=38; - public static final int WILDCARD=96; + public static final int WILDCARD=97; public static final int DOC_COMMENT=6; public static final int PLUS=49; public static final int REWRITE_BLOCK=77; @@ -119,7 +120,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final int HEX_DIGIT=68; public static final int RANGE=55; public static final int TOKENS=20; - public static final int GATED_SEMPRED=93; + public static final int GATED_SEMPRED=94; public static final int RESULT=86; public static final int BANG=47; public static final int ACTION_STRING_LITERAL=12; @@ -133,8 +134,8 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final int QUESTION=46; public static final int FINALLY=34; public static final int TEMPLATE=35; - public static final int LABEL=92; - public static final int SYN_SEMPRED=94; + public static final int LABEL=93; + public static final int SYN_SEMPRED=95; public static final int ERRCHAR=71; public static final int BLOCK=76; public static final int ASSIGN=45; @@ -162,7 +163,9 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { Rule currentRule = null; public List rules = new ArrayList(); + public List rulerefs = new ArrayList(); public List terminals = new ArrayList(); + public List strings = new ArrayList(); public List aliases = new ArrayList(); public List scopes = new ArrayList(); public List actions = new ArrayList(); @@ -175,11 +178,11 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "topdown" - // CollectSymbols.g:84:1: topdown : ( globalScope | action | tokenAlias | rule | ruleArg | ruleReturns | terminal ); + // CollectSymbols.g:86:1: topdown : ( globalScope | action | tokenAlias | rule | ruleArg | ruleReturns | ruleref | terminal ); public final void topdown() throws RecognitionException { try { - // CollectSymbols.g:85:5: ( globalScope | action | tokenAlias | rule | ruleArg | ruleReturns | terminal ) - int alt1=7; + // CollectSymbols.g:87:5: ( globalScope | action | tokenAlias | rule | ruleArg | ruleReturns | ruleref | terminal ) + int alt1=8; switch ( input.LA(1) ) { case SCOPE: { @@ -212,10 +215,15 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { alt1=6; } break; + case RULE_REF: + { + alt1=7; + } + break; case TOKEN_REF: case STRING_LITERAL: { - alt1=7; + alt1=8; } break; default: @@ -228,7 +236,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { switch (alt1) { case 1 : - // CollectSymbols.g:85:7: globalScope + // CollectSymbols.g:87:7: globalScope { pushFollow(FOLLOW_globalScope_in_topdown96); globalScope(); @@ -239,7 +247,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } break; case 2 : - // CollectSymbols.g:86:7: action + // CollectSymbols.g:88:7: action { pushFollow(FOLLOW_action_in_topdown104); action(); @@ -250,7 +258,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } break; case 3 : - // CollectSymbols.g:87:7: tokenAlias + // CollectSymbols.g:89:7: tokenAlias { pushFollow(FOLLOW_tokenAlias_in_topdown112); tokenAlias(); @@ -261,7 +269,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } break; case 4 : - // CollectSymbols.g:88:7: rule + // CollectSymbols.g:90:7: rule { pushFollow(FOLLOW_rule_in_topdown120); rule(); @@ -272,7 +280,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } break; case 5 : - // CollectSymbols.g:89:7: ruleArg + // CollectSymbols.g:91:7: ruleArg { pushFollow(FOLLOW_ruleArg_in_topdown128); ruleArg(); @@ -283,7 +291,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } break; case 6 : - // CollectSymbols.g:90:7: ruleReturns + // CollectSymbols.g:92:7: ruleReturns { pushFollow(FOLLOW_ruleReturns_in_topdown136); ruleReturns(); @@ -294,9 +302,20 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } break; case 7 : - // CollectSymbols.g:91:7: terminal + // CollectSymbols.g:93:7: ruleref { - pushFollow(FOLLOW_terminal_in_topdown144); + pushFollow(FOLLOW_ruleref_in_topdown144); + ruleref(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 8 : + // CollectSymbols.g:94:7: terminal + { + pushFollow(FOLLOW_terminal_in_topdown152); terminal(); state._fsp--; @@ -319,13 +338,13 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "bottomup" - // CollectSymbols.g:94:1: bottomup : finishRule ; + // CollectSymbols.g:97:1: bottomup : finishRule ; public final void bottomup() throws RecognitionException { try { - // CollectSymbols.g:95:2: ( finishRule ) - // CollectSymbols.g:95:4: finishRule + // CollectSymbols.g:98:2: ( finishRule ) + // CollectSymbols.g:98:4: finishRule { - pushFollow(FOLLOW_finishRule_in_bottomup155); + pushFollow(FOLLOW_finishRule_in_bottomup163); finishRule(); state._fsp--; @@ -346,23 +365,23 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "globalScope" - // CollectSymbols.g:98:1: globalScope : {...}? ^( SCOPE ID ACTION ) ; + // CollectSymbols.g:101:1: globalScope : {...}? ^( SCOPE ID ACTION ) ; public final void globalScope() throws RecognitionException { GrammarAST ID1=null; try { - // CollectSymbols.g:99:2: ({...}? ^( SCOPE ID ACTION ) ) - // CollectSymbols.g:99:4: {...}? ^( SCOPE ID ACTION ) + // CollectSymbols.g:102:2: ({...}? ^( SCOPE ID ACTION ) ) + // CollectSymbols.g:102:4: {...}? ^( SCOPE ID ACTION ) { if ( !((inContext("GRAMMAR"))) ) { if (state.backtracking>0) {state.failed=true; return ;} throw new FailedPredicateException(input, "globalScope", "inContext(\"GRAMMAR\")"); } - match(input,SCOPE,FOLLOW_SCOPE_in_globalScope169); if (state.failed) return ; + match(input,SCOPE,FOLLOW_SCOPE_in_globalScope177); if (state.failed) return ; match(input, Token.DOWN, null); if (state.failed) return ; - ID1=(GrammarAST)match(input,ID,FOLLOW_ID_in_globalScope171); if (state.failed) return ; - match(input,ACTION,FOLLOW_ACTION_in_globalScope173); if (state.failed) return ; + ID1=(GrammarAST)match(input,ID,FOLLOW_ID_in_globalScope179); if (state.failed) return ; + match(input,ACTION,FOLLOW_ACTION_in_globalScope181); if (state.failed) return ; match(input, Token.UP, null); if (state.failed) return ; if ( state.backtracking==1 ) { @@ -384,23 +403,23 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "action" - // CollectSymbols.g:102:1: action : {...}? ^( AT (sc= ID )? ID ACTION ) ; + // CollectSymbols.g:105:1: action : {...}? ^( AT (sc= ID )? ID ACTION ) ; public final void action() throws RecognitionException { GrammarAST sc=null; GrammarAST AT2=null; try { - // CollectSymbols.g:103:2: ({...}? ^( AT (sc= ID )? ID ACTION ) ) - // CollectSymbols.g:103:4: {...}? ^( AT (sc= ID )? ID ACTION ) + // CollectSymbols.g:106:2: ({...}? ^( AT (sc= ID )? ID ACTION ) ) + // CollectSymbols.g:106:4: {...}? ^( AT (sc= ID )? ID ACTION ) { if ( !((inContext("GRAMMAR"))) ) { if (state.backtracking>0) {state.failed=true; return ;} throw new FailedPredicateException(input, "action", "inContext(\"GRAMMAR\")"); } - AT2=(GrammarAST)match(input,AT,FOLLOW_AT_in_action190); if (state.failed) return ; + AT2=(GrammarAST)match(input,AT,FOLLOW_AT_in_action198); if (state.failed) return ; match(input, Token.DOWN, null); if (state.failed) return ; - // CollectSymbols.g:103:35: (sc= ID )? + // CollectSymbols.g:106:35: (sc= ID )? int alt2=2; int LA2_0 = input.LA(1); @@ -413,17 +432,17 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } switch (alt2) { case 1 : - // CollectSymbols.g:103:35: sc= ID + // CollectSymbols.g:106:35: sc= ID { - sc=(GrammarAST)match(input,ID,FOLLOW_ID_in_action194); if (state.failed) return ; + sc=(GrammarAST)match(input,ID,FOLLOW_ID_in_action202); if (state.failed) return ; } break; } - match(input,ID,FOLLOW_ID_in_action197); if (state.failed) return ; - match(input,ACTION,FOLLOW_ACTION_in_action199); if (state.failed) return ; + match(input,ID,FOLLOW_ID_in_action205); if (state.failed) return ; + match(input,ACTION,FOLLOW_ACTION_in_action207); if (state.failed) return ; match(input, Token.UP, null); if (state.failed) return ; if ( state.backtracking==1 ) { @@ -445,20 +464,21 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "tokenAlias" - // CollectSymbols.g:107:1: tokenAlias : {...}? ( ^( ASSIGN t= ID STRING_LITERAL ) | t= ID ) ; + // CollectSymbols.g:110:1: tokenAlias : {...}? ( ^( ASSIGN t= ID STRING_LITERAL ) | t= ID ) ; public final void tokenAlias() throws RecognitionException { GrammarAST t=null; GrammarAST ASSIGN3=null; + GrammarAST STRING_LITERAL4=null; try { - // CollectSymbols.g:108:2: ({...}? ( ^( ASSIGN t= ID STRING_LITERAL ) | t= ID ) ) - // CollectSymbols.g:108:4: {...}? ( ^( ASSIGN t= ID STRING_LITERAL ) | t= ID ) + // CollectSymbols.g:111:2: ({...}? ( ^( ASSIGN t= ID STRING_LITERAL ) | t= ID ) ) + // CollectSymbols.g:111:4: {...}? ( ^( ASSIGN t= ID STRING_LITERAL ) | t= ID ) { if ( !((inContext("TOKENS"))) ) { if (state.backtracking>0) {state.failed=true; return ;} throw new FailedPredicateException(input, "tokenAlias", "inContext(\"TOKENS\")"); } - // CollectSymbols.g:109:3: ( ^( ASSIGN t= ID STRING_LITERAL ) | t= ID ) + // CollectSymbols.g:112:3: ( ^( ASSIGN t= ID STRING_LITERAL ) | t= ID ) int alt3=2; int LA3_0 = input.LA(1); @@ -477,25 +497,25 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } switch (alt3) { case 1 : - // CollectSymbols.g:109:5: ^( ASSIGN t= ID STRING_LITERAL ) + // CollectSymbols.g:112:5: ^( ASSIGN t= ID STRING_LITERAL ) { - ASSIGN3=(GrammarAST)match(input,ASSIGN,FOLLOW_ASSIGN_in_tokenAlias222); if (state.failed) return ; + ASSIGN3=(GrammarAST)match(input,ASSIGN,FOLLOW_ASSIGN_in_tokenAlias230); if (state.failed) return ; match(input, Token.DOWN, null); if (state.failed) return ; - t=(GrammarAST)match(input,ID,FOLLOW_ID_in_tokenAlias226); if (state.failed) return ; - match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_tokenAlias228); if (state.failed) return ; + t=(GrammarAST)match(input,ID,FOLLOW_ID_in_tokenAlias234); if (state.failed) return ; + STRING_LITERAL4=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_tokenAlias236); if (state.failed) return ; match(input, Token.UP, null); if (state.failed) return ; if ( state.backtracking==1 ) { - terminals.add(t); aliases.add(ASSIGN3); + terminals.add(t); aliases.add(ASSIGN3); strings.add(STRING_LITERAL4); } } break; case 2 : - // CollectSymbols.g:110:5: t= ID + // CollectSymbols.g:114:5: t= ID { - t=(GrammarAST)match(input,ID,FOLLOW_ID_in_tokenAlias239); if (state.failed) return ; + t=(GrammarAST)match(input,ID,FOLLOW_ID_in_tokenAlias250); if (state.failed) return ; if ( state.backtracking==1 ) { terminals.add(t); } @@ -521,20 +541,20 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "rule" - // CollectSymbols.g:114:1: rule : ^( RULE name= ID ( . )+ ) ; + // CollectSymbols.g:119:1: rule : ^( RULE name= ID ( . )+ ) ; public final void rule() throws RecognitionException { GrammarAST name=null; - GrammarAST RULE4=null; + GrammarAST RULE5=null; try { - // CollectSymbols.g:114:5: ( ^( RULE name= ID ( . )+ ) ) - // CollectSymbols.g:114:9: ^( RULE name= ID ( . )+ ) + // CollectSymbols.g:119:5: ( ^( RULE name= ID ( . )+ ) ) + // CollectSymbols.g:119:9: ^( RULE name= ID ( . )+ ) { - RULE4=(GrammarAST)match(input,RULE,FOLLOW_RULE_in_rule265); if (state.failed) return ; + RULE5=(GrammarAST)match(input,RULE,FOLLOW_RULE_in_rule272); if (state.failed) return ; match(input, Token.DOWN, null); if (state.failed) return ; - name=(GrammarAST)match(input,ID,FOLLOW_ID_in_rule269); if (state.failed) return ; - // CollectSymbols.g:114:25: ( . )+ + name=(GrammarAST)match(input,ID,FOLLOW_ID_in_rule276); if (state.failed) return ; + // CollectSymbols.g:119:25: ( . )+ int cnt4=0; loop4: do { @@ -551,7 +571,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { switch (alt4) { case 1 : - // CollectSymbols.g:114:25: . + // CollectSymbols.g:119:25: . { matchAny(input); if (state.failed) return ; @@ -572,7 +592,7 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { match(input, Token.UP, null); if (state.failed) return ; if ( state.backtracking==1 ) { - Rule r = new Rule((name!=null?name.getText():null), (GrammarASTWithOptions)RULE4); + Rule r = new Rule((name!=null?name.getText():null), (GrammarASTWithOptions)RULE5); rules.add(r); currentRule = r; @@ -593,13 +613,13 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "finishRule" - // CollectSymbols.g:122:1: finishRule : RULE ; + // CollectSymbols.g:127:1: finishRule : RULE ; public final void finishRule() throws RecognitionException { try { - // CollectSymbols.g:123:2: ( RULE ) - // CollectSymbols.g:123:4: RULE + // CollectSymbols.g:128:2: ( RULE ) + // CollectSymbols.g:128:4: RULE { - match(input,RULE,FOLLOW_RULE_in_finishRule291); if (state.failed) return ; + match(input,RULE,FOLLOW_RULE_in_finishRule298); if (state.failed) return ; if ( state.backtracking==1 ) { currentRule = null; } @@ -619,21 +639,21 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "ruleArg" - // CollectSymbols.g:126:1: ruleArg : {...}? ARG_ACTION ; + // CollectSymbols.g:131:1: ruleArg : {...}? ARG_ACTION ; public final void ruleArg() throws RecognitionException { - GrammarAST ARG_ACTION5=null; + GrammarAST ARG_ACTION6=null; try { - // CollectSymbols.g:127:2: ({...}? ARG_ACTION ) - // CollectSymbols.g:127:4: {...}? ARG_ACTION + // CollectSymbols.g:132:2: ({...}? ARG_ACTION ) + // CollectSymbols.g:132:4: {...}? ARG_ACTION { if ( !((inContext("RULE"))) ) { if (state.backtracking>0) {state.failed=true; return ;} throw new FailedPredicateException(input, "ruleArg", "inContext(\"RULE\")"); } - ARG_ACTION5=(GrammarAST)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleArg306); if (state.failed) return ; + ARG_ACTION6=(GrammarAST)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleArg313); if (state.failed) return ; if ( state.backtracking==1 ) { - currentRule.arg = ARG_ACTION5; + currentRule.arg = ARG_ACTION6; } } @@ -651,22 +671,22 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "ruleReturns" - // CollectSymbols.g:130:1: ruleReturns : ^( RETURNS ARG_ACTION ) ; + // CollectSymbols.g:135:1: ruleReturns : ^( RETURNS ARG_ACTION ) ; public final void ruleReturns() throws RecognitionException { - GrammarAST ARG_ACTION6=null; + GrammarAST ARG_ACTION7=null; try { - // CollectSymbols.g:131:2: ( ^( RETURNS ARG_ACTION ) ) - // CollectSymbols.g:131:4: ^( RETURNS ARG_ACTION ) + // CollectSymbols.g:136:2: ( ^( RETURNS ARG_ACTION ) ) + // CollectSymbols.g:136:4: ^( RETURNS ARG_ACTION ) { - match(input,RETURNS,FOLLOW_RETURNS_in_ruleReturns321); if (state.failed) return ; + match(input,RETURNS,FOLLOW_RETURNS_in_ruleReturns328); if (state.failed) return ; match(input, Token.DOWN, null); if (state.failed) return ; - ARG_ACTION6=(GrammarAST)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleReturns323); if (state.failed) return ; + ARG_ACTION7=(GrammarAST)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleReturns330); if (state.failed) return ; match(input, Token.UP, null); if (state.failed) return ; if ( state.backtracking==1 ) { - currentRule.ret = ARG_ACTION6; + currentRule.ret = ARG_ACTION7; } } @@ -684,17 +704,17 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { // $ANTLR start "ruleScopeSpec" - // CollectSymbols.g:134:1: ruleScopeSpec : {...}? ( ^( SCOPE ACTION ) | ^( SCOPE ( ID )+ ) ) ; + // CollectSymbols.g:139:1: ruleScopeSpec : {...}? ( ^( SCOPE ACTION ) | ^( SCOPE ( ID )+ ) ) ; public final void ruleScopeSpec() throws RecognitionException { try { - // CollectSymbols.g:135:2: ({...}? ( ^( SCOPE ACTION ) | ^( SCOPE ( ID )+ ) ) ) - // CollectSymbols.g:135:4: {...}? ( ^( SCOPE ACTION ) | ^( SCOPE ( ID )+ ) ) + // CollectSymbols.g:140:2: ({...}? ( ^( SCOPE ACTION ) | ^( SCOPE ( ID )+ ) ) ) + // CollectSymbols.g:140:4: {...}? ( ^( SCOPE ACTION ) | ^( SCOPE ( ID )+ ) ) { if ( !((inContext("RULE"))) ) { if (state.backtracking>0) {state.failed=true; return ;} throw new FailedPredicateException(input, "ruleScopeSpec", "inContext(\"RULE\")"); } - // CollectSymbols.g:136:3: ( ^( SCOPE ACTION ) | ^( SCOPE ( ID )+ ) ) + // CollectSymbols.g:141:3: ( ^( SCOPE ACTION ) | ^( SCOPE ( ID )+ ) ) int alt6=2; int LA6_0 = input.LA(1); @@ -735,24 +755,24 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } switch (alt6) { case 1 : - // CollectSymbols.g:136:5: ^( SCOPE ACTION ) + // CollectSymbols.g:141:5: ^( SCOPE ACTION ) { - match(input,SCOPE,FOLLOW_SCOPE_in_ruleScopeSpec344); if (state.failed) return ; + match(input,SCOPE,FOLLOW_SCOPE_in_ruleScopeSpec351); if (state.failed) return ; match(input, Token.DOWN, null); if (state.failed) return ; - match(input,ACTION,FOLLOW_ACTION_in_ruleScopeSpec346); if (state.failed) return ; + match(input,ACTION,FOLLOW_ACTION_in_ruleScopeSpec353); if (state.failed) return ; match(input, Token.UP, null); if (state.failed) return ; } break; case 2 : - // CollectSymbols.g:137:5: ^( SCOPE ( ID )+ ) + // CollectSymbols.g:142:5: ^( SCOPE ( ID )+ ) { - match(input,SCOPE,FOLLOW_SCOPE_in_ruleScopeSpec354); if (state.failed) return ; + match(input,SCOPE,FOLLOW_SCOPE_in_ruleScopeSpec361); if (state.failed) return ; match(input, Token.DOWN, null); if (state.failed) return ; - // CollectSymbols.g:137:13: ( ID )+ + // CollectSymbols.g:142:13: ( ID )+ int cnt5=0; loop5: do { @@ -766,9 +786,9 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { switch (alt5) { case 1 : - // CollectSymbols.g:137:13: ID + // CollectSymbols.g:142:13: ID { - match(input,ID,FOLLOW_ID_in_ruleScopeSpec356); if (state.failed) return ; + match(input,ID,FOLLOW_ID_in_ruleScopeSpec363); if (state.failed) return ; } break; @@ -809,13 +829,15 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { }; // $ANTLR start "terminal" - // CollectSymbols.g:141:1: terminal : ({...}? STRING_LITERAL | TOKEN_REF ); + // CollectSymbols.g:146:1: terminal : ({...}? STRING_LITERAL | TOKEN_REF ); public final CollectSymbols.terminal_return terminal() throws RecognitionException { CollectSymbols.terminal_return retval = new CollectSymbols.terminal_return(); retval.start = input.LT(1); + GrammarAST STRING_LITERAL8=null; + try { - // CollectSymbols.g:142:5: ({...}? STRING_LITERAL | TOKEN_REF ) + // CollectSymbols.g:147:5: ({...}? STRING_LITERAL | TOKEN_REF ) int alt7=2; int LA7_0 = input.LA(1); @@ -834,23 +856,24 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } switch (alt7) { case 1 : - // CollectSymbols.g:142:7: {...}? STRING_LITERAL + // CollectSymbols.g:147:7: {...}? STRING_LITERAL { if ( !((!inContext("TOKENS ASSIGN"))) ) { if (state.backtracking>0) {state.failed=true; return retval;} throw new FailedPredicateException(input, "terminal", "!inContext(\"TOKENS ASSIGN\")"); } - match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal378); if (state.failed) return retval; + STRING_LITERAL8=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal385); if (state.failed) return retval; if ( state.backtracking==1 ) { terminals.add(((GrammarAST)retval.start)); + strings.add(STRING_LITERAL8); } } break; case 2 : - // CollectSymbols.g:143:7: TOKEN_REF + // CollectSymbols.g:149:7: TOKEN_REF { - match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal388); if (state.failed) return retval; + match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal395); if (state.failed) return retval; if ( state.backtracking==1 ) { terminals.add(((GrammarAST)retval.start)); } @@ -870,6 +893,58 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { } // $ANTLR end "terminal" + + // $ANTLR start "ruleref" + // CollectSymbols.g:152:1: ruleref : ^( RULE_REF ( ARG_ACTION )? ) ; + public final void ruleref() throws RecognitionException { + GrammarAST RULE_REF9=null; + + try { + // CollectSymbols.g:153:5: ( ^( RULE_REF ( ARG_ACTION )? ) ) + // CollectSymbols.g:153:7: ^( RULE_REF ( ARG_ACTION )? ) + { + RULE_REF9=(GrammarAST)match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref424); if (state.failed) return ; + + if ( input.LA(1)==Token.DOWN ) { + match(input, Token.DOWN, null); if (state.failed) return ; + // CollectSymbols.g:153:18: ( ARG_ACTION )? + int alt8=2; + int LA8_0 = input.LA(1); + + if ( (LA8_0==ARG_ACTION) ) { + alt8=1; + } + switch (alt8) { + case 1 : + // CollectSymbols.g:153:18: ARG_ACTION + { + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref426); if (state.failed) return ; + + } + break; + + } + + + match(input, Token.UP, null); if (state.failed) return ; + } + if ( state.backtracking==1 ) { + rulerefs.add(RULE_REF9); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return ; + } + // $ANTLR end "ruleref" + // Delegated rules @@ -881,30 +956,33 @@ public class CollectSymbols extends org.antlr.v4.runtime.tree.TreeFilter { public static final BitSet FOLLOW_rule_in_topdown120 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_ruleArg_in_topdown128 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_ruleReturns_in_topdown136 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_terminal_in_topdown144 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_finishRule_in_bottomup155 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SCOPE_in_globalScope169 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_globalScope171 = new BitSet(new long[]{0x0000000000010000L}); - public static final BitSet FOLLOW_ACTION_in_globalScope173 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_AT_in_action190 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_action194 = new BitSet(new long[]{0x0000000000000000L,0x0000000000800000L}); - public static final BitSet FOLLOW_ID_in_action197 = new BitSet(new long[]{0x0000000000010000L}); - public static final BitSet FOLLOW_ACTION_in_action199 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ASSIGN_in_tokenAlias222 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_tokenAlias226 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_tokenAlias228 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ID_in_tokenAlias239 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_RULE_in_rule265 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_rule269 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000001FFFFFFFFFL}); - public static final BitSet FOLLOW_RULE_in_finishRule291 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ARG_ACTION_in_ruleArg306 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_RETURNS_in_ruleReturns321 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_ruleReturns323 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_SCOPE_in_ruleScopeSpec344 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ACTION_in_ruleScopeSpec346 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_SCOPE_in_ruleScopeSpec354 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_ruleScopeSpec356 = new BitSet(new long[]{0x0000000000000008L,0x0000000000800000L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_terminal378 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal388 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ruleref_in_topdown144 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_terminal_in_topdown152 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_finishRule_in_bottomup163 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SCOPE_in_globalScope177 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_globalScope179 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_ACTION_in_globalScope181 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_AT_in_action198 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_action202 = new BitSet(new long[]{0x0000000000000000L,0x0000000000800000L}); + public static final BitSet FOLLOW_ID_in_action205 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_ACTION_in_action207 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ASSIGN_in_tokenAlias230 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_tokenAlias234 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_tokenAlias236 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ID_in_tokenAlias250 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_in_rule272 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_rule276 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000003FFFFFFFFFL}); + public static final BitSet FOLLOW_RULE_in_finishRule298 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleArg313 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RETURNS_in_ruleReturns328 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleReturns330 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_SCOPE_in_ruleScopeSpec351 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ACTION_in_ruleScopeSpec353 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_SCOPE_in_ruleScopeSpec361 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_ruleScopeSpec363 = new BitSet(new long[]{0x0000000000000008L,0x0000000000800000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_terminal385 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal395 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_REF_in_ruleref424 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleref426 = new BitSet(new long[]{0x0000000000000008L}); } \ No newline at end of file diff --git a/tool/src/org/antlr/v4/semantics/CollectSymbols.tokens b/tool/src/org/antlr/v4/semantics/CollectSymbols.tokens index 3e967ae63..2cc5f8089 100644 --- a/tool/src/org/antlr/v4/semantics/CollectSymbols.tokens +++ b/tool/src/org/antlr/v4/semantics/CollectSymbols.tokens @@ -1,6 +1,7 @@ +COMBINED=91 LT=43 STAR=48 -BACKTRACK_SEMPRED=95 +BACKTRACK_SEMPRED=96 DOUBLE_ANGLE_STRING_LITERAL=11 FORCED_ACTION=5 ARGLIST=89 @@ -10,7 +11,7 @@ SEMPRED=4 ACTION=16 TOKEN_REF=62 RULEMODIFIERS=74 -ST_RESULT=99 +ST_RESULT=100 RPAREN=41 RET=90 IMPORT=22 @@ -23,8 +24,8 @@ ACTION_CHAR_LITERAL=13 GRAMMAR=27 RULEACTIONS=75 WSCHARS=65 -INITACTION=91 -ALT_REWRITE=100 +INITACTION=92 +ALT_REWRITE=101 IMPLIES=42 RULE=72 RBRACE=61 @@ -35,7 +36,7 @@ THROWS=32 CHAR_RANGE=82 INT=64 EPSILON=83 -LIST=97 +LIST=98 COLONCOLON=37 WSNLCHARS=18 WS=70 @@ -47,7 +48,7 @@ CLOSURE=79 PARSER=25 DOLLAR=53 PROTECTED=28 -ELEMENT_OPTIONS=98 +ELEMENT_OPTIONS=99 NESTED_ACTION=15 FRAGMENT=23 ID=87 @@ -60,7 +61,7 @@ TREE=26 SCOPE=21 ETC=56 COMMA=38 -WILDCARD=96 +WILDCARD=97 DOC_COMMENT=6 PLUS=49 REWRITE_BLOCK=77 @@ -72,7 +73,7 @@ UNICODE_ESC=69 HEX_DIGIT=68 RANGE=55 TOKENS=20 -GATED_SEMPRED=93 +GATED_SEMPRED=94 RESULT=86 BANG=47 ACTION_STRING_LITERAL=12 @@ -86,8 +87,8 @@ COLON=36 QUESTION=46 FINALLY=34 TEMPLATE=35 -LABEL=92 -SYN_SEMPRED=94 +LABEL=93 +SYN_SEMPRED=95 ERRCHAR=71 BLOCK=76 ASSIGN=45 diff --git a/tool/src/org/antlr/v4/semantics/DefineSymbols.java b/tool/src/org/antlr/v4/semantics/DefineSymbols.java new file mode 100644 index 000000000..209768582 --- /dev/null +++ b/tool/src/org/antlr/v4/semantics/DefineSymbols.java @@ -0,0 +1,31 @@ +package org.antlr.v4.semantics; + +import org.antlr.v4.tool.Grammar; +import org.antlr.v4.tool.GrammarAST; +import org.antlr.v4.tool.Rule; + +/** */ +public class DefineSymbols { + Grammar g; + CollectSymbols collector; + + public DefineSymbols(Grammar g, CollectSymbols collector) { + this.g = g; + this.collector = collector; + } + + public void define() { + for (Rule r : collector.rules) { + if ( g.getRule(r.name)==null ) { + g.defineRule(r); + } + else { + //error + } + } + + for (GrammarAST t : collector.actions) { + + } + } +} diff --git a/tool/src/org/antlr/v4/semantics/SemanticsPipeline.java b/tool/src/org/antlr/v4/semantics/SemanticPipeline.java similarity index 83% rename from tool/src/org/antlr/v4/semantics/SemanticsPipeline.java rename to tool/src/org/antlr/v4/semantics/SemanticPipeline.java index 59a64c882..ec60afdd7 100644 --- a/tool/src/org/antlr/v4/semantics/SemanticsPipeline.java +++ b/tool/src/org/antlr/v4/semantics/SemanticPipeline.java @@ -8,7 +8,7 @@ import org.antlr.v4.tool.ErrorManager; import org.antlr.v4.tool.Grammar; /** */ -public class SemanticsPipeline { +public class SemanticPipeline { public void process(Grammar g) { // VALIDATE AST STRUCTURE // use buffered node stream as we will look around in stream @@ -38,15 +38,18 @@ public class SemanticsPipeline { } } - // CHECK FOR SYMBOL COLLISIONS - // DEFINE SYMBOLS + // COLLECT SYMBOLS: RULES, ACTIONS, TERMINALS, ... nodes.reset(); - CollectSymbols sym = new CollectSymbols(nodes,g); - sym.downup(g.ast); - System.out.println("rules="+sym.rules); - System.out.println("terminals="+sym.terminals); - System.out.println("aliases="+sym.aliases); - System.out.println("aliases="+sym.actions); + CollectSymbols collector = new CollectSymbols(nodes,g); + collector.downup(g.ast); // no side-effects; compute lists + + // DEFINE RULES, ACTIONS +// DefineSymbols def = new DefineSymbols(g, collector); +// def.define(); // updates g + + // CHECK FOR SYMBOL COLLISIONS + SymbolChecks symcheck = new SymbolChecks(g, collector); + symcheck.examine(); // ASSIGN TOKEN TYPES diff --git a/tool/src/org/antlr/v4/semantics/SymbolChecks.java b/tool/src/org/antlr/v4/semantics/SymbolChecks.java new file mode 100644 index 000000000..95f8304c7 --- /dev/null +++ b/tool/src/org/antlr/v4/semantics/SymbolChecks.java @@ -0,0 +1,69 @@ +package org.antlr.v4.semantics; + +import org.antlr.v4.tool.*; + +import java.util.*; + +public class SymbolChecks { + Grammar g; + CollectSymbols collector; + Map nameToRuleMap = new HashMap(); + Map> scopeToActionNames = new HashMap>(); + + public SymbolChecks(Grammar g, CollectSymbols collector) { + this.g = g; + this.collector = collector; + System.out.println("rules="+collector.rules); + System.out.println("rulerefs="+collector.rulerefs); + System.out.println("terminals="+collector.terminals); + System.out.println("strings="+collector.strings); + System.out.println("aliases="+collector.aliases); + System.out.println("actions="+collector.actions); + } + + public void examine() { + checkRuleRedefinitions(collector.rules); + checkActionRedefinitions(collector.actions); + } + + public void checkRuleRedefinitions(List rules) { + for (Rule r : collector.rules) { + if ( nameToRuleMap.get(r.name)==null ) { + nameToRuleMap.put(r.name, r); + } + else { + GrammarAST idNode = (GrammarAST)r.ast.getChild(0); + ErrorManager.grammarError(ErrorType.RULE_REDEFINITION, + g.fileName, idNode.token, r.name); + } + } + } + + public void checkActionRedefinitions(List actions) { + String scope = g.getDefaultActionScope(); + String name = null; + GrammarAST nameNode = null; + for (GrammarAST ampersandAST : actions) { + nameNode = (GrammarAST)ampersandAST.getChild(0); + if ( ampersandAST.getChildCount()==2 ) { + name = nameNode.getText(); + } + else { + scope = nameNode.getText(); + name = ampersandAST.getChild(1).getText(); + } + Set scopeActions = scopeToActionNames.get(scope); + if ( scopeActions==null ) { // init scope + scopeActions = new HashSet(); + scopeToActionNames.put(scope, scopeActions); + } + if ( !scopeActions.contains(name) ) { + scopeActions.add(name); + } + else { + ErrorManager.grammarError(ErrorType.ACTION_REDEFINITION, + g.fileName, nameNode.token, name); + } + } + } +} diff --git a/tool/src/org/antlr/v4/semantics/SymbolCollisionChecks.java b/tool/src/org/antlr/v4/semantics/SymbolCollisionChecks.java deleted file mode 100644 index 3c500b29b..000000000 --- a/tool/src/org/antlr/v4/semantics/SymbolCollisionChecks.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.antlr.v4.semantics; - -import org.antlr.v4.tool.GrammarAST; -import org.antlr.v4.tool.Rule; - -import java.util.List; - -/** check for the following errors: - * - * RULE_REDEFINITION -RULE_HAS_NO_ARGS -UNDEFINED_RULE_REF -MISSING_RULE_ARGS -SYMBOL_CONFLICTS_WITH_GLOBAL_SCOPE -LABEL_CONFLICTS_WITH_RULE -LABEL_CONFLICTS_WITH_TOKEN -LABEL_TYPE_CONFLICT -ACTION_REDEFINITION -NO_SUCH_RULE_IN_SCOPE -TOKEN_ALIAS_CONFLICT -TOKEN_ALIAS_REASSIGNMENT - - The -*/ -public class SymbolCollisionChecks { - public List rules; - public List terminals; - public List aliases; - public List scopes; - public List actions; - - public void check(List rules, - List terminals, - List aliases, - List scopes, - List actions) - { - checkRuleRedefinition(rules); - } - - public void checkRuleRedefinition(List rules) { - - } -} diff --git a/tool/src/org/antlr/v4/tool/Grammar.java b/tool/src/org/antlr/v4/tool/Grammar.java index 5c988ca93..56ed53903 100644 --- a/tool/src/org/antlr/v4/tool/Grammar.java +++ b/tool/src/org/antlr/v4/tool/Grammar.java @@ -27,12 +27,20 @@ public class Grammar { public String fileName; /** Was this created from a COMBINED grammar? */ - public boolean implicitLexer; + public Grammar implicitLexer; + public Grammar implicitLexerOwner; /** If we're imported, who imported us? If null, implies grammar is root */ public Grammar parent; protected List importedGrammars; - protected Map rules = new HashMap(); + protected Map rules = new LinkedHashMap(); + + /** Map a scope to a map of name:action pairs. + * The code generator will use this to fill holes in the output files. + * I track the AST node for the action in case I need the line number + * for errors. + */ + Map> actions = new HashMap>(); /** A list of options specified at the grammar level such as language=Java. */ protected Map options; @@ -86,10 +94,23 @@ public class Grammar { } } - public Rule getRule(String name) { - return null; + public void defineAction(GrammarAST ampersandAST) { + String scope = null; + String name = null; + if ( ampersandAST.getChildCount()==1 ) { + name = ampersandAST.getChild(0).getText(); + } + else { + scope = ampersandAST.getChild(0).getText(); + name = ampersandAST.getChild(1).getText(); + Map f = actions.get(scope); + } } + public void defineRule(Rule r) { rules.put(r.name, r); } + + public Rule getRule(String name) { return rules.get(name); } + /** Get list of all delegates from all grammars in the delegate subtree of g. * The grammars are in delegation tree preorder. Don't include ourselves * in list as we're not a delegate of ourselves. @@ -160,7 +181,7 @@ public class Grammar { qualifiedName = buf.toString(); } if ( getType()==ANTLRParser.COMBINED || - (getType()==ANTLRParser.LEXER && implicitLexer) ) + (getType()==ANTLRParser.LEXER && implicitLexer!=null) ) { suffix = Grammar.getGrammarTypeToFileNameSuffix(getType()); } @@ -176,6 +197,23 @@ public class Grammar { return null; } + /** Given a grammar type, what should be the default action scope? + * If I say @members in a COMBINED grammar, for example, the + * default scope should be "parser". + */ + public String getDefaultActionScope() { + switch ( getType() ) { + case ANTLRParser.LEXER : + return "lexer"; + case ANTLRParser.PARSER : + case ANTLRParser.COMBINED : + return "parser"; + case ANTLRParser.TREE : + return "treeparser"; + } + return null; + } + public int getType() { if ( ast!=null ) return ast.grammarType; return 0; diff --git a/tool/test/org/antlr/v4/test/TestBasicSemanticErrors.java b/tool/test/org/antlr/v4/test/TestBasicSemanticErrors.java index 4e9bc0071..7a3891dbb 100644 --- a/tool/test/org/antlr/v4/test/TestBasicSemanticErrors.java +++ b/tool/test/org/antlr/v4/test/TestBasicSemanticErrors.java @@ -1,7 +1,7 @@ package org.antlr.v4.test; import org.antlr.runtime.RecognitionException; -import org.antlr.v4.semantics.SemanticsPipeline; +import org.antlr.v4.semantics.SemanticPipeline; import org.antlr.v4.tool.ErrorManager; import org.antlr.v4.tool.Grammar; import org.junit.Test; @@ -93,7 +93,7 @@ public class TestBasicSemanticErrors extends BaseTest { String fileName = lines[0].substring(lastSpace+1, semi)+".g"; Grammar g = new Grammar(fileName, input); g.loadImportedGrammars(); - SemanticsPipeline sem = new SemanticsPipeline(); + SemanticPipeline sem = new SemanticPipeline(); sem.process(g); } catch (RecognitionException re) {