我是antlr 4的新手,我的目标语言是PYTHON2。我无法理解python中的CommonTokenStream,也无法理解如何访问antlr 4中的令牌。我需要的是访问隐藏通道中的令牌?请有人给我指一些合适的文档,让我了解如何在python中访问令牌和操作它们。如果问题含糊不清,我很抱歉,我是新来的。
ANTLR书就是其中之一。https://pragprog.com/book/tpantlr2/the-definitive-antlr-4-reference
在第12章"Wielding Lexical Black Magic"中,有"访问隐藏通道"部分。使用TokenStreamRewriter重写令牌。
您需要在心里将书中的Java代码转换为Python代码。运行时库有细微的差异,但它们实际上是相同的。
这不是唯一的办法。您可以覆盖lexer的emit()函数(我通常这样做)。然后您可以完全控制令牌路由。
如果你在python 3上,它都做得很好,煮熟了,准备好了
https://github.com/jszheng/py3antlr4book
对于一些Python启动提示,请尝试
https://github.com/antlr/antlr4/blob/master/doc/python-target.md
如果您使用的是Anaconda3,请尝试所有*.py的类定义导入注释(#)的egrpAnaconda3\Lib\站点包\antlr4_python3_runtime-4.7.1-py3.6.egg\antlr4
或者甚至写一个ANTLR脚本来创建python文档,并与我和全世界分享
此外,在运行时,这有助于查看CTX对象中的方法和属性
def dump(obj):
for attr in dir(obj):
print("obj.%s = %r" % (attr, getattr(obj, attr)))
print("-------------------------------------------")
dump(ctx)
print("===========================================")