【发布时间】:2017-02-22 17:40:53
【问题描述】:
我正在尝试将 ANTLR4 与 Python2 目标一起使用。据我了解,以下形式的语义谓词是嵌入语法中的目标语言的代码。例如,我有一个这样的规则:
'S' {getCharPositionInLine() == 1}? 'OMETHING'
这基本上是为了确保令牌 SOMETHING 从行首开始(否则它是其他东西)。我使用了 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 继承自),你瞧,没有这样的方法。我没有意识到某些目标缺少功能。在此之前对解析器和词法分析器一无所知,我为自己的语法感到非常自豪,但毕竟我什至可能无法使用它!有什么办法可以解决这个问题吗?
【问题讨论】: