diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg index 20cbc562e..90244727a 100644 --- a/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg +++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg @@ -74,7 +74,7 @@ LL1StarBlockSingleAlt(choice, expr, alts, preamble) ::= << while ( ) { - = input.LA(1); + > @@ -95,12 +95,11 @@ while (true) { } >> -//LL1PlusBlockSingleAlt ::= LL1PlusBlock - LL1PlusBlockSingleAlt(choice, expr, alts, preamble) ::= << do { + // TODO: only if !set = input.LA(1); } while ( ); >> @@ -110,7 +109,7 @@ TestSet(s) ::= << >> TestSetInline(s) ::= << -==}; separator=" || "> +==}; separator=" || "> >> cases(ttypes) ::= << diff --git a/tool/src/org/antlr/v4/codegen/CodeGenPipeline.java b/tool/src/org/antlr/v4/codegen/CodeGenPipeline.java index 69c13531d..1c79b3247 100644 --- a/tool/src/org/antlr/v4/codegen/CodeGenPipeline.java +++ b/tool/src/org/antlr/v4/codegen/CodeGenPipeline.java @@ -17,7 +17,7 @@ public class CodeGenPipeline { } void processParser() { - ParserGenerator gen = new ParserGenerator(g); + CodeGenerator gen = new CodeGenerator(g); gen.write(); } diff --git a/tool/src/org/antlr/v4/codegen/CodeGenerator.java b/tool/src/org/antlr/v4/codegen/CodeGenerator.java index 90e63f5f5..a12322078 100644 --- a/tool/src/org/antlr/v4/codegen/CodeGenerator.java +++ b/tool/src/org/antlr/v4/codegen/CodeGenerator.java @@ -1,22 +1,16 @@ package org.antlr.v4.codegen; -import org.antlr.v4.automata.DFA; -import org.antlr.v4.codegen.src.*; -import org.antlr.v4.misc.IntSet; -import org.antlr.v4.misc.IntervalSet; -import org.antlr.v4.parse.ANTLRParser; -import org.antlr.v4.tool.BlockAST; +import org.antlr.v4.codegen.src.OutputModelObject; import org.antlr.v4.tool.ErrorType; import org.antlr.v4.tool.Grammar; -import org.antlr.v4.tool.GrammarAST; import org.stringtemplate.v4.*; import java.io.IOException; import java.io.Writer; -import java.util.List; -/** */ -public abstract class CodeGenerator { +/** General controller for code gen. Can instantiate sub generator(s). + */ +public class CodeGenerator { public static final String TEMPLATE_ROOT = "org/antlr/v4/tool/templates/codegen"; public static final String VOCAB_FILE_EXTENSION = ".tokens"; public final static String vocabFilePattern = @@ -26,7 +20,6 @@ public abstract class CodeGenerator { public Grammar g; public Target target; public STGroup templates; - public ParserFile outputModel; public int lineWidth = 72; @@ -74,14 +67,14 @@ public abstract class CodeGenerator { // } } - /** The parser, tree parser, etc... variants know to build the model */ - public abstract OutputModelObject buildOutputModel(); - public void write() { - OutputModelObject root = buildOutputModel(); + OutputModelFactory factory = null; + if ( g.isParser() ) factory = new ParserFactory(this); + // ... + OutputModelObject outputModel = factory.buildOutputModel(); OutputModelWalker walker = new OutputModelWalker(g.tool, templates); - ST outputFileST = walker.walk(root); + ST outputFileST = walker.walk(outputModel); // WRITE FILES try { @@ -107,42 +100,6 @@ public abstract class CodeGenerator { } } - public Choice getChoiceBlock(BlockAST blkAST, GrammarAST ebnfRoot, List alts) { - // TODO: assumes LL1 - int ebnf = 0; - if ( ebnfRoot!=null ) ebnf = ebnfRoot.getType(); - Choice c = null; - switch ( ebnf ) { - case ANTLRParser.OPTIONAL : - if ( alts.size()==1 ) c = new LL1OptionalBlockSingleAlt(this, ebnfRoot, alts); - else c = new LL1OptionalBlock(this, ebnfRoot, alts); - break; - case ANTLRParser.CLOSURE : - if ( alts.size()==1 ) c = new LL1StarBlockSingleAlt(this, ebnfRoot, alts); - else c = new LL1StarBlock(this, ebnfRoot, alts); - break; - case ANTLRParser.POSITIVE_CLOSURE : - if ( alts.size()==1 ) c = new LL1PlusBlockSingleAlt(this, ebnfRoot, alts); - else c = new LL1PlusBlock(this, ebnfRoot, alts); - break; - default : - c = new LL1Choice(this, blkAST, alts); - break; - } - return c; - } - - public OutputModelObject getLL1Test(Choice choice, IntervalSet look, GrammarAST blkAST) { - OutputModelObject expr; - if ( look.size() < target.getInlineTestsVsBitsetThreshold() ) { - expr = new TestSetInline(this, choice, blkAST, look); - } - else { - expr = new TestSet(this, blkAST, look); - } - return expr; - } - public void write(ST code, String fileName) throws IOException { long start = System.currentTimeMillis(); Writer w = g.tool.getOutputFile(g, fileName); @@ -174,37 +131,4 @@ public abstract class CodeGenerator { return g.name+VOCAB_FILE_EXTENSION; } - public DFADef defineDFA(GrammarAST ast, DFA dfa) { - return null; -// DFADef d = new DFADef(name, dfa); -// outputModel.dfaDefs.add(d); - } - - public BitSetDef defineFollowBitSet(GrammarAST ast, IntSet set) { - String inRuleName = ast.nfaState.rule.name; - String elementName = ast.getText(); // assume rule ref - if ( ast.getType() == ANTLRParser.TOKEN_REF ) { - elementName = target.getTokenTypeAsTargetLabel(g, g.tokenNameToTypeMap.get(elementName)); - } - String name = "FOLLOW_"+elementName+"_in_"+inRuleName+"_"+ast.token.getTokenIndex(); - BitSetDef b = new BitSetDef(this, name, set); - outputModel.bitSetDefs.add(b); - return b; - } - - public BitSetDef defineTestBitSet(GrammarAST ast, IntSet set) { - String inRuleName = ast.nfaState.rule.name; - String name = "LOOK_in_"+inRuleName+"_"+ast.token.getTokenIndex(); - BitSetDef b = new BitSetDef(this, name, set); - outputModel.bitSetDefs.add(b); - return b; - } - - public String getLoopLabel(GrammarAST ast) { - return "loop"+ ast.token.getTokenIndex(); - } - - public String getLoopCounter(GrammarAST ast) { - return "cnt"+ ast.token.getTokenIndex(); - } } diff --git a/tool/src/org/antlr/v4/codegen/OutputModelFactory.java b/tool/src/org/antlr/v4/codegen/OutputModelFactory.java new file mode 100644 index 000000000..110cb2c45 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/OutputModelFactory.java @@ -0,0 +1,109 @@ +package org.antlr.v4.codegen; + +import org.antlr.v4.automata.DFA; +import org.antlr.v4.codegen.src.*; +import org.antlr.v4.misc.IntSet; +import org.antlr.v4.misc.IntervalSet; +import org.antlr.v4.parse.ANTLRParser; +import org.antlr.v4.tool.BlockAST; +import org.antlr.v4.tool.Grammar; +import org.antlr.v4.tool.GrammarAST; + +import java.util.List; + +/** */ +public abstract class OutputModelFactory { + public Grammar g; + public CodeGenerator gen; + + public OutputModelObject root; + + protected OutputModelFactory(CodeGenerator gen) { + this.gen = gen; + this.g = gen.g; + } + + public abstract OutputModelObject buildOutputModel(); + + public abstract ParserFile outputFile(String fileName); + + public abstract Parser parser(ParserFile pf); + + public CodeBlock epsilon() { return new CodeBlock(this); } + + public CodeBlock alternative(List elems) { return new CodeBlock(this, elems); } + + public SrcOp action(GrammarAST ast) { return new Action(this, ast); } + public SrcOp sempred(GrammarAST ast) { return new SemPred(this, ast); } + + public Choice getChoiceBlock(BlockAST blkAST, GrammarAST ebnfRoot, List alts) { + // TODO: assumes LL1 + int ebnf = 0; + if ( ebnfRoot!=null ) ebnf = ebnfRoot.getType(); + Choice c = null; + switch ( ebnf ) { + case ANTLRParser.OPTIONAL : + if ( alts.size()==1 ) c = new LL1OptionalBlockSingleAlt(this, ebnfRoot, alts); + else c = new LL1OptionalBlock(this, ebnfRoot, alts); + break; + case ANTLRParser.CLOSURE : + if ( alts.size()==1 ) c = new LL1StarBlockSingleAlt(this, ebnfRoot, alts); + else c = new LL1StarBlock(this, ebnfRoot, alts); + break; + case ANTLRParser.POSITIVE_CLOSURE : + if ( alts.size()==1 ) c = new LL1PlusBlockSingleAlt(this, ebnfRoot, alts); + else c = new LL1PlusBlock(this, ebnfRoot, alts); + break; + default : + c = new LL1Choice(this, blkAST, alts); + break; + } + return c; + } + + + public abstract void defineBitSet(BitSetDef b); + + public OutputModelObject getLL1Test(IntervalSet look, GrammarAST blkAST) { + OutputModelObject expr; + if ( look.size() < gen.target.getInlineTestsVsBitsetThreshold() ) { + expr = new TestSetInline(this, blkAST, look); + } + else { + expr = new TestSet(this, blkAST, look); + } + return expr; + } + + public DFADef defineDFA(GrammarAST ast, DFA dfa) { + return null; +// DFADef d = new DFADef(name, dfa); +// outputModel.dfaDefs.add(d); + } + + public String getLoopLabel(GrammarAST ast) { + return "loop"+ ast.token.getTokenIndex(); + } + + public String getLoopCounter(GrammarAST ast) { + return "cnt"+ ast.token.getTokenIndex(); + } + + public BitSetDef createFollowBitSet(GrammarAST ast, IntSet set) { + String inRuleName = ast.nfaState.rule.name; + String elementName = ast.getText(); // assume rule ref + if ( ast.getType() == ANTLRParser.TOKEN_REF ) { + elementName = gen.target.getTokenTypeAsTargetLabel(g, g.tokenNameToTypeMap.get(elementName)); + } + String name = "FOLLOW_"+elementName+"_in_"+inRuleName+"_"+ast.token.getTokenIndex(); + BitSetDef b = new BitSetDef(this, name, set); + return b; + } + + public BitSetDef createTestBitSet(GrammarAST ast, IntSet set) { + String inRuleName = ast.nfaState.rule.name; + String name = "LOOK_in_"+inRuleName+"_"+ast.token.getTokenIndex(); + BitSetDef b = new BitSetDef(this, name, set); + return b; + } +} diff --git a/tool/src/org/antlr/v4/codegen/ParserFactory.java b/tool/src/org/antlr/v4/codegen/ParserFactory.java new file mode 100644 index 000000000..31af94858 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/ParserFactory.java @@ -0,0 +1,45 @@ +package org.antlr.v4.codegen; + +import org.antlr.v4.codegen.src.*; + +import java.util.Stack; + +/** */ +public class ParserFactory extends OutputModelFactory { +// public static final Map modelToTemplateMap = new HashMap() {{ +// put(ParserFile.class, "parserFile"); +// put(Parser.class, "parser"); +// put(RuleFunction.class, "parserFunction"); +// put(DFADef.class, "DFA"); +// put(CodeBlock.class, "codeBlock"); +// put(LL1Choice.class, "switch"); +// put(MatchToken.class, "matchToken"); +// }}; + + // Context ptrs + ParserFile file; + Parser parser; + Stack currentRule; + + public ParserFactory(CodeGenerator gen) { + super(gen); + } + + public OutputModelObject buildOutputModel() { + root = file = new ParserFile(this, gen.getRecognizerFileName()); + file.parser = new Parser(this, file); + + // side-effect: fills pf dfa and bitset defs + return file; + } + + public ParserFile outputFile(String fileName) { + return new ParserFile(this, fileName); + } + + public Parser parser(ParserFile pf) { + return new Parser(this, pf); + } + + public void defineBitSet(BitSetDef b) { file.defineBitSet(b); } +} diff --git a/tool/src/org/antlr/v4/codegen/ParserGenerator.java b/tool/src/org/antlr/v4/codegen/ParserGenerator.java deleted file mode 100644 index c73e454bd..000000000 --- a/tool/src/org/antlr/v4/codegen/ParserGenerator.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.antlr.v4.codegen; - -import org.antlr.v4.codegen.src.OutputModelObject; -import org.antlr.v4.codegen.src.Parser; -import org.antlr.v4.codegen.src.ParserFile; -import org.antlr.v4.tool.Grammar; - -/** */ -public class ParserGenerator extends CodeGenerator { -// public static final Map modelToTemplateMap = new HashMap() {{ -// put(ParserFile.class, "parserFile"); -// put(Parser.class, "parser"); -// put(RuleFunction.class, "parserFunction"); -// put(DFADef.class, "DFA"); -// put(CodeBlock.class, "codeBlock"); -// put(LL1Choice.class, "switch"); -// put(MatchToken.class, "matchToken"); -// }}; - - public ParserGenerator(Grammar g) { - super(g); - } - - public OutputModelObject buildOutputModel() { - ParserFile pf = new ParserFile(this, getRecognizerFileName()); - outputModel = pf; - pf.parser = new Parser(this, pf); // side-effect: fills pf dfa and bitset defs - // at this point, model is built - return outputModel; - } -} diff --git a/tool/src/org/antlr/v4/codegen/SourceGenTriggers.g b/tool/src/org/antlr/v4/codegen/SourceGenTriggers.g index 55b5d2075..8942e108c 100644 --- a/tool/src/org/antlr/v4/codegen/SourceGenTriggers.g +++ b/tool/src/org/antlr/v4/codegen/SourceGenTriggers.g @@ -3,7 +3,6 @@ options { language = Java; tokenVocab = ANTLRParser; ASTLabelType = GrammarAST; -// superClass = NFABytecodeGenerator; } @header { @@ -17,10 +16,10 @@ import java.util.HashMap; @members { // TODO: identical grammar to NFABytecodeTriggers; would be nice to combine - public CodeGenerator gen; - public SourceGenTriggers(TreeNodeStream input, CodeGenerator gen) { + public OutputModelFactory factory; + public SourceGenTriggers(TreeNodeStream input, OutputModelFactory factory) { this(input); - this.gen = gen; + this.factory = factory; } } @@ -31,23 +30,23 @@ block[GrammarAST label, GrammarAST ebnfRoot] returns [SrcOp omo] ) { if ( alts.size()==1 && ebnfRoot==null) return alts.get(0); - $omo = gen.getChoiceBlock((BlockAST)$blk, $ebnfRoot, alts); + $omo = factory.getChoiceBlock((BlockAST)$blk, $ebnfRoot, alts); } ; alternative returns [CodeBlock omo] @init {List elems = new ArrayList();} : ^(ALT_REWRITE a=alternative .) - | ^(ALT EPSILON) {$omo = new CodeBlock(gen);} - | ^( ALT ( element {elems.add($element.omo);} )+ ) {$omo = new CodeBlock(gen, elems);} + | ^(ALT EPSILON) {$omo = factory.epsilon();} + | ^( ALT ( element {elems.add($element.omo);} )+ ) {$omo = factory.alternative(elems);} ; element returns [SrcOp omo] : labeledElement {$omo = $labeledElement.omo;} | atom[null] {$omo = $atom.omo;} | ebnf {$omo = $ebnf.omo;} - | ACTION {$omo = new Action(gen, $ACTION);} - | SEMPRED {$omo = new SemPred(gen, $SEMPRED);} + | ACTION {$omo = factory.action($ACTION);} + | SEMPRED {$omo = factory.sempred($SEMPRED);} | GATED_SEMPRED | treeSpec ; @@ -102,8 +101,8 @@ notSet[GrammarAST label] returns [SrcOp omo] ruleref[GrammarAST label] returns [SrcOp omo] : ^(ROOT ^(RULE_REF ARG_ACTION?)) - | ^(BANG ^(RULE_REF ARG_ACTION?)) {$omo = new InvokeRule(gen, $RULE_REF, $label);} - | ^(RULE_REF ARG_ACTION?) {$omo = new InvokeRule(gen, $RULE_REF, $label);} + | ^(BANG ^(RULE_REF ARG_ACTION?)) {$omo = new InvokeRule(factory, $RULE_REF, $label);} + | ^(RULE_REF ARG_ACTION?) {$omo = new InvokeRule(factory, $RULE_REF, $label);} ; range[GrammarAST label] returns [SrcOp omo] @@ -111,11 +110,11 @@ range[GrammarAST label] returns [SrcOp omo] ; terminal[GrammarAST label] returns [MatchToken omo] - : ^(STRING_LITERAL .) {$omo = new MatchToken(gen, (TerminalAST)$STRING_LITERAL, $label);} - | STRING_LITERAL {$omo = new MatchToken(gen, (TerminalAST)$STRING_LITERAL, $label);} - | ^(TOKEN_REF ARG_ACTION .) {$omo = new MatchToken(gen, (TerminalAST)$TOKEN_REF, $label);} - | ^(TOKEN_REF .) {$omo = new MatchToken(gen, (TerminalAST)$TOKEN_REF, $label);} - | TOKEN_REF {$omo = new MatchToken(gen, (TerminalAST)$TOKEN_REF, $label);} + : ^(STRING_LITERAL .) {$omo = new MatchToken(factory, (TerminalAST)$STRING_LITERAL, $label);} + | STRING_LITERAL {$omo = new MatchToken(factory, (TerminalAST)$STRING_LITERAL, $label);} + | ^(TOKEN_REF ARG_ACTION .) {$omo = new MatchToken(factory, (TerminalAST)$TOKEN_REF, $label);} + | ^(TOKEN_REF .) {$omo = new MatchToken(factory, (TerminalAST)$TOKEN_REF, $label);} + | TOKEN_REF {$omo = new MatchToken(factory, (TerminalAST)$TOKEN_REF, $label);} | ^(ROOT terminal[label]) | ^(BANG terminal[label]) ; diff --git a/tool/src/org/antlr/v4/codegen/SourceGenTriggers.java b/tool/src/org/antlr/v4/codegen/SourceGenTriggers.java index d9d04848c..e973f579a 100644 --- a/tool/src/org/antlr/v4/codegen/SourceGenTriggers.java +++ b/tool/src/org/antlr/v4/codegen/SourceGenTriggers.java @@ -1,11 +1,14 @@ -// $ANTLR ${project.version} ${buildNumber} SourceGenTriggers.g 2010-05-10 13:33:58 +// $ANTLR ${project.version} ${buildNumber} SourceGenTriggers.g 2010-05-12 14:22:11 package org.antlr.v4.codegen; import org.antlr.runtime.*; import org.antlr.runtime.tree.TreeNodeStream; import org.antlr.runtime.tree.TreeParser; -import org.antlr.v4.codegen.src.*; +import org.antlr.v4.codegen.src.CodeBlock; +import org.antlr.v4.codegen.src.InvokeRule; +import org.antlr.v4.codegen.src.MatchToken; +import org.antlr.v4.codegen.src.SrcOp; import org.antlr.v4.tool.BlockAST; import org.antlr.v4.tool.GrammarAST; import org.antlr.v4.tool.TerminalAST; @@ -136,16 +139,16 @@ public class SourceGenTriggers extends TreeParser { // TODO: identical grammar to NFABytecodeTriggers; would be nice to combine - public CodeGenerator gen; - public SourceGenTriggers(TreeNodeStream input, CodeGenerator gen) { + public OutputModelFactory factory; + public SourceGenTriggers(TreeNodeStream input, OutputModelFactory factory) { this(input); - this.gen = gen; + this.factory = factory; } // $ANTLR start "block" - // SourceGenTriggers.g:27:1: block[GrammarAST label, GrammarAST ebnfRoot] returns [SrcOp omo] : ^(blk= BLOCK ( ^( OPTIONS ( . )+ ) )? ( alternative )+ ) ; + // SourceGenTriggers.g:26:1: block[GrammarAST label, GrammarAST ebnfRoot] returns [SrcOp omo] : ^(blk= BLOCK ( ^( OPTIONS ( . )+ ) )? ( alternative )+ ) ; public final SrcOp block(GrammarAST label, GrammarAST ebnfRoot) throws RecognitionException { SrcOp omo = null; @@ -154,13 +157,13 @@ public class SourceGenTriggers extends TreeParser { try { - // SourceGenTriggers.g:28:5: ( ^(blk= BLOCK ( ^( OPTIONS ( . )+ ) )? ( alternative )+ ) ) - // SourceGenTriggers.g:28:7: ^(blk= BLOCK ( ^( OPTIONS ( . )+ ) )? ( alternative )+ ) + // SourceGenTriggers.g:27:5: ( ^(blk= BLOCK ( ^( OPTIONS ( . )+ ) )? ( alternative )+ ) ) + // SourceGenTriggers.g:27:7: ^(blk= BLOCK ( ^( OPTIONS ( . )+ ) )? ( alternative )+ ) { - blk=(GrammarAST)match(input,BLOCK,FOLLOW_BLOCK_in_block72); + blk=(GrammarAST)match(input,BLOCK,FOLLOW_BLOCK_in_block71); match(input, Token.DOWN, null); - // SourceGenTriggers.g:28:20: ( ^( OPTIONS ( . )+ ) )? + // SourceGenTriggers.g:27:20: ( ^( OPTIONS ( . )+ ) )? int alt2=2; int LA2_0 = input.LA(1); @@ -169,12 +172,12 @@ public class SourceGenTriggers extends TreeParser { } switch (alt2) { case 1 : - // SourceGenTriggers.g:28:21: ^( OPTIONS ( . )+ ) + // SourceGenTriggers.g:27:21: ^( OPTIONS ( . )+ ) { - match(input,OPTIONS,FOLLOW_OPTIONS_in_block76); + match(input,OPTIONS,FOLLOW_OPTIONS_in_block75); match(input, Token.DOWN, null); - // SourceGenTriggers.g:28:31: ( . )+ + // SourceGenTriggers.g:27:31: ( . )+ int cnt1=0; loop1: do { @@ -191,7 +194,7 @@ public class SourceGenTriggers extends TreeParser { switch (alt1) { case 1 : - // SourceGenTriggers.g:28:31: . + // SourceGenTriggers.g:27:31: . { matchAny(input); @@ -216,7 +219,7 @@ public class SourceGenTriggers extends TreeParser { } List alts = new ArrayList(); - // SourceGenTriggers.g:30:7: ( alternative )+ + // SourceGenTriggers.g:29:7: ( alternative )+ int cnt3=0; loop3: do { @@ -230,9 +233,9 @@ public class SourceGenTriggers extends TreeParser { switch (alt3) { case 1 : - // SourceGenTriggers.g:30:9: alternative + // SourceGenTriggers.g:29:9: alternative { - pushFollow(FOLLOW_alternative_in_block96); + pushFollow(FOLLOW_alternative_in_block95); alternative1=alternative(); state._fsp--; @@ -255,7 +258,7 @@ public class SourceGenTriggers extends TreeParser { match(input, Token.UP, null); if ( alts.size()==1 && ebnfRoot==null) return alts.get(0); - omo = gen.getChoiceBlock((BlockAST)blk, ebnfRoot, alts); + omo = factory.getChoiceBlock((BlockAST)blk, ebnfRoot, alts); } @@ -273,7 +276,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "alternative" - // SourceGenTriggers.g:38:1: alternative returns [CodeBlock omo] : ( ^( ALT_REWRITE a= alternative . ) | ^( ALT EPSILON ) | ^( ALT ( element )+ ) ); + // SourceGenTriggers.g:37:1: alternative returns [CodeBlock omo] : ( ^( ALT_REWRITE a= alternative . ) | ^( ALT EPSILON ) | ^( ALT ( element )+ ) ); public final CodeBlock alternative() throws RecognitionException { CodeBlock omo = null; @@ -284,7 +287,7 @@ public class SourceGenTriggers extends TreeParser { List elems = new ArrayList(); try { - // SourceGenTriggers.g:40:5: ( ^( ALT_REWRITE a= alternative . ) | ^( ALT EPSILON ) | ^( ALT ( element )+ ) ) + // SourceGenTriggers.g:39:5: ( ^( ALT_REWRITE a= alternative . ) | ^( ALT EPSILON ) | ^( ALT ( element )+ ) ) int alt5=3; int LA5_0 = input.LA(1); @@ -325,12 +328,12 @@ public class SourceGenTriggers extends TreeParser { } switch (alt5) { case 1 : - // SourceGenTriggers.g:40:7: ^( ALT_REWRITE a= alternative . ) + // SourceGenTriggers.g:39:7: ^( ALT_REWRITE a= alternative . ) { - match(input,ALT_REWRITE,FOLLOW_ALT_REWRITE_in_alternative142); + match(input,ALT_REWRITE,FOLLOW_ALT_REWRITE_in_alternative141); match(input, Token.DOWN, null); - pushFollow(FOLLOW_alternative_in_alternative146); + pushFollow(FOLLOW_alternative_in_alternative145); a=alternative(); state._fsp--; @@ -342,25 +345,25 @@ public class SourceGenTriggers extends TreeParser { } break; case 2 : - // SourceGenTriggers.g:41:7: ^( ALT EPSILON ) + // SourceGenTriggers.g:40:7: ^( ALT EPSILON ) { - match(input,ALT,FOLLOW_ALT_in_alternative159); + match(input,ALT,FOLLOW_ALT_in_alternative158); match(input, Token.DOWN, null); - match(input,EPSILON,FOLLOW_EPSILON_in_alternative161); + match(input,EPSILON,FOLLOW_EPSILON_in_alternative160); match(input, Token.UP, null); - omo = new CodeBlock(gen); + omo = factory.epsilon(); } break; case 3 : - // SourceGenTriggers.g:42:9: ^( ALT ( element )+ ) + // SourceGenTriggers.g:41:9: ^( ALT ( element )+ ) { - match(input,ALT,FOLLOW_ALT_in_alternative176); + match(input,ALT,FOLLOW_ALT_in_alternative175); match(input, Token.DOWN, null); - // SourceGenTriggers.g:42:16: ( element )+ + // SourceGenTriggers.g:41:16: ( element )+ int cnt4=0; loop4: do { @@ -374,9 +377,9 @@ public class SourceGenTriggers extends TreeParser { switch (alt4) { case 1 : - // SourceGenTriggers.g:42:18: element + // SourceGenTriggers.g:41:18: element { - pushFollow(FOLLOW_element_in_alternative180); + pushFollow(FOLLOW_element_in_alternative179); element2=element(); state._fsp--; @@ -397,7 +400,7 @@ public class SourceGenTriggers extends TreeParser { match(input, Token.UP, null); - omo = new CodeBlock(gen, elems); + omo = factory.alternative(elems); } break; @@ -416,7 +419,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "element" - // SourceGenTriggers.g:45:1: element returns [SrcOp omo] : ( labeledElement | atom[null] | ebnf | ACTION | SEMPRED | GATED_SEMPRED | treeSpec ); + // SourceGenTriggers.g:44:1: element returns [SrcOp omo] : ( labeledElement | atom[null] | ebnf | ACTION | SEMPRED | GATED_SEMPRED | treeSpec ); public final SrcOp element() throws RecognitionException { SrcOp omo = null; @@ -430,14 +433,14 @@ public class SourceGenTriggers extends TreeParser { try { - // SourceGenTriggers.g:46:2: ( labeledElement | atom[null] | ebnf | ACTION | SEMPRED | GATED_SEMPRED | treeSpec ) + // SourceGenTriggers.g:45:2: ( labeledElement | atom[null] | ebnf | ACTION | SEMPRED | GATED_SEMPRED | treeSpec ) int alt6=7; alt6 = dfa6.predict(input); switch (alt6) { case 1 : - // SourceGenTriggers.g:46:4: labeledElement + // SourceGenTriggers.g:45:4: labeledElement { - pushFollow(FOLLOW_labeledElement_in_element207); + pushFollow(FOLLOW_labeledElement_in_element206); labeledElement3=labeledElement(); state._fsp--; @@ -447,9 +450,9 @@ public class SourceGenTriggers extends TreeParser { } break; case 2 : - // SourceGenTriggers.g:47:4: atom[null] + // SourceGenTriggers.g:46:4: atom[null] { - pushFollow(FOLLOW_atom_in_element218); + pushFollow(FOLLOW_atom_in_element217); atom4=atom(null); state._fsp--; @@ -459,9 +462,9 @@ public class SourceGenTriggers extends TreeParser { } break; case 3 : - // SourceGenTriggers.g:48:4: ebnf + // SourceGenTriggers.g:47:4: ebnf { - pushFollow(FOLLOW_ebnf_in_element231); + pushFollow(FOLLOW_ebnf_in_element230); ebnf5=ebnf(); state._fsp--; @@ -471,32 +474,32 @@ public class SourceGenTriggers extends TreeParser { } break; case 4 : - // SourceGenTriggers.g:49:6: ACTION + // SourceGenTriggers.g:48:6: ACTION { - ACTION6=(GrammarAST)match(input,ACTION,FOLLOW_ACTION_in_element252); - omo = new Action(gen, ACTION6); + ACTION6=(GrammarAST)match(input,ACTION,FOLLOW_ACTION_in_element251); + omo = factory.action(ACTION6); } break; case 5 : - // SourceGenTriggers.g:50:6: SEMPRED + // SourceGenTriggers.g:49:6: SEMPRED { - SEMPRED7=(GrammarAST)match(input,SEMPRED,FOLLOW_SEMPRED_in_element267); - omo = new SemPred(gen, SEMPRED7); + SEMPRED7=(GrammarAST)match(input,SEMPRED,FOLLOW_SEMPRED_in_element266); + omo = factory.sempred(SEMPRED7); } break; case 6 : - // SourceGenTriggers.g:51:4: GATED_SEMPRED + // SourceGenTriggers.g:50:4: GATED_SEMPRED { - match(input,GATED_SEMPRED,FOLLOW_GATED_SEMPRED_in_element280); + match(input,GATED_SEMPRED,FOLLOW_GATED_SEMPRED_in_element279); } break; case 7 : - // SourceGenTriggers.g:52:4: treeSpec + // SourceGenTriggers.g:51:4: treeSpec { - pushFollow(FOLLOW_treeSpec_in_element286); + pushFollow(FOLLOW_treeSpec_in_element285); treeSpec(); state._fsp--; @@ -519,7 +522,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "labeledElement" - // SourceGenTriggers.g:55:1: labeledElement returns [SrcOp omo] : ( ^( ASSIGN ID atom[$ID] ) | ^( ASSIGN ID block[$ID,null] ) | ^( PLUS_ASSIGN ID atom[$ID] ) | ^( PLUS_ASSIGN ID block[$ID,null] ) ); + // SourceGenTriggers.g:54:1: labeledElement returns [SrcOp omo] : ( ^( ASSIGN ID atom[$ID] ) | ^( ASSIGN ID block[$ID,null] ) | ^( PLUS_ASSIGN ID atom[$ID] ) | ^( PLUS_ASSIGN ID block[$ID,null] ) ); public final SrcOp labeledElement() throws RecognitionException { SrcOp omo = null; @@ -537,18 +540,18 @@ public class SourceGenTriggers extends TreeParser { try { - // SourceGenTriggers.g:56:2: ( ^( ASSIGN ID atom[$ID] ) | ^( ASSIGN ID block[$ID,null] ) | ^( PLUS_ASSIGN ID atom[$ID] ) | ^( PLUS_ASSIGN ID block[$ID,null] ) ) + // SourceGenTriggers.g:55:2: ( ^( ASSIGN ID atom[$ID] ) | ^( ASSIGN ID block[$ID,null] ) | ^( PLUS_ASSIGN ID atom[$ID] ) | ^( PLUS_ASSIGN ID block[$ID,null] ) ) int alt7=4; alt7 = dfa7.predict(input); switch (alt7) { case 1 : - // SourceGenTriggers.g:56:4: ^( ASSIGN ID atom[$ID] ) + // SourceGenTriggers.g:55:4: ^( ASSIGN ID atom[$ID] ) { - match(input,ASSIGN,FOLLOW_ASSIGN_in_labeledElement308); + match(input,ASSIGN,FOLLOW_ASSIGN_in_labeledElement307); match(input, Token.DOWN, null); - ID8=(GrammarAST)match(input,ID,FOLLOW_ID_in_labeledElement310); - pushFollow(FOLLOW_atom_in_labeledElement312); + ID8=(GrammarAST)match(input,ID,FOLLOW_ID_in_labeledElement309); + pushFollow(FOLLOW_atom_in_labeledElement311); atom9=atom(ID8); state._fsp--; @@ -560,13 +563,13 @@ public class SourceGenTriggers extends TreeParser { } break; case 2 : - // SourceGenTriggers.g:57:4: ^( ASSIGN ID block[$ID,null] ) + // SourceGenTriggers.g:56:4: ^( ASSIGN ID block[$ID,null] ) { - match(input,ASSIGN,FOLLOW_ASSIGN_in_labeledElement326); + match(input,ASSIGN,FOLLOW_ASSIGN_in_labeledElement325); match(input, Token.DOWN, null); - ID10=(GrammarAST)match(input,ID,FOLLOW_ID_in_labeledElement328); - pushFollow(FOLLOW_block_in_labeledElement330); + ID10=(GrammarAST)match(input,ID,FOLLOW_ID_in_labeledElement327); + pushFollow(FOLLOW_block_in_labeledElement329); block11=block(ID10, null); state._fsp--; @@ -578,13 +581,13 @@ public class SourceGenTriggers extends TreeParser { } break; case 3 : - // SourceGenTriggers.g:58:4: ^( PLUS_ASSIGN ID atom[$ID] ) + // SourceGenTriggers.g:57:4: ^( PLUS_ASSIGN ID atom[$ID] ) { - match(input,PLUS_ASSIGN,FOLLOW_PLUS_ASSIGN_in_labeledElement341); + match(input,PLUS_ASSIGN,FOLLOW_PLUS_ASSIGN_in_labeledElement340); match(input, Token.DOWN, null); - ID12=(GrammarAST)match(input,ID,FOLLOW_ID_in_labeledElement343); - pushFollow(FOLLOW_atom_in_labeledElement345); + ID12=(GrammarAST)match(input,ID,FOLLOW_ID_in_labeledElement342); + pushFollow(FOLLOW_atom_in_labeledElement344); atom13=atom(ID12); state._fsp--; @@ -596,13 +599,13 @@ public class SourceGenTriggers extends TreeParser { } break; case 4 : - // SourceGenTriggers.g:59:4: ^( PLUS_ASSIGN ID block[$ID,null] ) + // SourceGenTriggers.g:58:4: ^( PLUS_ASSIGN ID block[$ID,null] ) { - match(input,PLUS_ASSIGN,FOLLOW_PLUS_ASSIGN_in_labeledElement357); + match(input,PLUS_ASSIGN,FOLLOW_PLUS_ASSIGN_in_labeledElement356); match(input, Token.DOWN, null); - ID14=(GrammarAST)match(input,ID,FOLLOW_ID_in_labeledElement359); - pushFollow(FOLLOW_block_in_labeledElement361); + ID14=(GrammarAST)match(input,ID,FOLLOW_ID_in_labeledElement358); + pushFollow(FOLLOW_block_in_labeledElement360); block15=block(ID14, null); state._fsp--; @@ -628,7 +631,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "treeSpec" - // SourceGenTriggers.g:62:1: treeSpec returns [SrcOp omo] : ^( TREE_BEGIN (e= element )+ ) ; + // SourceGenTriggers.g:61:1: treeSpec returns [SrcOp omo] : ^( TREE_BEGIN (e= element )+ ) ; public final SrcOp treeSpec() throws RecognitionException { SrcOp omo = null; @@ -636,13 +639,13 @@ public class SourceGenTriggers extends TreeParser { try { - // SourceGenTriggers.g:63:5: ( ^( TREE_BEGIN (e= element )+ ) ) - // SourceGenTriggers.g:63:7: ^( TREE_BEGIN (e= element )+ ) + // SourceGenTriggers.g:62:5: ( ^( TREE_BEGIN (e= element )+ ) ) + // SourceGenTriggers.g:62:7: ^( TREE_BEGIN (e= element )+ ) { - match(input,TREE_BEGIN,FOLLOW_TREE_BEGIN_in_treeSpec385); + match(input,TREE_BEGIN,FOLLOW_TREE_BEGIN_in_treeSpec384); match(input, Token.DOWN, null); - // SourceGenTriggers.g:63:21: (e= element )+ + // SourceGenTriggers.g:62:21: (e= element )+ int cnt8=0; loop8: do { @@ -656,9 +659,9 @@ public class SourceGenTriggers extends TreeParser { switch (alt8) { case 1 : - // SourceGenTriggers.g:63:22: e= element + // SourceGenTriggers.g:62:22: e= element { - pushFollow(FOLLOW_element_in_treeSpec391); + pushFollow(FOLLOW_element_in_treeSpec390); e=element(); state._fsp--; @@ -694,7 +697,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "ebnf" - // SourceGenTriggers.g:66:1: ebnf returns [SrcOp omo] : ( ^( astBlockSuffix block[null,null] ) | ^( OPTIONAL block[null,$OPTIONAL] ) | ^( CLOSURE block[null,$CLOSURE] ) | ^( POSITIVE_CLOSURE block[null,$POSITIVE_CLOSURE] ) | block[null, null] ); + // SourceGenTriggers.g:65:1: ebnf returns [SrcOp omo] : ( ^( astBlockSuffix block[null,null] ) | ^( OPTIONAL block[null,$OPTIONAL] ) | ^( CLOSURE block[null,$CLOSURE] ) | ^( POSITIVE_CLOSURE block[null,$POSITIVE_CLOSURE] ) | block[null, null] ); public final SrcOp ebnf() throws RecognitionException { SrcOp omo = null; @@ -711,7 +714,7 @@ public class SourceGenTriggers extends TreeParser { try { - // SourceGenTriggers.g:67:2: ( ^( astBlockSuffix block[null,null] ) | ^( OPTIONAL block[null,$OPTIONAL] ) | ^( CLOSURE block[null,$CLOSURE] ) | ^( POSITIVE_CLOSURE block[null,$POSITIVE_CLOSURE] ) | block[null, null] ) + // SourceGenTriggers.g:66:2: ( ^( astBlockSuffix block[null,null] ) | ^( OPTIONAL block[null,$OPTIONAL] ) | ^( CLOSURE block[null,$CLOSURE] ) | ^( POSITIVE_CLOSURE block[null,$POSITIVE_CLOSURE] ) | block[null, null] ) int alt9=5; switch ( input.LA(1) ) { case IMPLIES: @@ -750,16 +753,16 @@ public class SourceGenTriggers extends TreeParser { switch (alt9) { case 1 : - // SourceGenTriggers.g:67:4: ^( astBlockSuffix block[null,null] ) + // SourceGenTriggers.g:66:4: ^( astBlockSuffix block[null,null] ) { - pushFollow(FOLLOW_astBlockSuffix_in_ebnf415); + pushFollow(FOLLOW_astBlockSuffix_in_ebnf414); astBlockSuffix(); state._fsp--; match(input, Token.DOWN, null); - pushFollow(FOLLOW_block_in_ebnf417); + pushFollow(FOLLOW_block_in_ebnf416); block(null, null); state._fsp--; @@ -770,12 +773,12 @@ public class SourceGenTriggers extends TreeParser { } break; case 2 : - // SourceGenTriggers.g:68:4: ^( OPTIONAL block[null,$OPTIONAL] ) + // SourceGenTriggers.g:67:4: ^( OPTIONAL block[null,$OPTIONAL] ) { - OPTIONAL16=(GrammarAST)match(input,OPTIONAL,FOLLOW_OPTIONAL_in_ebnf427); + OPTIONAL16=(GrammarAST)match(input,OPTIONAL,FOLLOW_OPTIONAL_in_ebnf426); match(input, Token.DOWN, null); - pushFollow(FOLLOW_block_in_ebnf429); + pushFollow(FOLLOW_block_in_ebnf428); block17=block(null, OPTIONAL16); state._fsp--; @@ -787,12 +790,12 @@ public class SourceGenTriggers extends TreeParser { } break; case 3 : - // SourceGenTriggers.g:69:4: ^( CLOSURE block[null,$CLOSURE] ) + // SourceGenTriggers.g:68:4: ^( CLOSURE block[null,$CLOSURE] ) { - CLOSURE18=(GrammarAST)match(input,CLOSURE,FOLLOW_CLOSURE_in_ebnf441); + CLOSURE18=(GrammarAST)match(input,CLOSURE,FOLLOW_CLOSURE_in_ebnf440); match(input, Token.DOWN, null); - pushFollow(FOLLOW_block_in_ebnf443); + pushFollow(FOLLOW_block_in_ebnf442); block19=block(null, CLOSURE18); state._fsp--; @@ -804,12 +807,12 @@ public class SourceGenTriggers extends TreeParser { } break; case 4 : - // SourceGenTriggers.g:70:4: ^( POSITIVE_CLOSURE block[null,$POSITIVE_CLOSURE] ) + // SourceGenTriggers.g:69:4: ^( POSITIVE_CLOSURE block[null,$POSITIVE_CLOSURE] ) { - POSITIVE_CLOSURE20=(GrammarAST)match(input,POSITIVE_CLOSURE,FOLLOW_POSITIVE_CLOSURE_in_ebnf456); + POSITIVE_CLOSURE20=(GrammarAST)match(input,POSITIVE_CLOSURE,FOLLOW_POSITIVE_CLOSURE_in_ebnf455); match(input, Token.DOWN, null); - pushFollow(FOLLOW_block_in_ebnf458); + pushFollow(FOLLOW_block_in_ebnf457); block21=block(null, POSITIVE_CLOSURE20); state._fsp--; @@ -821,9 +824,9 @@ public class SourceGenTriggers extends TreeParser { } break; case 5 : - // SourceGenTriggers.g:72:5: block[null, null] + // SourceGenTriggers.g:71:5: block[null, null] { - pushFollow(FOLLOW_block_in_ebnf482); + pushFollow(FOLLOW_block_in_ebnf481); block22=block(null, null); state._fsp--; @@ -847,10 +850,10 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "astBlockSuffix" - // SourceGenTriggers.g:75:1: astBlockSuffix : ( ROOT | IMPLIES | BANG ); + // SourceGenTriggers.g:74:1: astBlockSuffix : ( ROOT | IMPLIES | BANG ); public final void astBlockSuffix() throws RecognitionException { try { - // SourceGenTriggers.g:76:5: ( ROOT | IMPLIES | BANG ) + // SourceGenTriggers.g:75:5: ( ROOT | IMPLIES | BANG ) // SourceGenTriggers.g: { if ( input.LA(1)==IMPLIES||input.LA(1)==BANG||input.LA(1)==ROOT ) { @@ -878,7 +881,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "atom" - // SourceGenTriggers.g:83:1: atom[GrammarAST label] returns [SrcOp omo] : ( ^( ROOT range[label] ) | ^( BANG range[label] ) | ^( ROOT notSet[label] ) | ^( BANG notSet[label] ) | notSet[label] | range[label] | ^( DOT ID terminal[label] ) | ^( DOT ID ruleref[label] ) | ^( WILDCARD . ) | WILDCARD | terminal[label] | ruleref[label] ); + // SourceGenTriggers.g:82:1: atom[GrammarAST label] returns [SrcOp omo] : ( ^( ROOT range[label] ) | ^( BANG range[label] ) | ^( ROOT notSet[label] ) | ^( BANG notSet[label] ) | notSet[label] | range[label] | ^( DOT ID terminal[label] ) | ^( DOT ID ruleref[label] ) | ^( WILDCARD . ) | WILDCARD | terminal[label] | ruleref[label] ); public final SrcOp atom(GrammarAST label) throws RecognitionException { SrcOp omo = null; @@ -894,17 +897,17 @@ public class SourceGenTriggers extends TreeParser { try { - // SourceGenTriggers.g:84:2: ( ^( ROOT range[label] ) | ^( BANG range[label] ) | ^( ROOT notSet[label] ) | ^( BANG notSet[label] ) | notSet[label] | range[label] | ^( DOT ID terminal[label] ) | ^( DOT ID ruleref[label] ) | ^( WILDCARD . ) | WILDCARD | terminal[label] | ruleref[label] ) + // SourceGenTriggers.g:83:2: ( ^( ROOT range[label] ) | ^( BANG range[label] ) | ^( ROOT notSet[label] ) | ^( BANG notSet[label] ) | notSet[label] | range[label] | ^( DOT ID terminal[label] ) | ^( DOT ID ruleref[label] ) | ^( WILDCARD . ) | WILDCARD | terminal[label] | ruleref[label] ) int alt10=12; alt10 = dfa10.predict(input); switch (alt10) { case 1 : - // SourceGenTriggers.g:84:4: ^( ROOT range[label] ) + // SourceGenTriggers.g:83:4: ^( ROOT range[label] ) { - match(input,ROOT,FOLLOW_ROOT_in_atom544); + match(input,ROOT,FOLLOW_ROOT_in_atom543); match(input, Token.DOWN, null); - pushFollow(FOLLOW_range_in_atom546); + pushFollow(FOLLOW_range_in_atom545); range(label); state._fsp--; @@ -915,12 +918,12 @@ public class SourceGenTriggers extends TreeParser { } break; case 2 : - // SourceGenTriggers.g:85:4: ^( BANG range[label] ) + // SourceGenTriggers.g:84:4: ^( BANG range[label] ) { - match(input,BANG,FOLLOW_BANG_in_atom557); + match(input,BANG,FOLLOW_BANG_in_atom556); match(input, Token.DOWN, null); - pushFollow(FOLLOW_range_in_atom559); + pushFollow(FOLLOW_range_in_atom558); range23=range(label); state._fsp--; @@ -932,12 +935,12 @@ public class SourceGenTriggers extends TreeParser { } break; case 3 : - // SourceGenTriggers.g:86:4: ^( ROOT notSet[label] ) + // SourceGenTriggers.g:85:4: ^( ROOT notSet[label] ) { - match(input,ROOT,FOLLOW_ROOT_in_atom571); + match(input,ROOT,FOLLOW_ROOT_in_atom570); match(input, Token.DOWN, null); - pushFollow(FOLLOW_notSet_in_atom573); + pushFollow(FOLLOW_notSet_in_atom572); notSet(label); state._fsp--; @@ -948,12 +951,12 @@ public class SourceGenTriggers extends TreeParser { } break; case 4 : - // SourceGenTriggers.g:87:4: ^( BANG notSet[label] ) + // SourceGenTriggers.g:86:4: ^( BANG notSet[label] ) { - match(input,BANG,FOLLOW_BANG_in_atom584); + match(input,BANG,FOLLOW_BANG_in_atom583); match(input, Token.DOWN, null); - pushFollow(FOLLOW_notSet_in_atom586); + pushFollow(FOLLOW_notSet_in_atom585); notSet24=notSet(label); state._fsp--; @@ -965,9 +968,9 @@ public class SourceGenTriggers extends TreeParser { } break; case 5 : - // SourceGenTriggers.g:88:4: notSet[label] + // SourceGenTriggers.g:87:4: notSet[label] { - pushFollow(FOLLOW_notSet_in_atom597); + pushFollow(FOLLOW_notSet_in_atom596); notSet(label); state._fsp--; @@ -976,9 +979,9 @@ public class SourceGenTriggers extends TreeParser { } break; case 6 : - // SourceGenTriggers.g:89:4: range[label] + // SourceGenTriggers.g:88:4: range[label] { - pushFollow(FOLLOW_range_in_atom608); + pushFollow(FOLLOW_range_in_atom607); range25=range(label); state._fsp--; @@ -988,13 +991,13 @@ public class SourceGenTriggers extends TreeParser { } break; case 7 : - // SourceGenTriggers.g:90:4: ^( DOT ID terminal[label] ) + // SourceGenTriggers.g:89:4: ^( DOT ID terminal[label] ) { - match(input,DOT,FOLLOW_DOT_in_atom621); + match(input,DOT,FOLLOW_DOT_in_atom620); match(input, Token.DOWN, null); - match(input,ID,FOLLOW_ID_in_atom623); - pushFollow(FOLLOW_terminal_in_atom625); + match(input,ID,FOLLOW_ID_in_atom622); + pushFollow(FOLLOW_terminal_in_atom624); terminal(label); state._fsp--; @@ -1005,13 +1008,13 @@ public class SourceGenTriggers extends TreeParser { } break; case 8 : - // SourceGenTriggers.g:91:4: ^( DOT ID ruleref[label] ) + // SourceGenTriggers.g:90:4: ^( DOT ID ruleref[label] ) { - match(input,DOT,FOLLOW_DOT_in_atom633); + match(input,DOT,FOLLOW_DOT_in_atom632); match(input, Token.DOWN, null); - match(input,ID,FOLLOW_ID_in_atom635); - pushFollow(FOLLOW_ruleref_in_atom637); + match(input,ID,FOLLOW_ID_in_atom634); + pushFollow(FOLLOW_ruleref_in_atom636); ruleref(label); state._fsp--; @@ -1022,9 +1025,9 @@ public class SourceGenTriggers extends TreeParser { } break; case 9 : - // SourceGenTriggers.g:92:7: ^( WILDCARD . ) + // SourceGenTriggers.g:91:7: ^( WILDCARD . ) { - match(input,WILDCARD,FOLLOW_WILDCARD_in_atom648); + match(input,WILDCARD,FOLLOW_WILDCARD_in_atom647); match(input, Token.DOWN, null); matchAny(input); @@ -1034,16 +1037,16 @@ public class SourceGenTriggers extends TreeParser { } break; case 10 : - // SourceGenTriggers.g:93:7: WILDCARD + // SourceGenTriggers.g:92:7: WILDCARD { - match(input,WILDCARD,FOLLOW_WILDCARD_in_atom663); + match(input,WILDCARD,FOLLOW_WILDCARD_in_atom662); } break; case 11 : - // SourceGenTriggers.g:94:9: terminal[label] + // SourceGenTriggers.g:93:9: terminal[label] { - pushFollow(FOLLOW_terminal_in_atom677); + pushFollow(FOLLOW_terminal_in_atom676); terminal26=terminal(label); state._fsp--; @@ -1053,9 +1056,9 @@ public class SourceGenTriggers extends TreeParser { } break; case 12 : - // SourceGenTriggers.g:95:9: ruleref[label] + // SourceGenTriggers.g:94:9: ruleref[label] { - pushFollow(FOLLOW_ruleref_in_atom693); + pushFollow(FOLLOW_ruleref_in_atom692); ruleref27=ruleref(label); state._fsp--; @@ -1079,12 +1082,12 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "notSet" - // SourceGenTriggers.g:98:1: notSet[GrammarAST label] returns [SrcOp omo] : ( ^( NOT terminal[label] ) | ^( NOT block[label,null] ) ); + // SourceGenTriggers.g:97:1: notSet[GrammarAST label] returns [SrcOp omo] : ( ^( NOT terminal[label] ) | ^( NOT block[label,null] ) ); public final SrcOp notSet(GrammarAST label) throws RecognitionException { SrcOp omo = null; try { - // SourceGenTriggers.g:99:5: ( ^( NOT terminal[label] ) | ^( NOT block[label,null] ) ) + // SourceGenTriggers.g:98:5: ( ^( NOT terminal[label] ) | ^( NOT block[label,null] ) ) int alt11=2; int LA11_0 = input.LA(1); @@ -1122,12 +1125,12 @@ public class SourceGenTriggers extends TreeParser { } switch (alt11) { case 1 : - // SourceGenTriggers.g:99:7: ^( NOT terminal[label] ) + // SourceGenTriggers.g:98:7: ^( NOT terminal[label] ) { - match(input,NOT,FOLLOW_NOT_in_notSet722); + match(input,NOT,FOLLOW_NOT_in_notSet721); match(input, Token.DOWN, null); - pushFollow(FOLLOW_terminal_in_notSet724); + pushFollow(FOLLOW_terminal_in_notSet723); terminal(label); state._fsp--; @@ -1138,12 +1141,12 @@ public class SourceGenTriggers extends TreeParser { } break; case 2 : - // SourceGenTriggers.g:100:7: ^( NOT block[label,null] ) + // SourceGenTriggers.g:99:7: ^( NOT block[label,null] ) { - match(input,NOT,FOLLOW_NOT_in_notSet737); + match(input,NOT,FOLLOW_NOT_in_notSet736); match(input, Token.DOWN, null); - pushFollow(FOLLOW_block_in_notSet739); + pushFollow(FOLLOW_block_in_notSet738); block(label, null); state._fsp--; @@ -1168,7 +1171,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "ruleref" - // SourceGenTriggers.g:103:1: ruleref[GrammarAST label] returns [SrcOp omo] : ( ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) | ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) | ^( RULE_REF ( ARG_ACTION )? ) ); + // SourceGenTriggers.g:102:1: ruleref[GrammarAST label] returns [SrcOp omo] : ( ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) | ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) | ^( RULE_REF ( ARG_ACTION )? ) ); public final SrcOp ruleref(GrammarAST label) throws RecognitionException { SrcOp omo = null; @@ -1176,7 +1179,7 @@ public class SourceGenTriggers extends TreeParser { GrammarAST RULE_REF29=null; try { - // SourceGenTriggers.g:104:5: ( ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) | ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) | ^( RULE_REF ( ARG_ACTION )? ) ) + // SourceGenTriggers.g:103:5: ( ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) | ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) | ^( RULE_REF ( ARG_ACTION )? ) ) int alt15=3; switch ( input.LA(1) ) { case ROOT: @@ -1203,16 +1206,16 @@ public class SourceGenTriggers extends TreeParser { switch (alt15) { case 1 : - // SourceGenTriggers.g:104:7: ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) + // SourceGenTriggers.g:103:7: ^( ROOT ^( RULE_REF ( ARG_ACTION )? ) ) { - match(input,ROOT,FOLLOW_ROOT_in_ruleref767); + match(input,ROOT,FOLLOW_ROOT_in_ruleref766); match(input, Token.DOWN, null); - match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref770); + match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref769); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // SourceGenTriggers.g:104:25: ( ARG_ACTION )? + // SourceGenTriggers.g:103:25: ( ARG_ACTION )? int alt12=2; int LA12_0 = input.LA(1); @@ -1221,9 +1224,9 @@ public class SourceGenTriggers extends TreeParser { } switch (alt12) { case 1 : - // SourceGenTriggers.g:104:25: ARG_ACTION + // SourceGenTriggers.g:103:25: ARG_ACTION { - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref772); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref771); } break; @@ -1239,16 +1242,16 @@ public class SourceGenTriggers extends TreeParser { } break; case 2 : - // SourceGenTriggers.g:105:7: ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) + // SourceGenTriggers.g:104:7: ^( BANG ^( RULE_REF ( ARG_ACTION )? ) ) { - match(input,BANG,FOLLOW_BANG_in_ruleref784); + match(input,BANG,FOLLOW_BANG_in_ruleref783); match(input, Token.DOWN, null); - RULE_REF28=(GrammarAST)match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref787); + RULE_REF28=(GrammarAST)match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref786); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // SourceGenTriggers.g:105:25: ( ARG_ACTION )? + // SourceGenTriggers.g:104:25: ( ARG_ACTION )? int alt13=2; int LA13_0 = input.LA(1); @@ -1257,9 +1260,9 @@ public class SourceGenTriggers extends TreeParser { } switch (alt13) { case 1 : - // SourceGenTriggers.g:105:25: ARG_ACTION + // SourceGenTriggers.g:104:25: ARG_ACTION { - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref789); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref788); } break; @@ -1271,18 +1274,18 @@ public class SourceGenTriggers extends TreeParser { } match(input, Token.UP, null); - omo = new InvokeRule(gen, RULE_REF28, label); + omo = new InvokeRule(factory, RULE_REF28, label); } break; case 3 : - // SourceGenTriggers.g:106:7: ^( RULE_REF ( ARG_ACTION )? ) + // SourceGenTriggers.g:105:7: ^( RULE_REF ( ARG_ACTION )? ) { - RULE_REF29=(GrammarAST)match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref803); + RULE_REF29=(GrammarAST)match(input,RULE_REF,FOLLOW_RULE_REF_in_ruleref802); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // SourceGenTriggers.g:106:18: ( ARG_ACTION )? + // SourceGenTriggers.g:105:18: ( ARG_ACTION )? int alt14=2; int LA14_0 = input.LA(1); @@ -1291,9 +1294,9 @@ public class SourceGenTriggers extends TreeParser { } switch (alt14) { case 1 : - // SourceGenTriggers.g:106:18: ARG_ACTION + // SourceGenTriggers.g:105:18: ARG_ACTION { - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref805); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_ruleref804); } break; @@ -1303,7 +1306,7 @@ public class SourceGenTriggers extends TreeParser { match(input, Token.UP, null); } - omo = new InvokeRule(gen, RULE_REF29, label); + omo = new InvokeRule(factory, RULE_REF29, label); } break; @@ -1322,7 +1325,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "range" - // SourceGenTriggers.g:109:1: range[GrammarAST label] returns [SrcOp omo] : ^( RANGE a= STRING_LITERAL b= STRING_LITERAL ) ; + // SourceGenTriggers.g:108:1: range[GrammarAST label] returns [SrcOp omo] : ^( RANGE a= STRING_LITERAL b= STRING_LITERAL ) ; public final SrcOp range(GrammarAST label) throws RecognitionException { SrcOp omo = null; @@ -1330,14 +1333,14 @@ public class SourceGenTriggers extends TreeParser { GrammarAST b=null; try { - // SourceGenTriggers.g:110:5: ( ^( RANGE a= STRING_LITERAL b= STRING_LITERAL ) ) - // SourceGenTriggers.g:110:7: ^( RANGE a= STRING_LITERAL b= STRING_LITERAL ) + // SourceGenTriggers.g:109:5: ( ^( RANGE a= STRING_LITERAL b= STRING_LITERAL ) ) + // SourceGenTriggers.g:109:7: ^( RANGE a= STRING_LITERAL b= STRING_LITERAL ) { - match(input,RANGE,FOLLOW_RANGE_in_range834); + match(input,RANGE,FOLLOW_RANGE_in_range833); match(input, Token.DOWN, null); - a=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_range838); - b=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_range842); + a=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_range837); + b=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_range841); match(input, Token.UP, null); @@ -1356,7 +1359,7 @@ public class SourceGenTriggers extends TreeParser { // $ANTLR start "terminal" - // SourceGenTriggers.g:113:1: terminal[GrammarAST label] returns [MatchToken omo] : ( ^( STRING_LITERAL . ) | STRING_LITERAL | ^( TOKEN_REF ARG_ACTION . ) | ^( TOKEN_REF . ) | TOKEN_REF | ^( ROOT terminal[label] ) | ^( BANG terminal[label] ) ); + // SourceGenTriggers.g:112:1: terminal[GrammarAST label] returns [MatchToken omo] : ( ^( STRING_LITERAL . ) | STRING_LITERAL | ^( TOKEN_REF ARG_ACTION . ) | ^( TOKEN_REF . ) | TOKEN_REF | ^( ROOT terminal[label] ) | ^( BANG terminal[label] ) ); public final MatchToken terminal(GrammarAST label) throws RecognitionException { MatchToken omo = null; @@ -1367,73 +1370,73 @@ public class SourceGenTriggers extends TreeParser { GrammarAST TOKEN_REF34=null; try { - // SourceGenTriggers.g:114:5: ( ^( STRING_LITERAL . ) | STRING_LITERAL | ^( TOKEN_REF ARG_ACTION . ) | ^( TOKEN_REF . ) | TOKEN_REF | ^( ROOT terminal[label] ) | ^( BANG terminal[label] ) ) + // SourceGenTriggers.g:113:5: ( ^( STRING_LITERAL . ) | STRING_LITERAL | ^( TOKEN_REF ARG_ACTION . ) | ^( TOKEN_REF . ) | TOKEN_REF | ^( ROOT terminal[label] ) | ^( BANG terminal[label] ) ) int alt16=7; alt16 = dfa16.predict(input); switch (alt16) { case 1 : - // SourceGenTriggers.g:114:8: ^( STRING_LITERAL . ) + // SourceGenTriggers.g:113:8: ^( STRING_LITERAL . ) { - STRING_LITERAL30=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal872); + STRING_LITERAL30=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal871); match(input, Token.DOWN, null); matchAny(input); match(input, Token.UP, null); - omo = new MatchToken(gen, (TerminalAST)STRING_LITERAL30, label); + omo = new MatchToken(factory, (TerminalAST)STRING_LITERAL30, label); } break; case 2 : - // SourceGenTriggers.g:115:7: STRING_LITERAL + // SourceGenTriggers.g:114:7: STRING_LITERAL { - STRING_LITERAL31=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal887); - omo = new MatchToken(gen, (TerminalAST)STRING_LITERAL31, label); + STRING_LITERAL31=(GrammarAST)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal886); + omo = new MatchToken(factory, (TerminalAST)STRING_LITERAL31, label); } break; case 3 : - // SourceGenTriggers.g:116:7: ^( TOKEN_REF ARG_ACTION . ) + // SourceGenTriggers.g:115:7: ^( TOKEN_REF ARG_ACTION . ) { - TOKEN_REF32=(GrammarAST)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal901); + TOKEN_REF32=(GrammarAST)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal900); match(input, Token.DOWN, null); - match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal903); + match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal902); matchAny(input); match(input, Token.UP, null); - omo = new MatchToken(gen, (TerminalAST)TOKEN_REF32, label); + omo = new MatchToken(factory, (TerminalAST)TOKEN_REF32, label); } break; case 4 : - // SourceGenTriggers.g:117:7: ^( TOKEN_REF . ) + // SourceGenTriggers.g:116:7: ^( TOKEN_REF . ) { - TOKEN_REF33=(GrammarAST)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal917); + TOKEN_REF33=(GrammarAST)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal916); match(input, Token.DOWN, null); matchAny(input); match(input, Token.UP, null); - omo = new MatchToken(gen, (TerminalAST)TOKEN_REF33, label); + omo = new MatchToken(factory, (TerminalAST)TOKEN_REF33, label); } break; case 5 : - // SourceGenTriggers.g:118:7: TOKEN_REF + // SourceGenTriggers.g:117:7: TOKEN_REF { - TOKEN_REF34=(GrammarAST)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal933); - omo = new MatchToken(gen, (TerminalAST)TOKEN_REF34, label); + TOKEN_REF34=(GrammarAST)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal932); + omo = new MatchToken(factory, (TerminalAST)TOKEN_REF34, label); } break; case 6 : - // SourceGenTriggers.g:119:7: ^( ROOT terminal[label] ) + // SourceGenTriggers.g:118:7: ^( ROOT terminal[label] ) { - match(input,ROOT,FOLLOW_ROOT_in_terminal948); + match(input,ROOT,FOLLOW_ROOT_in_terminal947); match(input, Token.DOWN, null); - pushFollow(FOLLOW_terminal_in_terminal950); + pushFollow(FOLLOW_terminal_in_terminal949); terminal(label); state._fsp--; @@ -1444,12 +1447,12 @@ public class SourceGenTriggers extends TreeParser { } break; case 7 : - // SourceGenTriggers.g:120:7: ^( BANG terminal[label] ) + // SourceGenTriggers.g:119:7: ^( BANG terminal[label] ) { - match(input,BANG,FOLLOW_BANG_in_terminal964); + match(input,BANG,FOLLOW_BANG_in_terminal963); match(input, Token.DOWN, null); - pushFollow(FOLLOW_terminal_in_terminal966); + pushFollow(FOLLOW_terminal_in_terminal965); terminal(label); state._fsp--; @@ -1541,7 +1544,7 @@ public class SourceGenTriggers extends TreeParser { this.transition = DFA6_transition; } public String getDescription() { - return "45:1: element returns [SrcOp omo] : ( labeledElement | atom[null] | ebnf | ACTION | SEMPRED | GATED_SEMPRED | treeSpec );"; + return "44:1: element returns [SrcOp omo] : ( labeledElement | atom[null] | ebnf | ACTION | SEMPRED | GATED_SEMPRED | treeSpec );"; } } static final String DFA7_eotS = @@ -1602,7 +1605,7 @@ public class SourceGenTriggers extends TreeParser { this.transition = DFA7_transition; } public String getDescription() { - return "55:1: labeledElement returns [SrcOp omo] : ( ^( ASSIGN ID atom[$ID] ) | ^( ASSIGN ID block[$ID,null] ) | ^( PLUS_ASSIGN ID atom[$ID] ) | ^( PLUS_ASSIGN ID block[$ID,null] ) );"; + return "54:1: labeledElement returns [SrcOp omo] : ( ^( ASSIGN ID atom[$ID] ) | ^( ASSIGN ID block[$ID,null] ) | ^( PLUS_ASSIGN ID atom[$ID] ) | ^( PLUS_ASSIGN ID block[$ID,null] ) );"; } } static final String DFA10_eotS = @@ -1684,7 +1687,7 @@ public class SourceGenTriggers extends TreeParser { this.transition = DFA10_transition; } public String getDescription() { - return "83:1: atom[GrammarAST label] returns [SrcOp omo] : ( ^( ROOT range[label] ) | ^( BANG range[label] ) | ^( ROOT notSet[label] ) | ^( BANG notSet[label] ) | notSet[label] | range[label] | ^( DOT ID terminal[label] ) | ^( DOT ID ruleref[label] ) | ^( WILDCARD . ) | WILDCARD | terminal[label] | ruleref[label] );"; + return "82:1: atom[GrammarAST label] returns [SrcOp omo] : ( ^( ROOT range[label] ) | ^( BANG range[label] ) | ^( ROOT notSet[label] ) | ^( BANG notSet[label] ) | notSet[label] | range[label] | ^( DOT ID terminal[label] ) | ^( DOT ID ruleref[label] ) | ^( WILDCARD . ) | WILDCARD | terminal[label] | ruleref[label] );"; } } static final String DFA16_eotS = @@ -1750,95 +1753,95 @@ public class SourceGenTriggers extends TreeParser { this.transition = DFA16_transition; } public String getDescription() { - return "113:1: terminal[GrammarAST label] returns [MatchToken omo] : ( ^( STRING_LITERAL . ) | STRING_LITERAL | ^( TOKEN_REF ARG_ACTION . ) | ^( TOKEN_REF . ) | TOKEN_REF | ^( ROOT terminal[label] ) | ^( BANG terminal[label] ) );"; + return "112:1: terminal[GrammarAST label] returns [MatchToken omo] : ( ^( STRING_LITERAL . ) | STRING_LITERAL | ^( TOKEN_REF ARG_ACTION . ) | ^( TOKEN_REF . ) | TOKEN_REF | ^( ROOT terminal[label] ) | ^( BANG terminal[label] ) );"; } } - public static final BitSet FOLLOW_BLOCK_in_block72 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_OPTIONS_in_block76 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_alternative_in_block96 = new BitSet(new long[]{0x0000000000000008L,0x0000004000200000L}); - public static final BitSet FOLLOW_ALT_REWRITE_in_alternative142 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_alternative_in_alternative146 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000007FFFFFFFFFL}); - public static final BitSet FOLLOW_ALT_in_alternative159 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_EPSILON_in_alternative161 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ALT_in_alternative176 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_element_in_alternative180 = new BitSet(new long[]{0xA9A9480000010018L,0x000000024003A011L}); - public static final BitSet FOLLOW_labeledElement_in_element207 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_atom_in_element218 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ebnf_in_element231 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ACTION_in_element252 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SEMPRED_in_element267 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_GATED_SEMPRED_in_element280 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_treeSpec_in_element286 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ASSIGN_in_labeledElement308 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_labeledElement310 = new BitSet(new long[]{0xA1A1000000000000L,0x0000000200000011L}); - public static final BitSet FOLLOW_atom_in_labeledElement312 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ASSIGN_in_labeledElement326 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_labeledElement328 = new BitSet(new long[]{0x0021080000000000L,0x000000000003A000L}); - public static final BitSet FOLLOW_block_in_labeledElement330 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_PLUS_ASSIGN_in_labeledElement341 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_labeledElement343 = new BitSet(new long[]{0xA1A1000000000000L,0x0000000200000011L}); - public static final BitSet FOLLOW_atom_in_labeledElement345 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_PLUS_ASSIGN_in_labeledElement357 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_labeledElement359 = new BitSet(new long[]{0x0021080000000000L,0x000000000003A000L}); - public static final BitSet FOLLOW_block_in_labeledElement361 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_TREE_BEGIN_in_treeSpec385 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_element_in_treeSpec391 = new BitSet(new long[]{0xA9A9480000010018L,0x000000024003A011L}); - public static final BitSet FOLLOW_astBlockSuffix_in_ebnf415 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_block_in_ebnf417 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_OPTIONAL_in_ebnf427 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_block_in_ebnf429 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_CLOSURE_in_ebnf441 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_block_in_ebnf443 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_POSITIVE_CLOSURE_in_ebnf456 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_block_in_ebnf458 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_block_in_ebnf482 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BLOCK_in_block71 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_OPTIONS_in_block75 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_alternative_in_block95 = new BitSet(new long[]{0x0000000000000008L,0x0000004000200000L}); + public static final BitSet FOLLOW_ALT_REWRITE_in_alternative141 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_alternative_in_alternative145 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000007FFFFFFFFFL}); + public static final BitSet FOLLOW_ALT_in_alternative158 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_EPSILON_in_alternative160 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ALT_in_alternative175 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_element_in_alternative179 = new BitSet(new long[]{0xA9A9480000010018L,0x000000024003A011L}); + public static final BitSet FOLLOW_labeledElement_in_element206 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_atom_in_element217 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ebnf_in_element230 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACTION_in_element251 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SEMPRED_in_element266 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_GATED_SEMPRED_in_element279 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_treeSpec_in_element285 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ASSIGN_in_labeledElement307 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_labeledElement309 = new BitSet(new long[]{0xA1A1000000000000L,0x0000000200000011L}); + public static final BitSet FOLLOW_atom_in_labeledElement311 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ASSIGN_in_labeledElement325 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_labeledElement327 = new BitSet(new long[]{0x0021080000000000L,0x000000000003A000L}); + public static final BitSet FOLLOW_block_in_labeledElement329 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_PLUS_ASSIGN_in_labeledElement340 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_labeledElement342 = new BitSet(new long[]{0xA1A1000000000000L,0x0000000200000011L}); + public static final BitSet FOLLOW_atom_in_labeledElement344 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_PLUS_ASSIGN_in_labeledElement356 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_labeledElement358 = new BitSet(new long[]{0x0021080000000000L,0x000000000003A000L}); + public static final BitSet FOLLOW_block_in_labeledElement360 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_TREE_BEGIN_in_treeSpec384 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_element_in_treeSpec390 = new BitSet(new long[]{0xA9A9480000010018L,0x000000024003A011L}); + public static final BitSet FOLLOW_astBlockSuffix_in_ebnf414 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_block_in_ebnf416 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_OPTIONAL_in_ebnf426 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_block_in_ebnf428 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_CLOSURE_in_ebnf440 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_block_in_ebnf442 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_POSITIVE_CLOSURE_in_ebnf455 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_block_in_ebnf457 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_block_in_ebnf481 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_set_in_astBlockSuffix0 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ROOT_in_atom544 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_range_in_atom546 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_BANG_in_atom557 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_range_in_atom559 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ROOT_in_atom571 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_notSet_in_atom573 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_BANG_in_atom584 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_notSet_in_atom586 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_notSet_in_atom597 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_range_in_atom608 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOT_in_atom621 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_atom623 = new BitSet(new long[]{0x8021000000000000L,0x0000000000000010L}); - public static final BitSet FOLLOW_terminal_in_atom625 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_DOT_in_atom633 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ID_in_atom635 = new BitSet(new long[]{0xA1A1000000000000L,0x0000000200000011L}); - public static final BitSet FOLLOW_ruleref_in_atom637 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_WILDCARD_in_atom648 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_WILDCARD_in_atom663 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_terminal_in_atom677 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ruleref_in_atom693 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_NOT_in_notSet722 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_terminal_in_notSet724 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_NOT_in_notSet737 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_block_in_notSet739 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ROOT_in_ruleref767 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_RULE_REF_in_ruleref770 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_ruleref772 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_BANG_in_ruleref784 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_RULE_REF_in_ruleref787 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_ruleref789 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_RULE_REF_in_ruleref803 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_ruleref805 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_RANGE_in_range834 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_range838 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_range842 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_terminal872 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_terminal887 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal901 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ARG_ACTION_in_terminal903 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000007FFFFFFFFFL}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal917 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_TOKEN_REF_in_terminal933 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ROOT_in_terminal948 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_terminal_in_terminal950 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_BANG_in_terminal964 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_terminal_in_terminal966 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ROOT_in_atom543 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_range_in_atom545 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_BANG_in_atom556 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_range_in_atom558 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ROOT_in_atom570 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_notSet_in_atom572 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_BANG_in_atom583 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_notSet_in_atom585 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_notSet_in_atom596 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_range_in_atom607 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOT_in_atom620 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_atom622 = new BitSet(new long[]{0x8021000000000000L,0x0000000000000010L}); + public static final BitSet FOLLOW_terminal_in_atom624 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_DOT_in_atom632 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ID_in_atom634 = new BitSet(new long[]{0xA1A1000000000000L,0x0000000200000011L}); + public static final BitSet FOLLOW_ruleref_in_atom636 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_WILDCARD_in_atom647 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_WILDCARD_in_atom662 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_terminal_in_atom676 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ruleref_in_atom692 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_NOT_in_notSet721 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_terminal_in_notSet723 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_NOT_in_notSet736 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_block_in_notSet738 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ROOT_in_ruleref766 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_RULE_REF_in_ruleref769 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleref771 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_BANG_in_ruleref783 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_RULE_REF_in_ruleref786 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleref788 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_RULE_REF_in_ruleref802 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_ruleref804 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_RANGE_in_range833 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_range837 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_range841 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_terminal871 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_terminal886 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal900 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ARG_ACTION_in_terminal902 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000007FFFFFFFFFL}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal916 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal932 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ROOT_in_terminal947 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_terminal_in_terminal949 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_BANG_in_terminal963 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_terminal_in_terminal965 = new BitSet(new long[]{0x0000000000000008L}); } \ No newline at end of file diff --git a/tool/src/org/antlr/v4/codegen/src/Action.java b/tool/src/org/antlr/v4/codegen/src/Action.java index a67956378..3aaf55b16 100644 --- a/tool/src/org/antlr/v4/codegen/src/Action.java +++ b/tool/src/org/antlr/v4/codegen/src/Action.java @@ -1,9 +1,9 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.GrammarAST; /** */ public class Action extends SrcOp { - public Action(CodeGenerator gen, GrammarAST ast) { super(gen,ast); } + public Action(OutputModelFactory factory, GrammarAST ast) { super(factory,ast); } } diff --git a/tool/src/org/antlr/v4/codegen/src/BitSetDef.java b/tool/src/org/antlr/v4/codegen/src/BitSetDef.java index 8db961be5..5d91cba0e 100644 --- a/tool/src/org/antlr/v4/codegen/src/BitSetDef.java +++ b/tool/src/org/antlr/v4/codegen/src/BitSetDef.java @@ -1,14 +1,14 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntSet; /** */ public class BitSetDef extends OutputModelObject { public String name; public IntSet fset; - public BitSetDef(CodeGenerator gen, String name, IntSet fset) { - this.gen = gen; + public BitSetDef(OutputModelFactory factory, String name, IntSet fset) { + this.factory = factory; this.name = name; this.fset = fset; } diff --git a/tool/src/org/antlr/v4/codegen/src/Choice.java b/tool/src/org/antlr/v4/codegen/src/Choice.java index 9320caea4..96eeb34d5 100644 --- a/tool/src/org/antlr/v4/codegen/src/Choice.java +++ b/tool/src/org/antlr/v4/codegen/src/Choice.java @@ -1,7 +1,7 @@ package org.antlr.v4.codegen.src; import org.antlr.v4.automata.BlockStartState; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.GrammarAST; import java.util.ArrayList; @@ -13,18 +13,18 @@ public abstract class Choice extends SrcOp { public List alts; public List preamble; - public Choice(CodeGenerator gen, GrammarAST blkOrEbnfRootAST, List alts) { - this.gen = gen; + public Choice(OutputModelFactory factory, GrammarAST blkOrEbnfRootAST, List alts) { + this.factory = factory; this.ast = blkOrEbnfRootAST; this.alts = alts; this.decision = ((BlockStartState)blkOrEbnfRootAST.nfaState).decision; } public void addPreambleOp(SrcOp op) { - preamble = new ArrayList(); + if ( preamble==null ) preamble = new ArrayList(); preamble.add(op); } - + @Override public List getChildren() { final List sup = super.getChildren(); diff --git a/tool/src/org/antlr/v4/codegen/src/CodeBlock.java b/tool/src/org/antlr/v4/codegen/src/CodeBlock.java index e813aeb83..236f2beda 100644 --- a/tool/src/org/antlr/v4/codegen/src/CodeBlock.java +++ b/tool/src/org/antlr/v4/codegen/src/CodeBlock.java @@ -1,6 +1,6 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import java.util.ArrayList; import java.util.List; @@ -9,15 +9,15 @@ import java.util.List; public class CodeBlock extends SrcOp { public List ops; - public CodeBlock(CodeGenerator gen) { this.gen = gen; } + public CodeBlock(OutputModelFactory factory) { this.factory = factory; } - public CodeBlock(CodeGenerator gen, List ops) { - this.gen = gen; + public CodeBlock(OutputModelFactory factory, List ops) { + super(factory); this.ops = ops; } - public CodeBlock(CodeGenerator gen, final SrcOp elem) { - this(gen, new ArrayList() {{ add(elem); }}); + public CodeBlock(OutputModelFactory factory, final SrcOp elem) { + this(factory, new ArrayList() {{ add(elem); }}); } @Override diff --git a/tool/src/org/antlr/v4/codegen/src/InvokeRule.java b/tool/src/org/antlr/v4/codegen/src/InvokeRule.java index 572e6b2ae..86647e9ca 100644 --- a/tool/src/org/antlr/v4/codegen/src/InvokeRule.java +++ b/tool/src/org/antlr/v4/codegen/src/InvokeRule.java @@ -1,7 +1,7 @@ package org.antlr.v4.codegen.src; import org.antlr.v4.analysis.LinearApproximator; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; @@ -14,8 +14,8 @@ public class InvokeRule extends SrcOp { public List args; public BitSetDef follow; - public InvokeRule(CodeGenerator gen, GrammarAST ast, GrammarAST labelAST) { - this.gen = gen; + public InvokeRule(OutputModelFactory factory, GrammarAST ast, GrammarAST labelAST) { + this.factory = factory; this.ast = ast; this.name = ast.getText(); if ( labelAST!=null ) this.label = labelAST.getText(); @@ -24,9 +24,10 @@ public class InvokeRule extends SrcOp { // split and translate argAction } // compute follow - LinearApproximator approx = new LinearApproximator(gen.g, -1); + LinearApproximator approx = new LinearApproximator(factory.g, -1); IntervalSet fset = approx.LOOK(ast.nfaState.transition(0).target); System.out.println("follow="+follow); - follow = gen.defineFollowBitSet(ast, fset); + follow = factory.createFollowBitSet(ast, fset); + factory.defineBitSet(follow); } } diff --git a/tool/src/org/antlr/v4/codegen/src/LL1Choice.java b/tool/src/org/antlr/v4/codegen/src/LL1Choice.java index 97e5c4005..9d0a20bf2 100644 --- a/tool/src/org/antlr/v4/codegen/src/LL1Choice.java +++ b/tool/src/org/antlr/v4/codegen/src/LL1Choice.java @@ -2,7 +2,7 @@ package org.antlr.v4.codegen.src; import org.antlr.v4.analysis.LinearApproximator; import org.antlr.v4.automata.DFA; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; @@ -15,14 +15,14 @@ public class LL1Choice extends Choice { public List altLook; /** Lookahead for each alt 1..n */ public IntervalSet[] altLookSets; - public LL1Choice(CodeGenerator gen, GrammarAST blkAST, List alts) { - super(gen, blkAST, alts); - DFA dfa = gen.g.decisionDFAs.get(decision); + public LL1Choice(OutputModelFactory factory, GrammarAST blkAST, List alts) { + super(factory, blkAST, alts); + DFA dfa = factory.g.decisionDFAs.get(decision); altLookSets = LinearApproximator.getLL1LookaheadSets(dfa); altLook = new ArrayList(); for (int a=1; a alts) { - super(gen, blkAST, alts); + public LL1OptionalBlock(OutputModelFactory factory, GrammarAST blkAST, List alts) { + super(factory, blkAST, alts); } } diff --git a/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlockSingleAlt.java b/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlockSingleAlt.java index 79ac29775..6fd7aba80 100644 --- a/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlockSingleAlt.java +++ b/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlockSingleAlt.java @@ -1,6 +1,6 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; @@ -10,10 +10,15 @@ import java.util.List; /** */ public class LL1OptionalBlockSingleAlt extends LL1Choice { public Object expr; - public LL1OptionalBlockSingleAlt(CodeGenerator gen, GrammarAST blkAST, List alts) { - super(gen, blkAST, alts); + public LL1OptionalBlockSingleAlt(OutputModelFactory factory, GrammarAST blkAST, List alts) { + super(factory, blkAST, alts); IntervalSet look = altLookSets[1]; - expr = gen.getLL1Test(this, look, blkAST); + expr = factory.getLL1Test(look, blkAST); + if ( expr instanceof TestSetInline ) { + TestSetInline e = (TestSetInline)expr; + CaptureNextToken nextToken = new CaptureNextToken(e.varName); + addPreambleOp(nextToken); + } } @Override diff --git a/tool/src/org/antlr/v4/codegen/src/LL1PlusBlock.java b/tool/src/org/antlr/v4/codegen/src/LL1PlusBlock.java index 4832ab95b..ff4c30f70 100644 --- a/tool/src/org/antlr/v4/codegen/src/LL1PlusBlock.java +++ b/tool/src/org/antlr/v4/codegen/src/LL1PlusBlock.java @@ -2,7 +2,7 @@ package org.antlr.v4.codegen.src; import org.antlr.v4.automata.DFA; import org.antlr.v4.automata.PlusBlockStartState; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; @@ -13,16 +13,16 @@ public class LL1PlusBlock extends LL1Choice { public String loopLabel; public String loopCounterVar; public String[] exitLook; - public LL1PlusBlock(CodeGenerator gen, GrammarAST blkAST, List alts) { - super(gen, blkAST, alts); + public LL1PlusBlock(OutputModelFactory factory, GrammarAST blkAST, List alts) { + super(factory, blkAST, alts); PlusBlockStartState plusStart = (PlusBlockStartState)blkAST.nfaState; int enterExitDecision = plusStart.decision; - DFA dfa = gen.g.decisionDFAs.get(enterExitDecision); + DFA dfa = factory.g.decisionDFAs.get(enterExitDecision); IntervalSet exitLook = dfa.startState.edge(1).label; - this.exitLook = gen.target.getTokenTypesAsTargetLabels(gen.g, exitLook.toArray()); + this.exitLook = factory.gen.target.getTokenTypesAsTargetLabels(factory.g, exitLook.toArray()); - loopLabel = gen.getLoopLabel(blkAST); - loopCounterVar = gen.getLoopCounter(blkAST); + loopLabel = factory.getLoopLabel(blkAST); + loopCounterVar = factory.getLoopCounter(blkAST); } } diff --git a/tool/src/org/antlr/v4/codegen/src/LL1PlusBlockSingleAlt.java b/tool/src/org/antlr/v4/codegen/src/LL1PlusBlockSingleAlt.java index 4c41eb720..0a2dcab7c 100644 --- a/tool/src/org/antlr/v4/codegen/src/LL1PlusBlockSingleAlt.java +++ b/tool/src/org/antlr/v4/codegen/src/LL1PlusBlockSingleAlt.java @@ -1,6 +1,6 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; @@ -10,10 +10,16 @@ import java.util.List; /** */ public class LL1PlusBlockSingleAlt extends LL1Choice { public Object expr; - public LL1PlusBlockSingleAlt(CodeGenerator gen, GrammarAST blkAST, List alts) { - super(gen, blkAST, alts); + public List loopIteration = new ArrayList(); + public LL1PlusBlockSingleAlt(OutputModelFactory factory, GrammarAST blkAST, List alts) { + super(factory, blkAST, alts); IntervalSet loopBackLook = altLookSets[2]; // loop exit is alt 1 - expr = gen.getLL1Test(this, loopBackLook, blkAST); + expr = factory.getLL1Test(loopBackLook, blkAST); + if ( expr instanceof TestSetInline ) { + CaptureNextToken nextToken = new CaptureNextToken("la"+blkAST.token.getTokenIndex()); + addPreambleOp(nextToken); + loopIteration.add(nextToken); + } } @Override diff --git a/tool/src/org/antlr/v4/codegen/src/LL1StarBlock.java b/tool/src/org/antlr/v4/codegen/src/LL1StarBlock.java index b4852cfec..be062cc3b 100644 --- a/tool/src/org/antlr/v4/codegen/src/LL1StarBlock.java +++ b/tool/src/org/antlr/v4/codegen/src/LL1StarBlock.java @@ -2,7 +2,7 @@ package org.antlr.v4.codegen.src; import org.antlr.v4.automata.DFA; import org.antlr.v4.automata.StarBlockStartState; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; @@ -12,20 +12,20 @@ import java.util.List; public class LL1StarBlock extends LL1Choice { public String loopLabel; public String[] exitLook; - public LL1StarBlock(CodeGenerator gen, GrammarAST blkAST, List alts) { + public LL1StarBlock(OutputModelFactory factory, GrammarAST blkAST, List alts) { // point at choice block inside outermost enter-exit choice - super(gen, ((StarBlockStartState)blkAST.nfaState).transition(0).target.ast, alts); + super(factory, ((StarBlockStartState)blkAST.nfaState).transition(0).target.ast, alts); StarBlockStartState starStart = (StarBlockStartState)blkAST.nfaState; int enterExitDecision = starStart.decision; // BlockStartState blkStart = (BlockStartState)starStart.transition(0).target; // this.decision = blkStart.decision; int loopbackDecision = starStart.loopBackState.decision; - DFA dfa = gen.g.decisionDFAs.get(enterExitDecision); + DFA dfa = factory.g.decisionDFAs.get(enterExitDecision); IntervalSet exitLook = dfa.startState.edge(1).label; - this.exitLook = gen.target.getTokenTypesAsTargetLabels(gen.g, exitLook.toArray()); + this.exitLook = factory.gen.target.getTokenTypesAsTargetLabels(factory.g, exitLook.toArray()); - loopLabel = gen.getLoopLabel(blkAST); + loopLabel = factory.getLoopLabel(blkAST); } } diff --git a/tool/src/org/antlr/v4/codegen/src/LL1StarBlockSingleAlt.java b/tool/src/org/antlr/v4/codegen/src/LL1StarBlockSingleAlt.java index 20cd21a81..7bfc3d79d 100644 --- a/tool/src/org/antlr/v4/codegen/src/LL1StarBlockSingleAlt.java +++ b/tool/src/org/antlr/v4/codegen/src/LL1StarBlockSingleAlt.java @@ -1,6 +1,6 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; @@ -10,10 +10,17 @@ import java.util.List; /** */ public class LL1StarBlockSingleAlt extends LL1Choice { public Object expr; - public LL1StarBlockSingleAlt(CodeGenerator gen, GrammarAST blkAST, List alts) { - super(gen, blkAST, alts); + public List loopIteration = new ArrayList(); + public LL1StarBlockSingleAlt(OutputModelFactory factory, GrammarAST blkAST, List alts) { + super(factory, blkAST, alts); IntervalSet look = altLookSets[1]; - expr = gen.getLL1Test(this, look, blkAST); + expr = factory.getLL1Test(look, blkAST); + if ( expr instanceof TestSetInline ) { + TestSetInline e = (TestSetInline)expr; + CaptureNextToken nextToken = new CaptureNextToken(e.varName); + addPreambleOp(nextToken); + loopIteration.add(nextToken); + } } @Override diff --git a/tool/src/org/antlr/v4/codegen/src/LLStarOptionalBlock.java b/tool/src/org/antlr/v4/codegen/src/LLStarOptionalBlock.java index 3135e9181..febd93962 100644 --- a/tool/src/org/antlr/v4/codegen/src/LLStarOptionalBlock.java +++ b/tool/src/org/antlr/v4/codegen/src/LLStarOptionalBlock.java @@ -1,6 +1,6 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.BlockAST; import java.util.List; @@ -8,8 +8,8 @@ import java.util.List; /** */ public class LLStarOptionalBlock extends OptionalBlock { public DFADef dfaDef; - public LLStarOptionalBlock(CodeGenerator gen, BlockAST blkAST, List alts) { - super(gen, blkAST, alts); - dfaDef = gen.defineDFA(ast, gen.g.decisionDFAs.get(decision)); + public LLStarOptionalBlock(OutputModelFactory factory, BlockAST blkAST, List alts) { + super(factory, blkAST, alts); + dfaDef = factory.defineDFA(ast, factory.g.decisionDFAs.get(decision)); } } diff --git a/tool/src/org/antlr/v4/codegen/src/LLkOptionalBlock.java b/tool/src/org/antlr/v4/codegen/src/LLkOptionalBlock.java index e199bb801..9a4681d68 100644 --- a/tool/src/org/antlr/v4/codegen/src/LLkOptionalBlock.java +++ b/tool/src/org/antlr/v4/codegen/src/LLkOptionalBlock.java @@ -1,13 +1,13 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.BlockAST; import java.util.List; /** */ public class LLkOptionalBlock extends OptionalBlock { - public LLkOptionalBlock(CodeGenerator gen, BlockAST blkAST, List alts) { - super(gen, blkAST, alts); + public LLkOptionalBlock(OutputModelFactory factory, BlockAST blkAST, List alts) { + super(factory, blkAST, alts); } } diff --git a/tool/src/org/antlr/v4/codegen/src/MatchToken.java b/tool/src/org/antlr/v4/codegen/src/MatchToken.java index 99ae821b8..364e9ecc2 100644 --- a/tool/src/org/antlr/v4/codegen/src/MatchToken.java +++ b/tool/src/org/antlr/v4/codegen/src/MatchToken.java @@ -1,7 +1,7 @@ package org.antlr.v4.codegen.src; import org.antlr.v4.analysis.LinearApproximator; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; import org.antlr.v4.tool.TerminalAST; @@ -12,14 +12,15 @@ public class MatchToken extends SrcOp { public BitSetDef follow; public String label; - public MatchToken(CodeGenerator gen, TerminalAST ast, GrammarAST labelAST) { - this.gen = gen; + public MatchToken(OutputModelFactory factory, TerminalAST ast, GrammarAST labelAST) { + this.factory = factory; name = ast.getText(); if ( labelAST!=null ) this.label = labelAST.getText(); - LinearApproximator approx = new LinearApproximator(gen.g, -1); + LinearApproximator approx = new LinearApproximator(factory.g, -1); IntervalSet fset = approx.LOOK(ast.nfaState.transition(0).target); System.out.println("follow="+follow); - follow = gen.defineFollowBitSet(ast, fset); + follow = factory.createFollowBitSet(ast, fset); + factory.defineBitSet(follow); } } diff --git a/tool/src/org/antlr/v4/codegen/src/OptionalBlock.java b/tool/src/org/antlr/v4/codegen/src/OptionalBlock.java index 7047d4a20..a2bee4433 100644 --- a/tool/src/org/antlr/v4/codegen/src/OptionalBlock.java +++ b/tool/src/org/antlr/v4/codegen/src/OptionalBlock.java @@ -1,13 +1,13 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.GrammarAST; import java.util.List; /** */ public abstract class OptionalBlock extends Choice { - public OptionalBlock(CodeGenerator gen, GrammarAST blkAST, List alts) { - super(gen, blkAST, alts); + public OptionalBlock(OutputModelFactory factory, GrammarAST blkAST, List alts) { + super(factory, blkAST, alts); } } diff --git a/tool/src/org/antlr/v4/codegen/src/OutputModelObject.java b/tool/src/org/antlr/v4/codegen/src/OutputModelObject.java index 817a460b2..f1b13d961 100644 --- a/tool/src/org/antlr/v4/codegen/src/OutputModelObject.java +++ b/tool/src/org/antlr/v4/codegen/src/OutputModelObject.java @@ -1,13 +1,13 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.GrammarAST; import java.util.List; /** */ public abstract class OutputModelObject { - public CodeGenerator gen; + public OutputModelFactory factory; public GrammarAST ast; /** If the output model object encloses some other model objects, @@ -24,10 +24,10 @@ public abstract class OutputModelObject { public OutputModelObject() {;} - public OutputModelObject(CodeGenerator gen) { this.gen = gen; } + public OutputModelObject(OutputModelFactory factory) { this.factory = factory; } - public OutputModelObject(CodeGenerator gen, GrammarAST ast) { - this.gen = gen; + public OutputModelObject(OutputModelFactory factory, GrammarAST ast) { + this.factory = factory; this.ast = ast; } } diff --git a/tool/src/org/antlr/v4/codegen/src/Parser.java b/tool/src/org/antlr/v4/codegen/src/Parser.java index 3765a5fa5..102b68714 100644 --- a/tool/src/org/antlr/v4/codegen/src/Parser.java +++ b/tool/src/org/antlr/v4/codegen/src/Parser.java @@ -1,6 +1,6 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.Rule; import java.util.ArrayList; @@ -12,11 +12,11 @@ public class Parser extends OutputModelObject { public List funcs = new ArrayList(); ParserFile file; - public Parser(CodeGenerator gen, ParserFile file) { - this.gen = gen; + public Parser(OutputModelFactory factory, ParserFile file) { + this.factory = factory; this.file = file; // who contains us? - name = gen.g.getRecognizerName(); - for (Rule r : gen.g.rules.values()) funcs.add( new RuleFunction(gen, r) ); + name = factory.g.getRecognizerName(); + for (Rule r : factory.g.rules.values()) funcs.add( new RuleFunction(factory, r) ); // We create dfa and bitsets during rule function construction. // They get stored in code gen for convenience as we walk rule block tree diff --git a/tool/src/org/antlr/v4/codegen/src/ParserFile.java b/tool/src/org/antlr/v4/codegen/src/ParserFile.java index 1ea32d705..a20c8e8ed 100644 --- a/tool/src/org/antlr/v4/codegen/src/ParserFile.java +++ b/tool/src/org/antlr/v4/codegen/src/ParserFile.java @@ -1,6 +1,6 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import java.util.ArrayList; import java.util.List; @@ -12,11 +12,15 @@ public class ParserFile extends OutputModelObject { public List dfaDefs = new ArrayList(); public List bitSetDefs = new ArrayList(); - public ParserFile(CodeGenerator gen, String fileName) { - this.gen = gen; + public ParserFile(OutputModelFactory factory, String fileName) { + super(factory); this.fileName = fileName; } + public void defineBitSet(BitSetDef b) { + bitSetDefs.add(b); + } + @Override public List getChildren() { final List sup = super.getChildren(); diff --git a/tool/src/org/antlr/v4/codegen/src/RuleFunction.java b/tool/src/org/antlr/v4/codegen/src/RuleFunction.java index f971179a4..71b09f856 100644 --- a/tool/src/org/antlr/v4/codegen/src/RuleFunction.java +++ b/tool/src/org/antlr/v4/codegen/src/RuleFunction.java @@ -1,7 +1,7 @@ package org.antlr.v4.codegen.src; import org.antlr.runtime.tree.CommonTreeNodeStream; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.codegen.SourceGenTriggers; import org.antlr.v4.misc.Utils; import org.antlr.v4.parse.ANTLRParser; @@ -30,8 +30,8 @@ public class RuleFunction extends OutputModelObject { public SrcOp code; - public RuleFunction(CodeGenerator gen, Rule r) { - this.gen = gen; + public RuleFunction(OutputModelFactory factory, Rule r) { + super(factory); this.name = r.name; if ( r.modifiers!=null && r.modifiers.size()>0 ) { this.modifiers = new ArrayList(); @@ -50,7 +50,7 @@ public class RuleFunction extends OutputModelObject { GrammarASTAdaptor adaptor = new GrammarASTAdaptor(r.ast.token.getInputStream()); GrammarAST blk = (GrammarAST)r.ast.getFirstChildWithType(ANTLRParser.BLOCK); CommonTreeNodeStream nodes = new CommonTreeNodeStream(adaptor,blk); - SourceGenTriggers genTriggers = new SourceGenTriggers(nodes, gen); + SourceGenTriggers genTriggers = new SourceGenTriggers(nodes, factory); try { code = genTriggers.block(null,null); // GEN Instr OBJECTS } diff --git a/tool/src/org/antlr/v4/codegen/src/SemPred.java b/tool/src/org/antlr/v4/codegen/src/SemPred.java index 957d9a1c1..07af4d378 100644 --- a/tool/src/org/antlr/v4/codegen/src/SemPred.java +++ b/tool/src/org/antlr/v4/codegen/src/SemPred.java @@ -1,9 +1,9 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.GrammarAST; /** */ public class SemPred extends SrcOp { - public SemPred(CodeGenerator gen, GrammarAST ast) { super(gen,ast); } + public SemPred(OutputModelFactory factory, GrammarAST ast) { super(factory,ast); } } diff --git a/tool/src/org/antlr/v4/codegen/src/SrcOp.java b/tool/src/org/antlr/v4/codegen/src/SrcOp.java index ba56d9548..6f8b2bbb5 100644 --- a/tool/src/org/antlr/v4/codegen/src/SrcOp.java +++ b/tool/src/org/antlr/v4/codegen/src/SrcOp.java @@ -1,11 +1,11 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.tool.GrammarAST; /** */ public abstract class SrcOp extends OutputModelObject { public SrcOp() {;} - public SrcOp(CodeGenerator gen) { super(gen); } - public SrcOp(CodeGenerator gen, GrammarAST ast) { super(gen,ast); } + public SrcOp(OutputModelFactory factory) { super(factory); } + public SrcOp(OutputModelFactory factory, GrammarAST ast) { super(factory,ast); } } diff --git a/tool/src/org/antlr/v4/codegen/src/TestSet.java b/tool/src/org/antlr/v4/codegen/src/TestSet.java index 869e44b6b..e919d7860 100644 --- a/tool/src/org/antlr/v4/codegen/src/TestSet.java +++ b/tool/src/org/antlr/v4/codegen/src/TestSet.java @@ -1,13 +1,14 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; /** */ public class TestSet extends OutputModelObject { public BitSetDef set; - public TestSet(CodeGenerator gen, GrammarAST blkAST, IntervalSet set) { - this.set = gen.defineTestBitSet(blkAST, set); + public TestSet(OutputModelFactory factory, GrammarAST blkAST, IntervalSet set) { + this.set = factory.createTestBitSet(blkAST, set); + factory.defineBitSet(this.set); } } diff --git a/tool/src/org/antlr/v4/codegen/src/TestSetInline.java b/tool/src/org/antlr/v4/codegen/src/TestSetInline.java index 72b88aace..8d4d3b08a 100644 --- a/tool/src/org/antlr/v4/codegen/src/TestSetInline.java +++ b/tool/src/org/antlr/v4/codegen/src/TestSetInline.java @@ -1,20 +1,21 @@ package org.antlr.v4.codegen.src; -import org.antlr.v4.codegen.CodeGenerator; +import org.antlr.v4.codegen.OutputModelFactory; import org.antlr.v4.misc.IntervalSet; import org.antlr.v4.tool.GrammarAST; /** */ public class TestSetInline extends OutputModelObject { + public String varName; public String[] ttypes; - public CaptureNextToken nextToken; - public Choice choice; - public TestSetInline(CodeGenerator gen, Choice choice, GrammarAST blkAST, IntervalSet set) { - this.gen = gen; - this.ast = blkAST; - this.ttypes = gen.target.getTokenTypesAsTargetLabels(gen.g, set.toArray()); - this.choice = choice; - nextToken = new CaptureNextToken("la"+blkAST.token.getTokenIndex()); - choice.addPreambleOp(nextToken); +// public CaptureNextToken nextToken; +// public Choice choice; + public TestSetInline(OutputModelFactory factory, GrammarAST blkAST, IntervalSet set) { + super(factory, blkAST); + this.ttypes = factory.gen.target.getTokenTypesAsTargetLabels(factory.g, set.toArray()); + this.varName = "la"+blkAST.token.getTokenIndex(); +// this.choice = choice; +// nextToken = new CaptureNextToken(); +// choice.addPreambleOp(nextToken); } }