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

ANTLR4解析START/END包裹的星号分隔输入的语法问题

原语法存在的核心问题

  1. 词法语法职责错配:将整个START到END的结构定义为单个词法符号ENTRY,ANTLR词法分析器会将整段内容识别为一个不可拆分的token,无法单独提取每个字段的内容,同时贪婪匹配逻辑很容易出现越界识别。
  2. 依赖未定义的规则:代码中使用了ANY规则但没有明确定义,若配置了全局WS跳过规则,字段内的空格、制表符会被直接丢弃,无法参与解析。
  3. 规则限制缺失:没有限制字段内容不能包含*、START、END等保留标记,会出现匹配混乱。
  4. Fragment规则无法用于内容拆分:FIELD_SET、Data都被定义为fragment,本身不会生成独立token,无法在语法解析阶段做字段拆分。

调整后的语法实现

grammar StarSeparatedList;

// 顶层语法规则
parse: START field (DELIMITER field)* END;

// 单字段规则,支持空值
field: FIELD_CONTENT?;

// 词法规则定义
START: 'START';
END: 'END';
DELIMITER: '*';
// 字段内容:优先匹配非*、非S/E开头的内容,避免误识别START/END标记,支持空格、制表符等所有非保留字符
FIELD_CONTENT: ( ~[*SE] | 'S' ~[*T] | 'E' ~[*N] ) ~[*]*;

支持的场景验证

  • 空字段:两个连续分隔符**匹配空field规则
  • 仅含空格的字段:空格属于规则允许的字符范围,会被完整保留为字段内容
  • 带空格的业务内容:字段中间、前后的空格、制表符都会被完整包含在FIELD_CONTENT中,不会被丢弃
  • 混合字符内容:支持字母、数字、特殊符号(除*、START、END外)的任意组合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:48:04