forked from jasder/antlr
Remove forward declaration of listener/visitor, and adjust test templates accordingly
This commit is contained in:
parent
70fa6b27f0
commit
dfda30092e
|
@ -35,7 +35,6 @@
|
|||
*
|
||||
* REQUIRED.
|
||||
*/
|
||||
VERSION() ::= "4.3" // use just "x.y" and don't include bug fix release number
|
||||
|
||||
pythonTypeInitMap ::= [
|
||||
"bool":"False",
|
||||
|
@ -53,27 +52,10 @@ ParserFile(file, parser, namedActions) ::= <<
|
|||
from __future__ import print_function
|
||||
from antlr4 import *
|
||||
from io import StringIO
|
||||
<if(file.genListener || file.genVisitor)>
|
||||
package = globals().get("__package__", None)
|
||||
ischild = len(package)>0 if package is not None else False
|
||||
if ischild:
|
||||
<if(file.genListener)>
|
||||
from .<file.parser.grammarName>Listener import <file.parser.grammarName>Listener
|
||||
<endif>
|
||||
<if(file.genVisitor)>
|
||||
from .<file.parser.grammarName>Visitor import <file.parser.grammarName>Visitor
|
||||
<endif>
|
||||
else:
|
||||
<if(file.genListener)>
|
||||
from <file.parser.grammarName>Listener import <file.parser.grammarName>Listener
|
||||
<endif>
|
||||
<if(file.genVisitor)>
|
||||
from <file.parser.grammarName>Visitor import <file.parser.grammarName>Visitor
|
||||
<endif>
|
||||
<endif>
|
||||
|
||||
<namedActions.header>
|
||||
<parser>
|
||||
|
||||
>>
|
||||
|
||||
ListenerFile(file, header) ::= <<
|
||||
|
@ -118,7 +100,7 @@ def visit<lname; format="cap">(self, ctx):
|
|||
|
||||
|
||||
fileHeader(grammarFileName, ANTLRVersion) ::= <<
|
||||
# Generated from <grammarFileName"> by ANTLR <ANTLRVersion>
|
||||
# Generated from <grammarFileName> by ANTLR <ANTLRVersion>
|
||||
>>
|
||||
|
||||
Parser(parser, funcs, atn, sempredFuncs, superClass) ::= <<
|
||||
|
@ -693,14 +675,14 @@ class <struct.name>(<currentRule.name; format="cap">Context):
|
|||
|
||||
ListenerDispatchMethod(method) ::= <<
|
||||
def <if(method.isEnter)>enter<else>exit<endif>Rule(self, listener):
|
||||
if isinstance( listener, <parser.grammarName>Listener ):
|
||||
if hasattr(listener, "<if(method.isEnter)>enter<else>exit<endif><struct.derivedFromName; format="cap">"):
|
||||
listener.<if(method.isEnter)>enter<else>exit<endif><struct.derivedFromName; format="cap">(self)
|
||||
|
||||
>>
|
||||
|
||||
VisitorDispatchMethod(method) ::= <<
|
||||
def accept(self, visitor):
|
||||
if isinstance( visitor, <parser.grammarName>Visitor ):
|
||||
if hasattr(visitor, "visit<struct.derivedFromName; format="cap">"):
|
||||
return visitor.visit<struct.derivedFromName; format="cap">(self)
|
||||
else:
|
||||
return visitor.visitChildren(self)
|
||||
|
|
|
@ -297,6 +297,11 @@ def isIdentifierChar(c):
|
|||
>>
|
||||
|
||||
BasicListener(X) ::= <<
|
||||
if __name__ is not None and "." in __name__:
|
||||
from .<X>Listener import <X>Listener
|
||||
else:
|
||||
from <X>Listener import <X>Listener
|
||||
|
||||
class LeafListener(TListener):
|
||||
def visitTerminal(self, node):
|
||||
print(node.symbol.text)
|
||||
|
@ -309,6 +314,11 @@ walker.walk(TParser.LeafListener(), <s>)
|
|||
>>
|
||||
|
||||
TokenGetterListener(X) ::= <<
|
||||
if __name__ is not None and "." in __name__:
|
||||
from .<X>Listener import <X>Listener
|
||||
else:
|
||||
from <X>Listener import <X>Listener
|
||||
|
||||
class LeafListener(TListener):
|
||||
def exitA(self, ctx):
|
||||
if ctx.getChildCount()==2:
|
||||
|
@ -319,6 +329,11 @@ class LeafListener(TListener):
|
|||
>>
|
||||
|
||||
RuleGetterListener(X) ::= <<
|
||||
if __name__ is not None and "." in __name__:
|
||||
from .<X>Listener import <X>Listener
|
||||
else:
|
||||
from <X>Listener import <X>Listener
|
||||
|
||||
class LeafListener(TListener):
|
||||
def exitA(self, ctx):
|
||||
if ctx.getChildCount()==2:
|
||||
|
@ -330,6 +345,11 @@ class LeafListener(TListener):
|
|||
|
||||
|
||||
LRListener(X) ::= <<
|
||||
if __name__ is not None and "." in __name__:
|
||||
from .<X>Listener import <X>Listener
|
||||
else:
|
||||
from <X>Listener import <X>Listener
|
||||
|
||||
class LeafListener(TListener):
|
||||
def exitE(self, ctx):
|
||||
if ctx.getChildCount()==3:
|
||||
|
@ -340,6 +360,11 @@ class LeafListener(TListener):
|
|||
>>
|
||||
|
||||
LRWithLabelsListener(X) ::= <<
|
||||
if __name__ is not None and "." in __name__:
|
||||
from .<X>Listener import <X>Listener
|
||||
else:
|
||||
from <X>Listener import <X>Listener
|
||||
|
||||
class LeafListener(TListener):
|
||||
def exitCall(self, ctx):
|
||||
print(ctx.e().start.text + ' ' + str(ctx.eList()))
|
||||
|
|
|
@ -12,12 +12,17 @@ public class TestListeners extends BasePython2Test {
|
|||
public void testTokenGetters_1() throws Exception {
|
||||
mkdir(tmpdir);
|
||||
|
||||
StringBuilder grammarBuilder = new StringBuilder(535);
|
||||
StringBuilder grammarBuilder = new StringBuilder(660);
|
||||
grammarBuilder.append("grammar T;\n");
|
||||
grammarBuilder.append("@parser::header {\n");
|
||||
grammarBuilder.append("}\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("@parser::members {\n");
|
||||
grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n");
|
||||
grammarBuilder.append(" from .TListener import TListener\n");
|
||||
grammarBuilder.append("else:\n");
|
||||
grammarBuilder.append(" from TListener import TListener\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("class LeafListener(TListener):\n");
|
||||
grammarBuilder.append(" def exitA(self, ctx):\n");
|
||||
grammarBuilder.append(" if ctx.getChildCount()==2:\n");
|
||||
|
@ -60,12 +65,17 @@ public class TestListeners extends BasePython2Test {
|
|||
public void testBasic() throws Exception {
|
||||
mkdir(tmpdir);
|
||||
|
||||
StringBuilder grammarBuilder = new StringBuilder(386);
|
||||
StringBuilder grammarBuilder = new StringBuilder(511);
|
||||
grammarBuilder.append("grammar T;\n");
|
||||
grammarBuilder.append("@parser::header {\n");
|
||||
grammarBuilder.append("}\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("@parser::members {\n");
|
||||
grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n");
|
||||
grammarBuilder.append(" from .TListener import TListener\n");
|
||||
grammarBuilder.append("else:\n");
|
||||
grammarBuilder.append(" from TListener import TListener\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("class LeafListener(TListener):\n");
|
||||
grammarBuilder.append(" def visitTerminal(self, node):\n");
|
||||
grammarBuilder.append(" print(node.symbol.text)\n");
|
||||
|
@ -106,12 +116,17 @@ public class TestListeners extends BasePython2Test {
|
|||
public void testTokenGetters_2() throws Exception {
|
||||
mkdir(tmpdir);
|
||||
|
||||
StringBuilder grammarBuilder = new StringBuilder(535);
|
||||
StringBuilder grammarBuilder = new StringBuilder(660);
|
||||
grammarBuilder.append("grammar T;\n");
|
||||
grammarBuilder.append("@parser::header {\n");
|
||||
grammarBuilder.append("}\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("@parser::members {\n");
|
||||
grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n");
|
||||
grammarBuilder.append(" from .TListener import TListener\n");
|
||||
grammarBuilder.append("else:\n");
|
||||
grammarBuilder.append(" from TListener import TListener\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("class LeafListener(TListener):\n");
|
||||
grammarBuilder.append(" def exitA(self, ctx):\n");
|
||||
grammarBuilder.append(" if ctx.getChildCount()==2:\n");
|
||||
|
@ -154,12 +169,17 @@ public class TestListeners extends BasePython2Test {
|
|||
public void testLRWithLabels() throws Exception {
|
||||
mkdir(tmpdir);
|
||||
|
||||
StringBuilder grammarBuilder = new StringBuilder(527);
|
||||
StringBuilder grammarBuilder = new StringBuilder(652);
|
||||
grammarBuilder.append("grammar T;\n");
|
||||
grammarBuilder.append("@parser::header {\n");
|
||||
grammarBuilder.append("}\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("@parser::members {\n");
|
||||
grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n");
|
||||
grammarBuilder.append(" from .TListener import TListener\n");
|
||||
grammarBuilder.append("else:\n");
|
||||
grammarBuilder.append(" from TListener import TListener\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("class LeafListener(TListener):\n");
|
||||
grammarBuilder.append(" def exitCall(self, ctx):\n");
|
||||
grammarBuilder.append(" print(ctx.e().start.text + ' ' + str(ctx.eList()))\n");
|
||||
|
@ -205,12 +225,17 @@ public class TestListeners extends BasePython2Test {
|
|||
public void testRuleGetters_1() throws Exception {
|
||||
mkdir(tmpdir);
|
||||
|
||||
StringBuilder grammarBuilder = new StringBuilder(572);
|
||||
StringBuilder grammarBuilder = new StringBuilder(697);
|
||||
grammarBuilder.append("grammar T;\n");
|
||||
grammarBuilder.append("@parser::header {\n");
|
||||
grammarBuilder.append("}\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("@parser::members {\n");
|
||||
grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n");
|
||||
grammarBuilder.append(" from .TListener import TListener\n");
|
||||
grammarBuilder.append("else:\n");
|
||||
grammarBuilder.append(" from TListener import TListener\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("class LeafListener(TListener):\n");
|
||||
grammarBuilder.append(" def exitA(self, ctx):\n");
|
||||
grammarBuilder.append(" if ctx.getChildCount()==2:\n");
|
||||
|
@ -254,12 +279,17 @@ public class TestListeners extends BasePython2Test {
|
|||
public void testLR() throws Exception {
|
||||
mkdir(tmpdir);
|
||||
|
||||
StringBuilder grammarBuilder = new StringBuilder(547);
|
||||
StringBuilder grammarBuilder = new StringBuilder(672);
|
||||
grammarBuilder.append("grammar T;\n");
|
||||
grammarBuilder.append("@parser::header {\n");
|
||||
grammarBuilder.append("}\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("@parser::members {\n");
|
||||
grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n");
|
||||
grammarBuilder.append(" from .TListener import TListener\n");
|
||||
grammarBuilder.append("else:\n");
|
||||
grammarBuilder.append(" from TListener import TListener\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("class LeafListener(TListener):\n");
|
||||
grammarBuilder.append(" def exitE(self, ctx):\n");
|
||||
grammarBuilder.append(" if ctx.getChildCount()==3:\n");
|
||||
|
@ -307,12 +337,17 @@ public class TestListeners extends BasePython2Test {
|
|||
public void testRuleGetters_2() throws Exception {
|
||||
mkdir(tmpdir);
|
||||
|
||||
StringBuilder grammarBuilder = new StringBuilder(572);
|
||||
StringBuilder grammarBuilder = new StringBuilder(697);
|
||||
grammarBuilder.append("grammar T;\n");
|
||||
grammarBuilder.append("@parser::header {\n");
|
||||
grammarBuilder.append("}\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("@parser::members {\n");
|
||||
grammarBuilder.append("if __name__ is not None and \".\" in __name__:\n");
|
||||
grammarBuilder.append(" from .TListener import TListener\n");
|
||||
grammarBuilder.append("else:\n");
|
||||
grammarBuilder.append(" from TListener import TListener\n");
|
||||
grammarBuilder.append("\n");
|
||||
grammarBuilder.append("class LeafListener(TListener):\n");
|
||||
grammarBuilder.append(" def exitA(self, ctx):\n");
|
||||
grammarBuilder.append(" if ctx.getChildCount()==2:\n");
|
||||
|
|
Loading…
Reference in New Issue