You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Antlr4 Python解析PLSQL时遇<EOF>输入不匹配错误的解决问询

解决Antlr4 Python处理PLSQL时的''不匹配错误

以下是针对该问题的具体排查和解决方法:

1. 补充脚本终止符

PLSQL语法对语句结束有严格要求,需根据脚本类型补充对应终止符:

  • 简单SQL脚本:确保每条语句末尾添加分号;,例如将SELECT * FROM users修正为SELECT * FROM users;
  • PLSQL块脚本:BEGIN...END结构结尾除了分号;,还需单独一行添加/来触发解析结束,示例:
    BEGIN
      DBMS_OUTPUT.PUT_LINE('Hello');
    END;
    /
    

2. 选择正确的语法入口规则

antlr/grammars-v4的PLSQL语法包含多个入口规则,需根据脚本类型匹配:

  • 处理单条或多条SQL语句时,使用sql_script作为入口
  • 处理PLSQL块(如存储过程、匿名块)时,使用plsql_block作为入口
    修正Python代码中的入口规则调用,示例:
# 处理PLSQL块时的正确写法
parser = PLSQLParser(input_stream)
tree = parser.plsql_block()

3. 修正字符编码与换行符问题

从od输出检查脚本的编码和换行符:

  • 确保脚本使用UTF-8编码,避免含不可见特殊字符
  • 统一换行符为LF(Unix)或CRLF(Windows)格式,可通过文本编辑器转换后重新测试

4. 更新语法文件与生成解析器

确认使用的PLSQL语法文件和Antlr4 Python runtime版本兼容:

  • 拉取antlr/grammars-v4仓库的最新PLSQL语法文件
  • 重新生成Python版词法/语法分析器,执行命令:
    antlr4 -Dlanguage=Python3 PLSQL.g4
    

内容的提问来源于stack exchange,提问作者Pro West

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:32:02