我正在尝试将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/
中,你瞧,没有这样的方法。我没有意识到某些目标缺少特征。在这之前,我对语法分析器和词法分析器一无所知,我为自己的语法感到非常自豪,但在这之后,我甚至可能无法使用它!我有办法解决这个问题吗?你知道吗
据我所知,python运行时使用
column
属性而不是getCharPositionInLine
。另见:https://github.com/antlr/antlr4/blob/4.6/runtime/Python2/src/antlr4/Lexer.py#L237相关问题 更多 >
编程相关推荐