在 Python 目标的 ANTLR4 中缺少 Lexer 方法?
Missing Lexer Methods in ANTLR4 with Python Target?
我正在尝试将 ANTLR4 与 Python2 目标一起使用。据我了解,以下形式的语义谓词是语法中嵌入的目标语言的代码。例如,我有一个这样的规则:
'S' {getCharPositionInLine() == 1}? 'OMETHING'
这基本上是为了确保令牌 SOMETHING 在行的开头开始(否则它是其他东西)。我使用了 Java 目标(默认),因为它的测试设施比 Python 中的要好。到目前为止,一切都很好。然而,一旦我的语法开始工作,在尝试将这段代码翻译成 Python 时,我遇到了一个问题。首先我假设上面Java中的代码(我对Java了解不多)是class方法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
我正在尝试将 ANTLR4 与 Python2 目标一起使用。据我了解,以下形式的语义谓词是语法中嵌入的目标语言的代码。例如,我有一个这样的规则:
'S' {getCharPositionInLine() == 1}? 'OMETHING'
这基本上是为了确保令牌 SOMETHING 在行的开头开始(否则它是其他东西)。我使用了 Java 目标(默认),因为它的测试设施比 Python 中的要好。到目前为止,一切都很好。然而,一旦我的语法开始工作,在尝试将这段代码翻译成 Python 时,我遇到了一个问题。首先我假设上面Java中的代码(我对Java了解不多)是class方法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