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

Antlr4开发SQL解释器触发token recognition error等错误求解

问题根因

问题出在你的Antlr4 String词法规则写法不符合Antlr4语法规范,导致单引号包裹的字符串无法被正确识别:

  • Antlr4词法规则不支持正则风格的[^']否定字符类写法,你写的String: '\''[^']+'\''; 会被Antlr4解析为「匹配单引号 + 至少一个^或'字符 + 单引号」,完全无法匹配'Anna'这类普通字符串。
  • 由于'Anna'无法被识别为String类型的token,词法解析器会逐字符处理该部分内容:开头的'和大写A没有匹配规则,触发token识别错误;后续的nna符合ValidName小写开头的规则,被识别为ValidName类型的token,自然不符合语法规则中要求的Value类型,所以报extraneous input 'nna' expecting Value错误。
修复方案
  1. 修正String词法规则为Antlr4支持的写法,用~'\''表示匹配任意非单引号字符:
// 基础版本,匹配无转义单引号的字符串
String: '\'' ~'\''* '\'';

// 如果需要支持单引号内的转义单引号(例如'Anna\'s code'),用这个版本
String: '\'' (~'\'' | '\\\'')* '\'';
  1. 确认你的词法规则中添加了空白符跳过规则,避免空格、换行等字符触发不必要的token错误:
WS: [ \t\r\n]+ -> skip;
  1. 如果你的业务需要支持大小写开头的标识符,可以按需调整ValidName规则:
ValidName: [a-zA-Z][a-zA-Z0-9_]*;

内容的提问来源于stack exchange,提问作者Emily H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:03