ANTLR Python 解析器错误

Mik*_*e75 4 python antlr4

我尝试用 python 阅读 antlr 语法。

正如在这个问题中:

JSON 文件中的变音符号会导致 ANTLR4 创建的 Python 代码出现错误

错误:

File "/usr/local/lib/python2.7/dist-packages/antlr4/Lexer.py", line 109,     
  in nextToken
    tokenStartMarker = self._input.mark()
AttributeError: 'str' object has no attribute 'mark'
Run Code Online (Sandbox Code Playgroud)

发生。

我的语法在 java 中运行良好,并且没有德语变音符号。

代码生成如下:

antlr4 -Dlanguage=Python2 -visitor MyGrammar.g4
Run Code Online (Sandbox Code Playgroud)

该错误是否还有其他原因?也许是版本问题或者其他什么问题?

小智 5

出现这个问题的原因是,你没有使用antlr4.InputStream mark函数是InputStream类的一部分

https://github.com/antlr/antlr4/blob/master/runtime/Python2/src/antlr4/InputStream.py

以下代码有效

语法文件

    语法 someGrammar;

    操作:NUMBER'+'NUMBER;

    数字:[0-9]+;

    空白: ' ' -> 跳过;

Python代码

    导入antlr4
    从antlr4导入*
    从 psqlListener 导入 psqlListener
    从 psqlLexer 导入 psqlLexer
    从 psqlParser 导入 psqlParser
    导入系统
    inputStream = antlr4.InputStream('4+5');
    词法分析器 = psqlLexer(inputStream)
    流 = CommonTokenStream(词法分析器)
    解析器 = psqlParser(流)