[英]Missing Lexer Methods in ANTLR4 with Python Target?
我正在尝试将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'
然后我去检查antlr4/runtime/Python2/
和antlr4/runtime/Python3/
的Lexer.py
文件(MyLexer继承的文件),并且看,没有这样的方法。 我没有意识到某些目标缺少功能。 在此之前对解析器和词法分析器一无所知我对我的语法感到非常自豪,但毕竟我甚至无法使用它! 有什么方法可以解决这个问题吗?
据我所知,python运行时使用column
属性而不是getCharPositionInLine
。 另见: https : //github.com/antlr/antlr4/blob/4.6/runtime/Python2/src/antlr4/Lexer.py#L237
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.