validated ParseTrees tests
This commit is contained in:
parent
5ee6990f8c
commit
2716bbd62d
|
@ -485,7 +485,7 @@ public class Generator {
|
||||||
"xy",
|
"xy",
|
||||||
"(a x y)\n",
|
"(a x y)\n",
|
||||||
null);
|
null);
|
||||||
file.addParserTest(input, "test2Alts", "T", "s",
|
file.addParserTest(input, "2Alts", "T", "s",
|
||||||
"y",
|
"y",
|
||||||
"(a y)\n",
|
"(a y)\n",
|
||||||
null);
|
null);
|
||||||
|
@ -497,19 +497,18 @@ public class Generator {
|
||||||
"yx",
|
"yx",
|
||||||
"(a (b y) x)\n",
|
"(a (b y) x)\n",
|
||||||
null);
|
null);
|
||||||
// ERRORs not shown. z is colored red in tree view
|
|
||||||
file.addParserTest(input, "ExtraToken", "T", "s",
|
file.addParserTest(input, "ExtraToken", "T", "s",
|
||||||
"xzy",
|
"xzy",
|
||||||
"(a x z y)\n",
|
"(a x z y)\n", // ERRORs not shown. z is colored red in tree view
|
||||||
null);
|
"line 1:1 extraneous input 'z' expecting 'y'\n");
|
||||||
file.addParserTest(input, "NoViableAlt", "T", "s",
|
file.addParserTest(input, "NoViableAlt", "T", "s",
|
||||||
"z",
|
"z",
|
||||||
"(a z)\n",
|
"(a z)\n",
|
||||||
null);
|
"line 1:0 mismatched input 'z' expecting {'x', 'y'}\n");
|
||||||
file.addParserTest(input, "Sync", "T", "s",
|
file.addParserTest(input, "Sync", "T", "s",
|
||||||
"xzyy!",
|
"xzyy!",
|
||||||
"(a x z y y !)\n",
|
"(a x z y y !)\n",
|
||||||
null);
|
"line 1:1 extraneous input 'z' expecting {'y', '!'}\n");
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,7 @@ Pass() ::= ""
|
||||||
|
|
||||||
StringList() ::= "List\<String>"
|
StringList() ::= "List\<String>"
|
||||||
|
|
||||||
BuildParseTrees() ::= "this.buildParseTrees = true;"
|
BuildParseTrees() ::= "setBuildParseTree(true);"
|
||||||
|
|
||||||
BailErrorStrategy() ::= <%setErrorHandler(new BailErrorStrategy());%>
|
BailErrorStrategy() ::= <%setErrorHandler(new BailErrorStrategy());%>
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ ImportListener(X) ::= ""
|
||||||
|
|
||||||
GetExpectedTokenNames() ::= "this.getExpectedTokens().toString(this.tokenNames)"
|
GetExpectedTokenNames() ::= "this.getExpectedTokens().toString(this.tokenNames)"
|
||||||
|
|
||||||
WriteRuleInvocationStack() ::= "document.getElementById('output').value += antlr4.Utils.arrayToString(this.getRuleInvocationStack()) + '\\n';"
|
WriteRuleInvocationStack() ::= "System.out.println(getRuleInvocationStack());"
|
||||||
|
|
||||||
LL_EXACT_AMBIG_DETECTION() ::= <<this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;>>
|
LL_EXACT_AMBIG_DETECTION() ::= <<this._interp.predictionMode = antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION;>>
|
||||||
|
|
||||||
|
|
|
@ -10,14 +10,14 @@ public class TestParseTrees extends BaseTest {
|
||||||
String grammar = "grammar T;\n" +
|
String grammar = "grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {\n" +
|
"@init {\n" +
|
||||||
"this.buildParseTrees = true;\n" +
|
"setBuildParseTree(true);\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
"@after {\n" +
|
"@after {\n" +
|
||||||
"System.out.println($r.ctx.toStringTree(this));\n" +
|
"System.out.println($r.ctx.toStringTree(this));\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
" : r=a ;\n" +
|
" : r=a ;\n" +
|
||||||
"a : 'x' { \n" +
|
"a : 'x' { \n" +
|
||||||
"document.getElementById('output').value += antlr4.Utils.arrayToString(this.getRuleInvocationStack()) + '\\n';\n" +
|
"System.out.println(getRuleInvocationStack());\n" +
|
||||||
"} ;";
|
"} ;";
|
||||||
String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", "x", false);
|
String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", "x", false);
|
||||||
assertEquals("[a, s]\n(a x)\n", found);
|
assertEquals("[a, s]\n(a x)\n", found);
|
||||||
|
@ -29,7 +29,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
String grammar = "grammar T;\n" +
|
String grammar = "grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {\n" +
|
"@init {\n" +
|
||||||
"this.buildParseTrees = true;\n" +
|
"setBuildParseTree(true);\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
"@after {\n" +
|
"@after {\n" +
|
||||||
"System.out.println($r.ctx.toStringTree(this));\n" +
|
"System.out.println($r.ctx.toStringTree(this));\n" +
|
||||||
|
@ -43,11 +43,11 @@ public class TestParseTrees extends BaseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testtest2Alts() throws Exception {
|
public void test2Alts() throws Exception {
|
||||||
String grammar = "grammar T;\n" +
|
String grammar = "grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {\n" +
|
"@init {\n" +
|
||||||
"this.buildParseTrees = true;\n" +
|
"setBuildParseTree(true);\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
"@after {\n" +
|
"@after {\n" +
|
||||||
"System.out.println($r.ctx.toStringTree(this));\n" +
|
"System.out.println($r.ctx.toStringTree(this));\n" +
|
||||||
|
@ -65,7 +65,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
String grammar = "grammar T;\n" +
|
String grammar = "grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {\n" +
|
"@init {\n" +
|
||||||
"this.buildParseTrees = true;\n" +
|
"setBuildParseTree(true);\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
"@after {\n" +
|
"@after {\n" +
|
||||||
"System.out.println($r.ctx.toStringTree(this));\n" +
|
"System.out.println($r.ctx.toStringTree(this));\n" +
|
||||||
|
@ -83,7 +83,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
String grammar = "grammar T;\n" +
|
String grammar = "grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {\n" +
|
"@init {\n" +
|
||||||
"this.buildParseTrees = true;\n" +
|
"setBuildParseTree(true);\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
"@after {\n" +
|
"@after {\n" +
|
||||||
"System.out.println($r.ctx.toStringTree(this));\n" +
|
"System.out.println($r.ctx.toStringTree(this));\n" +
|
||||||
|
@ -103,7 +103,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
String grammar = "grammar T;\n" +
|
String grammar = "grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {\n" +
|
"@init {\n" +
|
||||||
"this.buildParseTrees = true;\n" +
|
"setBuildParseTree(true);\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
"@after {\n" +
|
"@after {\n" +
|
||||||
"System.out.println($r.ctx.toStringTree(this));\n" +
|
"System.out.println($r.ctx.toStringTree(this));\n" +
|
||||||
|
@ -115,7 +115,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
" ;";
|
" ;";
|
||||||
String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", "xzy", false);
|
String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", "xzy", false);
|
||||||
assertEquals("(a x z y)\n", found);
|
assertEquals("(a x z y)\n", found);
|
||||||
assertNull(this.stderrDuringParse);
|
assertEquals("line 1:1 extraneous input 'z' expecting 'y'\n", this.stderrDuringParse);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -123,7 +123,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
String grammar = "grammar T;\n" +
|
String grammar = "grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {\n" +
|
"@init {\n" +
|
||||||
"this.buildParseTrees = true;\n" +
|
"setBuildParseTree(true);\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
"@after {\n" +
|
"@after {\n" +
|
||||||
"System.out.println($r.ctx.toStringTree(this));\n" +
|
"System.out.println($r.ctx.toStringTree(this));\n" +
|
||||||
|
@ -136,7 +136,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
" ";
|
" ";
|
||||||
String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", "z", false);
|
String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", "z", false);
|
||||||
assertEquals("(a z)\n", found);
|
assertEquals("(a z)\n", found);
|
||||||
assertNull(this.stderrDuringParse);
|
assertEquals("line 1:0 mismatched input 'z' expecting {'x', 'y'}\n", this.stderrDuringParse);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -144,7 +144,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
String grammar = "grammar T;\n" +
|
String grammar = "grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {\n" +
|
"@init {\n" +
|
||||||
"this.buildParseTrees = true;\n" +
|
"setBuildParseTree(true);\n" +
|
||||||
"}\n" +
|
"}\n" +
|
||||||
"@after {\n" +
|
"@after {\n" +
|
||||||
"System.out.println($r.ctx.toStringTree(this));\n" +
|
"System.out.println($r.ctx.toStringTree(this));\n" +
|
||||||
|
@ -156,7 +156,7 @@ public class TestParseTrees extends BaseTest {
|
||||||
" ;";
|
" ;";
|
||||||
String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", "xzyy!", false);
|
String found = execParser("T.g4", grammar, "TParser", "TLexer", "s", "xzyy!", false);
|
||||||
assertEquals("(a x z y y !)\n", found);
|
assertEquals("(a x z y y !)\n", found);
|
||||||
assertNull(this.stderrDuringParse);
|
assertEquals("line 1:1 extraneous input 'z' expecting {'y', '!'}\n", this.stderrDuringParse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,154 +0,0 @@
|
||||||
/*
|
|
||||||
* [The "BSD license"]
|
|
||||||
* Copyright (c) 2012 Terence Parr
|
|
||||||
* Copyright (c) 2012 Sam Harwell
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote products
|
|
||||||
* derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.antlr.v4.test.tool;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
public class TestParseTrees extends BaseTest {
|
|
||||||
@Test public void testTokenAndRuleContextString() throws Exception {
|
|
||||||
String grammar =
|
|
||||||
"grammar T;\n" +
|
|
||||||
"s\n" +
|
|
||||||
"@init {setBuildParseTree(true);}\n" +
|
|
||||||
"@after {System.out.println($r.ctx.toStringTree(this));}\n" +
|
|
||||||
" :r=a ;\n" +
|
|
||||||
"a : 'x' {System.out.println(getRuleInvocationStack());} ;\n";
|
|
||||||
String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", "x", false);
|
|
||||||
String expecting = "[a, s]\n(a x)\n";
|
|
||||||
assertEquals(expecting, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test public void testToken2() throws Exception {
|
|
||||||
String grammar =
|
|
||||||
"grammar T;\n" +
|
|
||||||
"s\n" +
|
|
||||||
"@init {setBuildParseTree(true);}\n" +
|
|
||||||
"@after {System.out.println($r.ctx.toStringTree(this));}\n" +
|
|
||||||
" :r=a ;\n" +
|
|
||||||
"a : 'x' 'y'\n" +
|
|
||||||
" ;\n";
|
|
||||||
String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", "xy", false);
|
|
||||||
String expecting = "(a x y)\n";
|
|
||||||
assertEquals(expecting, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test public void test2Alts() throws Exception {
|
|
||||||
String grammar =
|
|
||||||
"grammar T;\n" +
|
|
||||||
"s\n" +
|
|
||||||
"@init {setBuildParseTree(true);}\n" +
|
|
||||||
"@after {System.out.println($r.ctx.toStringTree(this));}\n" +
|
|
||||||
" :r=a ;\n" +
|
|
||||||
"a : 'x' | 'y'\n" +
|
|
||||||
" ;\n";
|
|
||||||
String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", "y", false);
|
|
||||||
String expecting = "(a y)\n";
|
|
||||||
assertEquals(expecting, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test public void test2AltLoop() throws Exception {
|
|
||||||
String grammar =
|
|
||||||
"grammar T;\n" +
|
|
||||||
"s\n" +
|
|
||||||
"@init {setBuildParseTree(true);}\n" +
|
|
||||||
"@after {System.out.println($r.ctx.toStringTree(this));}\n" +
|
|
||||||
" :r=a ;\n" +
|
|
||||||
"a : ('x' | 'y')* 'z'\n" +
|
|
||||||
" ;\n";
|
|
||||||
String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", "xyyxyxz", false);
|
|
||||||
String expecting = "(a x y y x y x z)\n";
|
|
||||||
assertEquals(expecting, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test public void testRuleRef() throws Exception {
|
|
||||||
String grammar =
|
|
||||||
"grammar T;\n" +
|
|
||||||
"s\n" +
|
|
||||||
"@init {setBuildParseTree(true);}\n" +
|
|
||||||
"@after {System.out.println($r.ctx.toStringTree(this));}\n" +
|
|
||||||
" : r=a ;\n" +
|
|
||||||
"a : b 'x'\n" +
|
|
||||||
" ;\n" +
|
|
||||||
"b : 'y' ;\n";
|
|
||||||
String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", "yx", false);
|
|
||||||
String expecting = "(a (b y) x)\n";
|
|
||||||
assertEquals(expecting, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ERRORS
|
|
||||||
|
|
||||||
@Test public void testExtraToken() throws Exception {
|
|
||||||
String grammar =
|
|
||||||
"grammar T;\n" +
|
|
||||||
"s\n" +
|
|
||||||
"@init {setBuildParseTree(true);}\n" +
|
|
||||||
"@after {System.out.println($r.ctx.toStringTree(this));}\n" +
|
|
||||||
" : r=a ;\n" +
|
|
||||||
"a : 'x' 'y'\n" +
|
|
||||||
" ;\n" +
|
|
||||||
"Z : 'z'; \n";
|
|
||||||
String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", "xzy", false);
|
|
||||||
String expecting = "(a x z y)\n"; // ERRORs not shown. z is colored red in tree view
|
|
||||||
assertEquals(expecting, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test public void testNoViableAlt() throws Exception {
|
|
||||||
String grammar =
|
|
||||||
"grammar T;\n" +
|
|
||||||
"s\n" +
|
|
||||||
"@init {setBuildParseTree(true);}\n" +
|
|
||||||
"@after {System.out.println($r.ctx.toStringTree(this));}\n" +
|
|
||||||
" : r=a ;\n" +
|
|
||||||
"a : 'x' | 'y'\n" +
|
|
||||||
" ;\n" +
|
|
||||||
"Z : 'z'; \n";
|
|
||||||
String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", "z", false);
|
|
||||||
String expecting = "(a z)\n";
|
|
||||||
assertEquals(expecting, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test public void testSync() throws Exception {
|
|
||||||
String grammar =
|
|
||||||
"grammar T;\n" +
|
|
||||||
"s\n" +
|
|
||||||
"@init {setBuildParseTree(true);}\n" +
|
|
||||||
"@after {System.out.println($r.ctx.toStringTree(this));}\n" +
|
|
||||||
" : r=a ;\n" +
|
|
||||||
"a : 'x' 'y'* '!'\n" +
|
|
||||||
" ;\n" +
|
|
||||||
"Z : 'z'; \n";
|
|
||||||
String result = execParser("T.g4", grammar, "TParser", "TLexer", "s", "xzyy!", false);
|
|
||||||
String expecting = "(a x z y y !)\n";
|
|
||||||
assertEquals(expecting, result);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue