我对antlr 4非常陌生,我的目标语言是PYTHON2。我不能理解python中的CommonTokenStream以及如何访问antlr4中的令牌。我所需要的是访问隐藏通道中的令牌?请告诉我一些合适的文档,在那里我可以了解如何访问令牌并在python中操作它们。如果问题含糊,我很抱歉,我是新来的。
发布于 2016-05-31 14:23:40
ANTLR的书就是其中之一。https://pragprog.com/book/tpantlr2/the-definitive-antlr-4-reference
在第12章“挥舞词汇黑魔法”中,有“访问隐藏通道”一节。使用TokenStreamRewriter重写令牌。
您需要在心理上将书中的Java代码转换为Python代码。运行时库有细微的差异,但它们实际上是相同的。
这不是唯一的方法。您可以覆盖lexer的emit()函数(我通常这样做)。然后,您可以完全控制令牌路由。
发布于 2018-08-31 16:41:06
如果您使用的是python 3,那么所有的东西都做得很好,而且已经准备好了。
https://github.com/jszheng/py3antlr4book
对于一些Python启动提示,请尝试
https://github.com/antlr/antlr4/blob/master/doc/python-target.md
如果您正在使用Anaconda3\Lib\site-packages\antlr4_python3_runtime-4.7.1-py3.6.egg\antlr4,请尝试导入所有*.py注释(#)的def类的Anaconda3
或者甚至编写一个ANTLR脚本来创建python文档,并与我和整个世界分享
此外,在运行时,这有助于查看CTX对象中的方法和属性。
def dump(obj):
for attr in dir(obj):
print("obj.%s = %r" % (attr, getattr(obj, attr)))
print("-------------------------------------------")
dump(ctx)
print("===========================================")https://stackoverflow.com/questions/37253087
复制相似问题