如何在Python中重新生成词法/语法分析器?ATN版本反序列化报错
解决PDDL词法/语法分析器ATN版本反序列化错误
你遇到的是ANTLR生成的pddlLexer在反序列化ATN(增强转移网络)时的版本不匹配问题——读取到的版本为空,而代码期望版本为4。这大多是因为生成Lexer/Parser的ANTLR版本和运行时依赖版本不一致,或是自动生成的代码中serializedATN()方法未正确输出版本信息。
解决步骤:
确认ANTLR版本一致性
检查项目依赖的antlr4-python3-runtime版本,必须和生成Lexer/Parser的ANTLR命令行工具版本一致,且为4.x系列。
用命令查看当前版本:pip show antlr4-python3-runtime若版本不符,卸载后重装指定4.x版本:
pip uninstall antlr4-python3-runtime pip install antlr4-python3-runtime==4.9.3重新生成Lexer和Parser代码
找到项目中的PDDL语法文件(.g4后缀,如pddl.g4),用对应版本的ANTLR工具重新生成Python代码:- 下载对应版本的ANTLR命令行工具(如
antlr-4.9.3-complete.jar) - 执行生成命令:
java -jar antlr-4.9.3-complete.jar -Dlanguage=Python3 pddl.g4 - 用新生成的
pddlLexer.py、pddlParser.py替换项目中原有的旧文件。
- 下载对应版本的ANTLR命令行工具(如
检查serializedATN()方法
若重新生成后仍报错,打开pddlLexer.py查看serializedATN()方法,确认返回的字符串开头包含正确的版本标识(ANTLR 4.x生成的内容会带有对应版本的编码,不会出现空版本值)。
内容的提问来源于stack exchange,提问作者Wolff Kaushal
相关产品推荐
相关产品推荐

