我正在尝试将ANTLR4与Python2 Target一起使用。据我了解,以下形式的语义谓词是嵌入语法中的目标语言的代码。例如,我有一个这样的规则:
'S' {getCharPositionInLine() == 1}? 'OMETHING'
这基本上是为了确保令牌SOMETHING在行的开头开始(否则它是其他东西)。我使用了Java目标(默认),因为它的测试工具比Python更好。到现在为止还挺好。但是,一旦我的语法工作,在尝试将此代码转换为Python时,我遇到了一个问题。首先我假设Java中的上述代码(我根本不太了解Java)是类方法getCharPositionInLine
的调用,所以将上面的内容翻译成自然似乎是合理的:
'S' {self.getCharPositionInLine() == 1}? 'OMETHING'
但是我最终得到了错误:
'MyLexer' object has no attribute 'getCharPositionInLine'
然后我去检查Lexer.py
和antlr4/runtime/Python2/
中antlr4/runtime/Python3/
个文件(MyLexer继承的文件),并且看,没有这样的方法。我没有意识到某些目标缺少功能。在此之前对解析器和词法分析器一无所知我对我的语法感到非常自豪,但毕竟我甚至无法使用它!有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
据我所知,python运行时使用column
属性而不是getCharPositionInLine
。另见:https://github.com/antlr/antlr4/blob/4.6/runtime/Python2/src/antlr4/Lexer.py#L237