使用Antlr4生成PLSQL语法后遭遇Python运行时错误求助
解决Antlr4 PLSQL Python代码生成与运行的常见问题
问题背景
使用Antlr4官方PLSQL语法文件生成Python3代码后,运行runPLSQL.py先后遇到两个问题:
- 报错
false未定义 - 修改布尔值大小写后,出现
无法从PlSqlParserBase导入PlSqlParserBase,且本地PlSqlParserBase.py开头是异常JSON结构
解决步骤
1. 修复布尔值大小写错误
Antlr生成的Python代码会使用Java风格的小写布尔值false/true,但Python要求大写False/True:
- 批量替换所有生成的
.py文件(如PlSqlLexer.py、PlSqlParser.py)中的:false→Falsetrue→True
- 也可以用命令行批量替换(Linux/macOS):
sed -i 's/false/False/g' *.py sed -i 's/true/True/g' *.py
2. 修复PlSqlParserBase.py的异常结构与导入问题
用wget直接下载GitHub目录下的文件时,会连带页面的JSON元数据一起保存,导致文件开头出现异常结构:
- 直接从语法仓库的原始代码页面复制
PlSqlParserBase.py和PlSqlLexerBase.py的纯代码,保存到本地代码目录 - 确保这两个基础类文件和Antlr生成的代码文件在同一目录下
- 检查生成的
PlSqlParser.py中的导入语句,确认是from PlSqlParserBase import PlSqlParserBase,路径无错误
3. 规范的文件获取与代码生成流程(避免踩坑)
不要单独下载单个文件,直接克隆整个语法仓库:
git clone https://github.com/antlr/grammars-v4.git cd grammars-v4/sql/plsql
然后生成Python代码:
java -jar antlr-4.9.3-complete.jar -Dlanguage=Python3 PlSqlLexer.g4 PlSqlParser.g4
最后将仓库内的PlSqlLexerBase.py、PlSqlParserBase.py复制到生成代码的目录即可。
内容的提问来源于stack exchange,提问作者Pro West
相关产品推荐
相关产品推荐

