我为Python3 这里找到了一个ANTLR语法,下载了它,并使用Pycharm中的ANTLR插件生成了ANTLR识别器(插件版本1.17,包含ANTLR运行时4.9.1)。
生成的模块之一是Python3Lexer.py。这个类导入顶部附近的称为Python3LexerBase的东西(大概是另一个Python模块),但是我还没有找到一个叫做Python3LexerBase的python模块。
生成的Python3Lexer模块还包含如下函数:
def NEWLINE_sempred(self, localctx:RuleContext, predIndex:int):
if predIndex == 0:
return this.atStartOfInput()this.atStartOfInput()看起来非常Javaish。
我找到了一个Python3LexerBase.java类这里,因此它似乎试图从Python调用一个Java类。
Go中有一个关于相同基类的非常相似的螺纹,其中表示在Python中有或可能有一个基类。
有没有人知道:
发布于 2022-03-19 09:36:18
用于词汇者和解析器的基类通常是用生成的文件的目标语言编写的,因此它们不属于语法本身(如果没有包含目标动作代码,语法本身就是目标语言不可知论的)。但是通常附近至少有一个实现,用于特定的目标语言,您必须自己将其移植到您的语言(这里是Python),当然,除非这个实现符合您的需要。
如果一种语言被足够多的人使用,那么随着时间的推移,通常会提供一个基本的实现,就像Python语法所发生的那样。但是,正如@ for 76已经提到的那样,对于作为目标的Python来说,这种情况还没有发生。
https://stackoverflow.com/questions/71532399
复制相似问题