diff --git a/runtime/Java/src/org/antlr/v4/runtime/BaseRecognizer.java b/runtime/Java/src/org/antlr/v4/runtime/BaseRecognizer.java index e8e352dc0..451429456 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/BaseRecognizer.java +++ b/runtime/Java/src/org/antlr/v4/runtime/BaseRecognizer.java @@ -688,6 +688,7 @@ public abstract class BaseRecognizer extends Recognizer { * parse trees as well. */ public void enterRule(int ruleIndex) { + _ctx.ruleIndex = ruleIndex; if ( buildParseTrees ) { if ( _ctx.parent!=null ) _ctx.parent.addChild(_ctx); } diff --git a/runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java b/runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java index 3ff4ccfe6..8520c2dcd 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java +++ b/runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java @@ -49,6 +49,9 @@ import org.stringtemplate.v4.ST; * satisfy the superclass interface. */ public class ParserRuleContext extends RuleContext { + /** Set during parsing to identify which rule parser is in. */ + public int ruleIndex; + public Token start, stop; public Object tree; public ST st; 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 4ac8a7e4c..dc82d2d6e 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 @@ -44,6 +44,8 @@ public class extends Parser { "\", "\", "\", "}; separator=", ", wrap, anchor> }; + public static final int + = }; separator=", ", wrap, anchor>; public static final String[] ruleNames = { "}; separator=", ", wrap, anchor> }; diff --git a/tool/src/org/antlr/v4/codegen/model/Parser.java b/tool/src/org/antlr/v4/codegen/model/Parser.java index 78cf683db..5a6af826b 100644 --- a/tool/src/org/antlr/v4/codegen/model/Parser.java +++ b/tool/src/org/antlr/v4/codegen/model/Parser.java @@ -40,6 +40,7 @@ public class Parser extends OutputModelObject { public Map tokens; public String[] tokenNames; public Set ruleNames; + public Collection rules; public ParserFile file; @ModelElement public List funcs = new ArrayList(); @@ -59,6 +60,7 @@ public class Parser extends OutputModelObject { } tokenNames = g.getTokenDisplayNames(); ruleNames = g.rules.keySet(); + rules = g.rules.values(); atn = new SerializedATN(factory, g.atn); } }