From bf194654373d42d1200e337312cf825403a721a0 Mon Sep 17 00:00:00 2001 From: parrt Date: Fri, 9 Sep 2011 17:08:13 -0800 Subject: [PATCH] Got a rule labels added to the tree and also altered code generation so that it pays attention to the labels. fairly major surgery but it's a nice refactoring. [git-p4: depot-paths = "//depot/code/antlr4/main/": change = 9062] --- .../antlr/v4/runtime/ParserRuleContext.java | 2 +- tool/playground/T.g | 6 ++- .../v4/tool/templates/codegen/Java/Java.stg | 37 ++++++++++++++----- .../v4/codegen/BlankOutputModelFactory.java | 2 +- .../v4/codegen/OutputModelController.java | 2 +- .../antlr/v4/codegen/OutputModelFactory.java | 2 +- .../org/antlr/v4/codegen/ParserFactory.java | 9 ++++- .../model/CodeBlockForOuterMostAlt.java | 16 ++++++++ .../antlr/v4/codegen/model/ListenerFile.java | 20 ++++++++-- .../antlr/v4/codegen/model/RuleFunction.java | 11 ++++-- .../model/SwitchedVisitorDispatchMethod.java | 23 ++++++++++++ .../codegen/model/VisitorDispatchMethod.java | 18 +++++++++ .../v4/codegen/model/decl/StructDecl.java | 23 +++++++++--- tool/src/org/antlr/v4/misc/CharSupport.java | 3 ++ tool/src/org/antlr/v4/parse/ANTLRLexer.g | 1 + tool/src/org/antlr/v4/parse/ANTLRParser.g | 19 +++++++--- .../antlr/v4/semantics/AttributeChecks.java | 8 ++-- .../v4/semantics/BasicSemanticChecks.java | 4 +- tool/src/org/antlr/v4/tool/AltAST.java | 7 +++- tool/src/org/antlr/v4/tool/Alternative.java | 12 +++--- tool/src/org/antlr/v4/tool/Rule.java | 21 ++++++++--- 21 files changed, 197 insertions(+), 49 deletions(-) create mode 100644 tool/src/org/antlr/v4/codegen/model/CodeBlockForOuterMostAlt.java create mode 100644 tool/src/org/antlr/v4/codegen/model/SwitchedVisitorDispatchMethod.java create mode 100644 tool/src/org/antlr/v4/codegen/model/VisitorDispatchMethod.java diff --git a/runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java b/runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java index 3837d857d..8573f1cd9 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java +++ b/runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java @@ -57,7 +57,7 @@ public class ParserRuleContext extends RuleContext { public int ruleIndex; /** Set during parsing to identify which alt of rule parser is in. */ - public int alt; + public int altNum; public ParserRuleContext() { super(); } diff --git a/tool/playground/T.g b/tool/playground/T.g index 8d7c4cd68..2d79111f3 100644 --- a/tool/playground/T.g +++ b/tool/playground/T.g @@ -1,10 +1,12 @@ grammar T; s : i=ifstat {System.out.println(_input.toString(0,_input.index()-1));} ; -ifstat : 'if' '(' INT ')' ID '=' ID ';' ; + +ifstat : 'if' '(' INT ')' ID '=' ID ';' # DoIf; r[int x] returns [int y] locals [int z] - : name=ID + : name=ID # foo + | ID (ID|';'{;}) # bar ; EQ : '=' ; 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 9227398ad..051bb8ab8 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 @@ -41,9 +41,9 @@ import org.antlr.v4.runtime.tree.ParseTreeListener; @SuppressWarnings({"all", "warnings", "unchecked", "unused"}) public interface Listener extends ParseTreeListener { - .Context ctx); -void exitRule(.Context ctx);}; separator="\n"> + (.Context ctx); +void exit(.Context ctx);}; separator="\n"> } >> @@ -55,9 +55,9 @@ import org.antlr.v4.runtime.Token; @SuppressWarnings({"all", "warnings", "unchecked", "unused"}) public class BlankListener implements Listener { - .Context ctx) { \} -public void exitRule(.Context ctx) { \}}; separator="\n"> + (.Context ctx) { \} +public void exit(.Context ctx) { \}}; separator="\n"> public void enterEveryRule(ParserRuleContext ctx) { } public void exitEveryRule(ParserRuleContext ctx) { } @@ -188,6 +188,11 @@ public QStack\<\> _stk = new QStack\<> +CodeBlockForOuterMostAlt(c, locals, preamble, ops) ::= << +_ctx.altNum = ; + +>> + CodeBlockForAlt(c, locals, preamble, ops) ::= << { @@ -442,7 +447,7 @@ ListLabelName(label) ::= "