我尝试用 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(流)