在具有Python目标的ANTLR4中缺少Lexer方法?

2024-05-23 22:44:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将ANTLR4用于Python2目标。据我所知,以下形式的语义谓词是嵌入在语法中的目标语言的代码。例如,我有一个这样的规则:

'S' {getCharPositionInLine() == 1}? 'OMETHING'

这基本上是为了确保标记SOMETHING从行的开头开始(否则它是另一个)。我使用了Java目标(默认),因为它的测试工具比Python更好。到现在为止,一直都还不错。然而,当我的语法工作时,在尝试将这些代码翻译成Python时,我遇到了一个问题。首先,我假设上面的Java代码(我对Java了解不多)是类方法getCharPositionInLine的调用,因此自然地将上面的代码转换为:

'S' {self.getCharPositionInLine() == 1}? 'OMETHING'

但是我最终得到了一个错误:

'MyLexer' object has no attribute 'getCharPositionInLine'

我去检查一下Lexer.py文件(MyLexer从中继承的)在antlr4/runtime/Python2/antlr4/runtime/Python3/中,你瞧,没有这样的方法。我没有意识到某些目标缺少特征。在这之前,我对语法分析器和词法分析器一无所知,我为自己的语法感到非常自豪,但在这之后,我甚至可能无法使用它!我有办法解决这个问题吗?你知道吗


Tags: 方法代码目标语义语法java形式runtime