Antlr4 Python 3目标访问者不可用?

Antlr4 Python 3目标访问者不可用?,antlr4,python-3.4,visitor,Antlr4,Python 3.4,Visitor,我尝试使用Python3目标来遵循,但是我被计算器示例卡住了。上面写着 AntLR的Python实现尽可能接近Java实现,因此您应该不会发现为Python改编示例有困难 但我还不明白 java代码访问者有一个.visit方法,在python中我没有这个方法。我认为这是因为在java中,visit方法具有令牌的参数重载。在python中,我们有visitProg(),visitAssign(),visitId()等等,但现在我无法编写value=self.visit(ctx.expr()),因为

我尝试使用Python3目标来遵循,但是我被计算器示例卡住了。上面写着

AntLR的Python实现尽可能接近Java实现,因此您应该不会发现为Python改编示例有困难

但我还不明白

java代码访问者有一个
.visit
方法,在python中我没有这个方法。我认为这是因为在java中,visit方法具有令牌的参数重载。在python中,我们有
visitProg()
visitAssign()
visitId()
等等,但现在我无法编写
value=self.visit(ctx.expr())
,因为我们不知道调用什么访问


或者我在什么地方遗漏了指令?

Python2/3目标尚未实现访问者。我试着自己实现它,一个拉请求被发送给那个antlr的家伙,看看我是否做对了。按照此处的拉取请求进行操作:

看起来好像在过去3年多的某个时候,这个问题得到了解决。我从语法和目标Python 3生成了一个解析器,使用:

antlr4 -Dlanguage=Python3 -no-listener -visitor mygrammar.g4
它生成一个visitor类,该类子类为
parsetrevisitor
,它是中的一个类。看看这个类,有一个
visit
方法

对于那些有兴趣使用Python的人,您可以向这个github repo指出:


你知道python ANTLR API的文档在哪里吗?如果你想编写
self.visit()
,你可能需要编写某种调度器,根据
ctx.expr()
运行时类型调用正确的
.visitX()
。我遇到了类似的问题。您是否有关于python中访问者实现的任何更新?此PR的链接已断开,我在ANTLR4 repo中找不到对此的任何引用:使用antlr 4.7.2(撰写本文时的最新版本),我仍然没有访问者模块/类。这适用于Python2和Python3。更新:我收到一个警告
错误(153):LabeledExpr.g4:3:0:rule start包含一个闭包,其中至少有一个选项可以匹配阻止生成访问者的空字符串
。修好后,我得到了我所期待的。@PythonJin你救了我的命!!感谢您分享git报告。我缺乏好的榜样。