From 857600be43fd5f7d7d2ebaf5082278c8038b80c5 Mon Sep 17 00:00:00 2001 From: Peter Boyer Date: Fri, 8 Jan 2016 09:28:38 -0500 Subject: [PATCH] Numerous test fixes --- runtime-testsuite/pom.xml | 2 +- .../org/antlr/v4/test/runtime/go/Go.test.stg | 18 +-- .../test/runtime/go/TestCompositeParsers.java | 2 +- .../v4/test/runtime/go/TestLexerExec.java | 10 +- .../test/runtime/go/TestSemPredEvalLexer.java | 4 +- .../runtime/go/TestSemPredEvalParser.java | 36 ++--- .../antlr/v4/test/runtime/go/TestSets.java | 56 +++---- .../Go/src/antlr4/DiagnosticErrorListener.go | 8 +- runtime/Go/src/antlr4/ErrorListener.go | 3 +- runtime/Go/src/antlr4/ErrorStrategy.go | 8 +- runtime/Go/src/antlr4/Lexer.go | 4 +- runtime/Go/src/antlr4/SemanticContext.go | 2 + runtime/Go/src/antlr4/Utils.go | 11 +- .../antlr/v4/tool/templates/codegen/Go/Go.stg | 139 +++++++++++------- .../v4/codegen/model/decl/StructDecl.java | 22 +++ 15 files changed, 201 insertions(+), 124 deletions(-) diff --git a/runtime-testsuite/pom.xml b/runtime-testsuite/pom.xml index 8053d3e44..38c7b6779 100644 --- a/runtime-testsuite/pom.xml +++ b/runtime-testsuite/pom.xml @@ -72,7 +72,7 @@ - **/java/Test*.java + **/go/Test*.java diff --git a/runtime-testsuite/resources/org/antlr/v4/test/runtime/go/Go.test.stg b/runtime-testsuite/resources/org/antlr/v4/test/runtime/go/Go.test.stg index dc28a8f2d..5dd4518bf 100644 --- a/runtime-testsuite/resources/org/antlr/v4/test/runtime/go/Go.test.stg +++ b/runtime-testsuite/resources/org/antlr/v4/test/runtime/go/Go.test.stg @@ -173,9 +173,9 @@ AssertIsList(v) ::= "List\ __ttt__ = ;" // just use type system AssignLocal(s,v) ::= " = ;" -InitIntMember(n,v) ::= <%var int = ; var _ int = ; // to disable unused var %> +InitIntMember(n,v) ::= <%var int = ; var _ int = ; %> -InitBooleanMember(n,v) ::= <%var bool= ; var _ bool = ; // to disable unused var %> +InitBooleanMember(n,v) ::= <%var bool= ; var _ bool = ; %> GetMember(n) ::= <%this.%> @@ -213,13 +213,13 @@ TextEquals(a) ::= <%l.GetText() == ""%> PlusText(a) ::= <%"" + l.GetText()%> -InputText() ::= "p.GetInput().GetText()" +InputText() ::= "p.GetTokenStream().GetAllText()" LTEquals(i, v) ::= <%p.GetTokenStream().LT().GetText() == %> LANotEquals(i, v) ::= <%p.GetTokenStream().LA()!=%> -TokenStartColumnEquals(i) ::= <%this._tokenStartCharPositionInLine==%> +TokenStartColumnEquals(i) ::= <%this.TokenStartCharPositionInLine==%> ImportListener(X) ::= "" @@ -321,10 +321,10 @@ func NewPositionAdjustingLexerATNSimulator(recog antlr4.Lexer, atn *antlr4.ATN, } func (this *NewPositionAdjustingLexerATNSimulator) ResetAcceptPosition(input CharStream, index, line, charPositionInLine int) { - this.input.seek(index); - this.line = line; - this.charPositionInLine = charPositionInLine; - this.consume(input); + this.GetInputStream().Seek(index); + this.Line = line; + this.CharPositionInLine = charPositionInLine; + this.Consume(input); } >> @@ -447,7 +447,7 @@ func foo() { Invoke_foo() ::= "foo()" Declare_pred() ::= << -bool pred(bool v) { +func pred(v bool) bool { fmt.Println("eval="+fmt.Sprint(v)) return v } diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeParsers.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeParsers.java index 84f66f95e..8a381fab8 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeParsers.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestCompositeParsers.java @@ -379,7 +379,7 @@ public class TestCompositeParsers extends BaseTest { mkdir(parserpkgdir); String slave_S = "parser grammar S;\n" + - "a @after {var x int = 0; var _ int = x; // to disable unused var } : B;"; + "a @after {var x int = 0; var _ int = x; } : B;"; writeFile(parserpkgdir, "S.g4", slave_S); StringBuilder grammarBuilder = new StringBuilder(62); diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerExec.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerExec.java index 1abdac2f2..5201a24fa 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerExec.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestLexerExec.java @@ -4625,7 +4625,7 @@ public class TestLexerExec extends BaseTest { public void testPositionAdjustingLexer() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(3026); + StringBuilder grammarBuilder = new StringBuilder(3037); grammarBuilder.append("lexer grammar PositionAdjustingLexer;\n"); grammarBuilder.append("\n"); grammarBuilder.append("@members {\n"); @@ -4712,10 +4712,10 @@ public class TestLexerExec extends BaseTest { grammarBuilder.append("}\n"); grammarBuilder.append("\n"); grammarBuilder.append("func (this *NewPositionAdjustingLexerATNSimulator) ResetAcceptPosition(input CharStream, index, line, charPositionInLine int) {\n"); - grammarBuilder.append(" this.input.seek(index);\n"); - grammarBuilder.append(" this.line = line;\n"); - grammarBuilder.append(" this.charPositionInLine = charPositionInLine;\n"); - grammarBuilder.append(" this.consume(input);\n"); + grammarBuilder.append(" this.GetInputStream().Seek(index);\n"); + grammarBuilder.append(" this.Line = line;\n"); + grammarBuilder.append(" this.CharPositionInLine = charPositionInLine;\n"); + grammarBuilder.append(" this.Consume(input);\n"); grammarBuilder.append("}\n"); grammarBuilder.append("\n"); grammarBuilder.append("}\n"); diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalLexer.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalLexer.java index 6f0ecaf7e..6d27b6ba0 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalLexer.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalLexer.java @@ -113,10 +113,10 @@ public class TestSemPredEvalLexer extends BaseTest { public void testIndent() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(153); + StringBuilder grammarBuilder = new StringBuilder(152); grammarBuilder.append("lexer grammar L;\n"); grammarBuilder.append("ID : [a-z]+ ;\n"); - grammarBuilder.append("INDENT : [ \\t]+ { this._tokenStartCharPositionInLine==0 }?\n"); + grammarBuilder.append("INDENT : [ \\t]+ { this.TokenStartCharPositionInLine==0 }?\n"); grammarBuilder.append(" { fmt.Println(\"INDENT\") } ;\n"); grammarBuilder.append("NL : '\\n';\n"); grammarBuilder.append("WS : [ \\t]+ ;"); diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalParser.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalParser.java index 990c078c0..b3decdb14 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalParser.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSemPredEvalParser.java @@ -74,9 +74,9 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testActionHidesPreds() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(268); + StringBuilder grammarBuilder = new StringBuilder(243); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {var i int = 0; var _ int = i; // to disable unused var }\n"); + grammarBuilder.append("@members {var i int = 0; var _ int = i; }\n"); grammarBuilder.append("s : a+ ;\n"); grammarBuilder.append("a : {this.i = 1;} ID {this.i == 1}? {fmt.Println(\"alt 1\")}\n"); grammarBuilder.append(" | {this.i = 2;} ID {this.i == 2}? {fmt.Println(\"alt 2\")}\n"); @@ -100,10 +100,10 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testActionsHidePredsInGlobalFOLLOW() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(280); + StringBuilder grammarBuilder = new StringBuilder(285); grammarBuilder.append("grammar T;\n"); grammarBuilder.append("@members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append("func pred(v bool) bool {\n"); grammarBuilder.append(" fmt.Println(\"eval=\"+fmt.Sprint(v))\n"); grammarBuilder.append(" return v\n"); grammarBuilder.append("}\n"); @@ -148,10 +148,10 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testDepedentPredsInGlobalFOLLOW() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(303); + StringBuilder grammarBuilder = new StringBuilder(308); grammarBuilder.append("grammar T;\n"); grammarBuilder.append("@members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append("func pred(v bool) bool {\n"); grammarBuilder.append(" fmt.Println(\"eval=\"+fmt.Sprint(v))\n"); grammarBuilder.append(" return v\n"); grammarBuilder.append("}\n"); @@ -352,9 +352,9 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testPredTestedEvenWhenUnAmbig_1() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(254); + StringBuilder grammarBuilder = new StringBuilder(229); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {var enumKeyword bool= true; var _ bool = enumKeyword; // to disable unused var }\n"); + grammarBuilder.append("@members {var enumKeyword bool= true; var _ bool = enumKeyword; }\n"); grammarBuilder.append("primary\n"); grammarBuilder.append(" : ID {fmt.Println(\"ID \"+$ID.text)}\n"); grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {fmt.Println(\"enum\")}\n"); @@ -374,9 +374,9 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testPredTestedEvenWhenUnAmbig_2() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(254); + StringBuilder grammarBuilder = new StringBuilder(229); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {var enumKeyword bool= true; var _ bool = enumKeyword; // to disable unused var }\n"); + grammarBuilder.append("@members {var enumKeyword bool= true; var _ bool = enumKeyword; }\n"); grammarBuilder.append("primary\n"); grammarBuilder.append(" : ID {fmt.Println(\"ID \"+$ID.text)}\n"); grammarBuilder.append(" | {!this.enumKeyword}? 'enum' {fmt.Println(\"enum\")}\n"); @@ -397,9 +397,9 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testPredicateDependentOnArg() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(243); + StringBuilder grammarBuilder = new StringBuilder(218); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {var i int = 0; var _ int = i; // to disable unused var }\n"); + grammarBuilder.append("@members {var i int = 0; var _ int = i; }\n"); grammarBuilder.append("s : a[2] a[1];\n"); grammarBuilder.append("a[int i]\n"); grammarBuilder.append(" : {$i==1}? ID {fmt.Println(\"alt 1\")}\n"); @@ -423,9 +423,9 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testPredicateDependentOnArg2() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(199); + StringBuilder grammarBuilder = new StringBuilder(174); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {var i int = 0; var _ int = i; // to disable unused var }\n"); + grammarBuilder.append("@members {var i int = 0; var _ int = i; }\n"); grammarBuilder.append("s : a[2] a[1];\n"); grammarBuilder.append("a[int i]\n"); grammarBuilder.append(" : {$i==1}? ID \n"); @@ -447,10 +447,10 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testPredsInGlobalFOLLOW() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(274); + StringBuilder grammarBuilder = new StringBuilder(279); grammarBuilder.append("grammar T;\n"); grammarBuilder.append("@members {\n"); - grammarBuilder.append("bool pred(bool v) {\n"); + grammarBuilder.append("func pred(v bool) bool {\n"); grammarBuilder.append(" fmt.Println(\"eval=\"+fmt.Sprint(v))\n"); grammarBuilder.append(" return v\n"); grammarBuilder.append("}\n"); @@ -599,9 +599,9 @@ public class TestSemPredEvalParser extends BaseTest { @Test public void testToLeftWithVaryingPredicate() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(292); + StringBuilder grammarBuilder = new StringBuilder(267); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("@members {var i int = 0; var _ int = i; // to disable unused var }\n"); + grammarBuilder.append("@members {var i int = 0; var _ int = i; }\n"); grammarBuilder.append("s : ({this.i += 1;\n"); grammarBuilder.append("fmt.Println(\"i=\" + this.i)} a)+ ;\n"); grammarBuilder.append("a : {this.i % 2 == 0}? ID {fmt.Println(\"alt 1\")}\n"); diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSets.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSets.java index f5a8e0187..882293995 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSets.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/go/TestSets.java @@ -54,9 +54,9 @@ public class TestSets extends BaseTest { @Test public void testLexerOptionalSet() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(77); + StringBuilder grammarBuilder = new StringBuilder(86); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("A : ('a'|'b')? 'c' ;"); String grammar = grammarBuilder.toString(); String input ="ac"; @@ -71,9 +71,9 @@ public class TestSets extends BaseTest { @Test public void testLexerPlusSet() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(77); + StringBuilder grammarBuilder = new StringBuilder(86); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("A : ('a'|'b')+ 'c' ;"); String grammar = grammarBuilder.toString(); String input ="abaac"; @@ -88,9 +88,9 @@ public class TestSets extends BaseTest { @Test public void testLexerStarSet() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(77); + StringBuilder grammarBuilder = new StringBuilder(86); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("A : ('a'|'b')* 'c' ;"); String grammar = grammarBuilder.toString(); String input ="abaac"; @@ -175,9 +175,9 @@ public class TestSets extends BaseTest { @Test public void testOptionalLexerSingleElement() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(71); + StringBuilder grammarBuilder = new StringBuilder(80); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("A : 'b'? 'c' ;"); String grammar = grammarBuilder.toString(); String input ="bc"; @@ -192,9 +192,9 @@ public class TestSets extends BaseTest { @Test public void testOptionalSet() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(69); + StringBuilder grammarBuilder = new StringBuilder(78); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')? 'c' {fmt.Println(p.GetInput().GetText())} ;"); + grammarBuilder.append("a : ('a'|'b')? 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); String grammar = grammarBuilder.toString(); String input ="ac"; String found = execParser("T.g4", grammar, "TParser", "TLexer", @@ -208,9 +208,9 @@ public class TestSets extends BaseTest { @Test public void testOptionalSingleElement() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(71); + StringBuilder grammarBuilder = new StringBuilder(80); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A? 'c' {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : A? 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("A : 'b' ;"); String grammar = grammarBuilder.toString(); String input ="bc"; @@ -241,9 +241,9 @@ public class TestSets extends BaseTest { @Test public void testParserNotToken() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(63); + StringBuilder grammarBuilder = new StringBuilder(72); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ~'x' 'z' {fmt.Println(p.GetInput().GetText())} ;"); + grammarBuilder.append("a : ~'x' 'z' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); String grammar = grammarBuilder.toString(); String input ="zz"; String found = execParser("T.g4", grammar, "TParser", "TLexer", @@ -289,9 +289,9 @@ public class TestSets extends BaseTest { @Test public void testPlusLexerSingleElement() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(71); + StringBuilder grammarBuilder = new StringBuilder(80); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("A : 'b'+ 'c' ;"); String grammar = grammarBuilder.toString(); String input ="bbbbc"; @@ -306,9 +306,9 @@ public class TestSets extends BaseTest { @Test public void testPlusSet() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(69); + StringBuilder grammarBuilder = new StringBuilder(78); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')+ 'c' {fmt.Println(p.GetInput().GetText())} ;"); + grammarBuilder.append("a : ('a'|'b')+ 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); String grammar = grammarBuilder.toString(); String input ="abaac"; String found = execParser("T.g4", grammar, "TParser", "TLexer", @@ -322,9 +322,9 @@ public class TestSets extends BaseTest { @Test public void testRuleAsSet() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(76); + StringBuilder grammarBuilder = new StringBuilder(85); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a @after {fmt.Println(p.GetInput().GetText())} : 'a' | 'b' |'c' ;"); + grammarBuilder.append("a @after {fmt.Println(p.GetTokenStream().GetAllText())} : 'a' | 'b' |'c' ;"); String grammar = grammarBuilder.toString(); String input ="b"; String found = execParser("T.g4", grammar, "TParser", "TLexer", @@ -338,9 +338,9 @@ public class TestSets extends BaseTest { @Test public void testSeqDoesNotBecomeSet() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(113); + StringBuilder grammarBuilder = new StringBuilder(122); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : C {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : C {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("fragment A : '1' | '2';\n"); grammarBuilder.append("fragment B : '3' '4';\n"); grammarBuilder.append("C : A | B;"); @@ -357,9 +357,9 @@ public class TestSets extends BaseTest { @Test public void testStarLexerSingleElement_1() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(71); + StringBuilder grammarBuilder = new StringBuilder(80); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("A : 'b'* 'c' ;"); String grammar = grammarBuilder.toString(); String input ="bbbbc"; @@ -374,9 +374,9 @@ public class TestSets extends BaseTest { @Test public void testStarLexerSingleElement_2() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(71); + StringBuilder grammarBuilder = new StringBuilder(80); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : A {fmt.Println(p.GetInput().GetText())} ;\n"); + grammarBuilder.append("a : A {fmt.Println(p.GetTokenStream().GetAllText())} ;\n"); grammarBuilder.append("A : 'b'* 'c' ;"); String grammar = grammarBuilder.toString(); String input ="c"; @@ -391,9 +391,9 @@ public class TestSets extends BaseTest { @Test public void testStarSet() throws Exception { mkdir(parserpkgdir); - StringBuilder grammarBuilder = new StringBuilder(69); + StringBuilder grammarBuilder = new StringBuilder(78); grammarBuilder.append("grammar T;\n"); - grammarBuilder.append("a : ('a'|'b')* 'c' {fmt.Println(p.GetInput().GetText())} ;"); + grammarBuilder.append("a : ('a'|'b')* 'c' {fmt.Println(p.GetTokenStream().GetAllText())} ;"); String grammar = grammarBuilder.toString(); String input ="abaac"; String found = execParser("T.g4", grammar, "TParser", "TLexer", diff --git a/runtime/Go/src/antlr4/DiagnosticErrorListener.go b/runtime/Go/src/antlr4/DiagnosticErrorListener.go index a36600e61..8326a4c85 100644 --- a/runtime/Go/src/antlr4/DiagnosticErrorListener.go +++ b/runtime/Go/src/antlr4/DiagnosticErrorListener.go @@ -6,7 +6,7 @@ import ( // // This implementation of {@link ANTLRErrorListener} can be used to identify -// certain potential correctness and performance problems in grammars. "Reports" +// certain potential correctness and performance problems in grammars. "reports" // are made by calling {@link Parser//NotifyErrorListeners} with the appropriate // message. // @@ -42,7 +42,7 @@ func (this *DiagnosticErrorListener) ReportAmbiguity(recognizer Parser, dfa *DFA if this.exactOnly && !exact { return } - var msg = "ReportAmbiguity d=" + + var msg = "reportAmbiguity d=" + this.getDecisionDescription(recognizer, dfa) + ": ambigAlts=" + this.getConflictingAlts(ambigAlts, configs).String() + @@ -53,7 +53,7 @@ func (this *DiagnosticErrorListener) ReportAmbiguity(recognizer Parser, dfa *DFA func (this *DiagnosticErrorListener) ReportAttemptingFullContext(recognizer Parser, dfa *DFA, startIndex, stopIndex int, conflictingAlts *BitSet, configs ATNConfigSet) { - var msg = "ReportAttemptingFullContext d=" + + var msg = "reportAttemptingFullContext d=" + this.getDecisionDescription(recognizer, dfa) + ", input='" + recognizer.GetTokenStream().GetTextFromInterval(NewInterval(startIndex, stopIndex)) + "'" @@ -61,7 +61,7 @@ func (this *DiagnosticErrorListener) ReportAttemptingFullContext(recognizer Pars } func (this *DiagnosticErrorListener) ReportContextSensitivity(recognizer Parser, dfa *DFA, startIndex, stopIndex, prediction int, configs ATNConfigSet) { - var msg = "ReportContextSensitivity d=" + + var msg = "reportContextSensitivity d=" + this.getDecisionDescription(recognizer, dfa) + ", input='" + recognizer.GetTokenStream().GetTextFromInterval(NewInterval(startIndex, stopIndex)) + "'" diff --git a/runtime/Go/src/antlr4/ErrorListener.go b/runtime/Go/src/antlr4/ErrorListener.go index 6c85a6764..3520ac96f 100644 --- a/runtime/Go/src/antlr4/ErrorListener.go +++ b/runtime/Go/src/antlr4/ErrorListener.go @@ -3,6 +3,7 @@ package antlr4 import ( "fmt" "strconv" + "os" ) // Provides an empty default implementation of {@link ANTLRErrorListener}. The @@ -73,7 +74,7 @@ var ConsoleErrorListenerINSTANCE = NewConsoleErrorListener() // // func (this *ConsoleErrorListener) SyntaxError(recognizer Recognizer, offendingSymbol interface{}, line, column int, msg string, e RecognitionException) { - fmt.Println("line " + strconv.Itoa(line) + ":" + strconv.Itoa(column) + " " + msg) + fmt.Fprintln(os.Stderr, "line " + strconv.Itoa(line) + ":" + strconv.Itoa(column) + " " + msg) } type ProxyErrorListener struct { diff --git a/runtime/Go/src/antlr4/ErrorStrategy.go b/runtime/Go/src/antlr4/ErrorStrategy.go index 9feef099d..aed0ef94b 100644 --- a/runtime/Go/src/antlr4/ErrorStrategy.go +++ b/runtime/Go/src/antlr4/ErrorStrategy.go @@ -538,10 +538,16 @@ func (this *DefaultErrorStrategy) getMissingSymbol(recognizer Parser) Token { var expecting = this.getExpectedTokens(recognizer) var expectedTokenType = expecting.first() var tokenText string + if expectedTokenType == TokenEOF { tokenText = "" } else { - tokenText = "" + ln := recognizer.GetLiteralNames() + if expectedTokenType > 0 && expectedTokenType < len(ln) { + tokenText = "" + } else { + tokenText = "" // TODO matches the JS impl + } } var current = currentSymbol var lookback = recognizer.GetTokenStream().LT(-1) diff --git a/runtime/Go/src/antlr4/Lexer.go b/runtime/Go/src/antlr4/Lexer.go index eed930bfb..48b786f89 100644 --- a/runtime/Go/src/antlr4/Lexer.go +++ b/runtime/Go/src/antlr4/Lexer.go @@ -340,7 +340,7 @@ func (l *BaseLexer) getCharIndex() int { // Return the text Matched so far for the current token or any text override. //Set the complete text of l token it wipes any previous changes to the text. -func (l *BaseLexer) text() string { +func (l *BaseLexer) GetText() string { if l._text != "" { return l._text } else { @@ -348,7 +348,7 @@ func (l *BaseLexer) text() string { } } -func (l *BaseLexer) setText(text string) { +func (l *BaseLexer) SetText(text string) { l._text = text } diff --git a/runtime/Go/src/antlr4/SemanticContext.go b/runtime/Go/src/antlr4/SemanticContext.go index 334538a2a..f45fdcdb1 100644 --- a/runtime/Go/src/antlr4/SemanticContext.go +++ b/runtime/Go/src/antlr4/SemanticContext.go @@ -314,6 +314,7 @@ type OR struct { } func NewOR(a, b SemanticContext) *OR { + var operands = NewSet(nil, nil) if aa, ok := a.(*OR); ok { for _, o := range aa.opnds { @@ -345,6 +346,7 @@ func NewOR(a, b SemanticContext) *OR { } vs := operands.values() + opnds := make([]SemanticContext, len(vs)) for i, v := range vs { vs[i] = v.(SemanticContext) diff --git a/runtime/Go/src/antlr4/Utils.go b/runtime/Go/src/antlr4/Utils.go index 59b2b2e01..bb0e42612 100644 --- a/runtime/Go/src/antlr4/Utils.go +++ b/runtime/Go/src/antlr4/Utils.go @@ -8,6 +8,7 @@ import ( // "regexp" // "bytes" // "encoding/gob" + "strconv" ) func intMin(a, b int) int { @@ -151,7 +152,7 @@ func (this *Set) contains(value interface{}) bool { } func (this *Set) values() []interface{} { - var l = make([]interface{}, len(this.data)) + var l = make([]interface{}, 0) for key, _ := range this.data { if strings.Index(key, "hash_") == 0 { @@ -252,7 +253,13 @@ func (this *BitSet) length() int { } func (this *BitSet) String() string { - return fmt.Sprint(this.data) + vals := this.values() + valsS := make([]string, len(vals)) + + for i,val := range vals { + valsS[i] = strconv.Itoa(val) + } + return "{" + strings.Join(valsS, ", ") + "}"; } type AltDict struct { diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg index 8a9c660d1..6f463624d 100644 --- a/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg +++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg @@ -22,10 +22,6 @@ var _ = fmt.Printf var _ = reflect.Copy var _ = strconv.Itoa -// Stopgap to shadow the Java types of the same name - -type String string - @@ -174,7 +170,9 @@ const ( func (p *) Sempred(localctx antlr4.RuleContext, ruleIndex, predIndex int) bool { switch ruleIndex { : - return p._Sempred(localctx.(*Context), predIndex)}; separator="\n"> + var t *Context = nil + if localctx != nil { t = localctx.(*Context) \} + return p._Sempred(t, predIndex)}; separator="\n"> default: panic("No predicate with index:" + fmt.Sprint(ruleIndex)) } @@ -189,10 +187,14 @@ dumpActions(recog, argFuncs, actionFuncs, sempredFuncs) ::= << func (l *) Action(localctx antlr4.RuleContext, ruleIndex, actionIndex int) { switch ruleIndex { - : - l._Action(localctx.(*), actionIndex) - }; separator="\n"> + : + + var t *Context = nil + if localctx != nil { t = localctx.(*) \} + return l._Action(t, actionIndex) + + return l._Action(t, actionIndex) + }; separator="\n"> default: panic("No registered action for:" + fmt.Sprint(ruleIndex)) } @@ -204,7 +206,13 @@ case : func (l *) Sempred(localctx antlr4.RuleContext, ruleIndex, predIndex int) bool { switch ruleIndex { : - return l._Sempred(localctx.(*), predIndex);}; separator="\n"> + + var t *Context = nil + if localctx != nil { t = localctx.(*) \} + return l._Sempred(t, predIndex); + + return l._Sempred(t, predIndex); + }; separator="\n"> default: panic("No registered predicate for:" + fmt.Sprint(ruleIndex)) } @@ -535,7 +543,7 @@ p.SetState() Wildcard(w) ::= << p.SetState() - = }>MatchWildcard() + = }>p.MatchWildcard() >> // ACTION STUFF @@ -570,33 +578,33 @@ LexerPushModeCommand(arg) ::= "p.PushMode()" ActionText(t) ::= "" ActionTemplate(t) ::= "" -ArgRef(a) ::= "localctx." -LocalRef(a) ::= "localctx." -RetValueRef(a) ::= "localctx." -QRetValueRef(a) ::= ".." +ArgRef(a) ::= "." +LocalRef(a) ::= "." +RetValueRef(a) ::= "." +QRetValueRef(a) ::= ".get().get()" /** How to translate $tokenLabel */ -TokenRef(t) ::= "." -LabelRef(t) ::= "." -ListLabelRef(t) ::= "." +TokenRef(t) ::= ".get()" +LabelRef(t) ::= ".get()" +ListLabelRef(t) ::= ".get" SetAttr(s,rhsChunks) ::= ".set()" TokenLabelType() ::= "" InputSymbolType() ::= "" -TokenPropertyRef_text(t) ::= "(func() string { if . == nil { return \"\" } else { return ..GetText() }}())" -TokenPropertyRef_type(t) ::= "(func() int { if . == nil { return 0 } else { return ..GetTokenType() }}())" -TokenPropertyRef_line(t) ::= "(func() int { if . == nil { return 0 } else { return ..GetLine() }}())" -TokenPropertyRef_pos(t) ::= "(func() int { if . == nil { return 0 } else { return ..GetColumn() }}())" -TokenPropertyRef_channel(t) ::= "(func() int { if . == nil { return 0 } else { return ..GetChannel() }}())" -TokenPropertyRef_index(t) ::= "(func() int { if . == nil { return 0 } else { return ..GetTokenIndex() }}())" -TokenPropertyRef_int(t) ::= "(func() int { if . == nil { return 0 } else { return strconv.Atoi(..GetText()) }}())" +TokenPropertyRef_text(t) ::= "(func() string { if .get() == nil { return \"\" } else { return .get().GetText() }}())" +TokenPropertyRef_type(t) ::= "(func() int { if .get() == nil { return 0 } else { return .get().GetTokenType() }}())" +TokenPropertyRef_line(t) ::= "(func() int { if .get() == nil { return 0 } else { return .get().GetLine() }}())" +TokenPropertyRef_pos(t) ::= "(func() int { if .get() == nil { return 0 } else { return .get().GetColumn() }}())" +TokenPropertyRef_channel(t) ::= "(func() int { if .get() == nil { return 0 } else { return .get().GetChannel() }}())" +TokenPropertyRef_index(t) ::= "(func() int { if .get() == nil { return 0 } else { return .get().GetTokenIndex() }}())" +TokenPropertyRef_int(t) ::= "(func() int { if .get() == nil { return 0 } else { return strconv.Atoi(.get().GetText()) }}())" -RulePropertyRef_start(r) ::= "(func() antlr4.Token { if . == nil { return nil } else { return ..GetStart() }}())" -RulePropertyRef_stop(r) ::= "(func() antlr4.Token { if . == nil { return nil } else { return ..GetStop() }}())" -RulePropertyRef_text(r) ::= "(func() string { if . == nil { return \"\" } else { return p.GetTokenStream().GetTextFromInterval( antlr4.NewInterval( ..GetStart().GetTokenIndex(),..GetStop().GetTokenIndex())) }}())" -RulePropertyRef_ctx(r) ::= "." +RulePropertyRef_start(r) ::= "(func() antlr4.Token { if .get() == nil { return nil } else { return .get().GetStart() }}())" +RulePropertyRef_stop(r) ::= "(func() antlr4.Token { if .get() == nil { return nil } else { return .get().GetStop() }}())" +RulePropertyRef_text(r) ::= "(func() string { if .get() == nil { return \"\" } else { return p.GetTokenStream().GetTextFromInterval( antlr4.NewInterval( .get().GetStart().GetTokenIndex(),..GetStop().GetTokenIndex())) }}())" +RulePropertyRef_ctx(r) ::= ".get()" RulePropertyRef_parser(r) ::= "p" ThisRulePropertyRef_start(r) ::= "localctx.GetStart()" @@ -608,14 +616,16 @@ ThisRulePropertyRef_parser(r) ::= "p" NonLocalAttrRef(s) ::= "GetInvokingContext()." SetNonLocalAttr(s, rhsChunks) ::= "GetInvokingContext(). = " -AddToLabelList(a) ::= ".(*). = append(.(*)., )" +AddToLabelList(a) ::= ". = append(., )" TokenDecl(t) ::= " " TokenTypeDecl(t) ::= " int" -TokenListDecl(t) ::= " antlr4.Token[] // = make([], 0)" +TokenListDecl(t) ::= " antlr4.Token[]" RuleContextDecl(r) ::= " I" -RuleContextListDecl(rdecl) ::= " []I // = make([]*, 0)" +RuleContextListDecl(rdecl) ::= " []I" + +AttributeDecl(d) ::= " // TODO = " ContextTokenGetterDecl(t) ::= << () interface{} { @@ -677,8 +687,8 @@ ListLabelName(label) ::= "