使用ANTLR4生成Python3解析树时遇TypeError错误求助
解决ANTLR4 Python解析器的TypeError: ord() expected string of length 1, but int found
这个错误的核心原因是生成解析器代码的ANTLR命令行工具版本,与安装的antlr4-python3-runtime版本不兼容。ANTLR 4.10+版本对ATN(增强转移网络)的序列化格式做了改动,从字符串改为字节数组,如果版本不匹配,就会出现类型不匹配的错误。
解决步骤:
- 检查你的ANTLR命令行工具版本:
antlr4 -version - 安装与命令行工具完全相同版本的antlr4-python3-runtime:
比如你的ANTLR版本是4.9.3,执行:pip install antlr4-python3-runtime==4.9.3 - 删除之前生成的所有解析器/词法分析器文件(Python3Lexer.py、Python3Parser.py、Python3Listener.py等),重新生成代码:
antlr4 -Dlanguage=Python3 Python3.g4 - 再次运行你的测试命令:
python3 pythonparser.py test.py
额外注意:
尽量不要手动修改ANTLR生成的代码(比如之前修改的TextIO导入),版本匹配后生成的代码应该是兼容当前Python版本的,手动修改可能引入其他潜在问题。
内容的提问来源于stack exchange,提问作者Fari
相关产品推荐
相关产品推荐

