我正在尝试将antlr4与python2目标使用。据我了解,以下形式的语义谓词是嵌入语法中的目标语言的代码。例如,我有一个这样的规则:
'S' {getCharPositionInLine() == 1}? 'OMETHING'
这基本上是为了确保令牌某物在线路的开头开始(否则是其他东西)。我使用了Java目标(默认值),因为它的测试设施比Python更好。到目前为止,一切都很好。但是,一旦我的语法工作,试图将此代码转换为Python时,我遇到了一个问题。首先,我认为Java中的上述代码(我根本不知道Java)是类方法getCharPositionInLine
的调用,因此自然而然地将上述转换为:
'S' {self.getCharPositionInLine() == 1}? 'OMETHING'
但是,我最终会出现错误:
'MyLexer' object has no attribute 'getCharPositionInLine'
我去检查antlr4/runtime/Python2/
和antlr4/runtime/Python3/
中的Lexer.py
文件(Mylexer继承),以及Lo and Chord,没有这样的方法。我没有意识到某些目标是缺少的功能。在此之前,我对解析器和词汇一无所知,我为自己的语法感到自豪,但是毕竟我什至无法使用它!有什么办法可以解决这个问题?
,因为我了解python runtimes使用 column
属性而不是 getCharPositionInLine
。另请参阅:https://github.com/antlr/antlr4/blob/4.6/runtime/python2/src/antlr4/lexer.py.py#l237