antlr4 python 目标无法识别 unicode
antlr4 python target cannot recognize unicode
我有一个ID
终结者
ID : ([A-Z_]|'\u0100'..'\uFFFE') ([A-Z_0-9]|'\u0100'..'\uFFFE')*;
和一个要解析的 .txt 示例文件
均60:=MA(C,60);
我生成了 Java 和 Python2 目标并分别针对样本文件进行了测试。 Java 目标可以解析这个文件。但是 Python2 目标不能。它抛出 token recognition error at: '均'
。我针对其他有效输入测试了 Python2 目标,除了包含 unicode 字符外,所有的都有效。我是不是漏掉了什么或者 python 目标不支持 unicode 解析。
java
mkdir -p java
java -jar /usr/local/lib/antlr-4.5.3-complete.jar TDX.g4 -o ./java
cd ./java
javac TDX*.java
java org.antlr.v4.gui.TestRig TDX prog -gui ../samples/1.txt
python目标生成命令
java -jar /usr/local/lib/antlr-4.5.3-complete.jar -Dlanguage=Python2 TDX.g4 -o ./tdx_py/antlrgen -visitor
python代码
import sys
from antlr4 import *
from tdx_py.antlrgen import TDXLexer, TDXParser
def executefile(file):
input = FileStream(file, encoding='utf-8')
lexer = TDXLexer(input)
stream = CommonTokenStream(lexer)
parser = TDXParser(stream)
tree = parser.prog()
if __name__ == '__main__':
executefile(sys.argv[1])
这是ANTLR4的一个bug。参考文献https://github.com/antlr/antlr4/issues/1925
我有一个ID
终结者
ID : ([A-Z_]|'\u0100'..'\uFFFE') ([A-Z_0-9]|'\u0100'..'\uFFFE')*;
和一个要解析的 .txt 示例文件
均60:=MA(C,60);
我生成了 Java 和 Python2 目标并分别针对样本文件进行了测试。 Java 目标可以解析这个文件。但是 Python2 目标不能。它抛出 token recognition error at: '均'
。我针对其他有效输入测试了 Python2 目标,除了包含 unicode 字符外,所有的都有效。我是不是漏掉了什么或者 python 目标不支持 unicode 解析。
java
mkdir -p java
java -jar /usr/local/lib/antlr-4.5.3-complete.jar TDX.g4 -o ./java
cd ./java
javac TDX*.java
java org.antlr.v4.gui.TestRig TDX prog -gui ../samples/1.txt
python目标生成命令
java -jar /usr/local/lib/antlr-4.5.3-complete.jar -Dlanguage=Python2 TDX.g4 -o ./tdx_py/antlrgen -visitor
python代码
import sys
from antlr4 import *
from tdx_py.antlrgen import TDXLexer, TDXParser
def executefile(file):
input = FileStream(file, encoding='utf-8')
lexer = TDXLexer(input)
stream = CommonTokenStream(lexer)
parser = TDXParser(stream)
tree = parser.prog()
if __name__ == '__main__':
executefile(sys.argv[1])
这是ANTLR4的一个bug。参考文献https://github.com/antlr/antlr4/issues/1925