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

ANTLR语法与测试用例不匹配引发报错的问题排查请求

ANTLR语法报错排查与修复

问题根源分析

  1. STR令牌规则限制过严:原规则STR: [a-zA-Z.]*;仅允许字母和点,无法匹配测试用例中带空格的字符串"assembler quiz",导致多处匹配失败。
  2. 未定义DOC令牌:expr规则中引用了DOC,但令牌部分未定义该规则,引发语法逻辑错误。
  3. prog规则未处理EOF:缺少文件结束符匹配,导致出现missing '(' at '<EOF>'错误。
  4. decl规则中字符串匹配冗余:原规则手动拼接'"' STR '"',但STR本身不含引号,导致引号匹配逻辑混乱。

修正后的语法代码

grammar g;

prog: (decl | expr)+ EOF;

decl: VAR '=' STR
    | '%doc' '(' VAR '=' STR ')'
    | '%quiz' '(' VAR '=' STR ')' .*? '%quiz'
    ;

expr: expr '*' expr
    | expr '+' expr
    | expr '-' expr
    | expr '=' expr
    | STR
    ;

// 令牌定义
VAR: [a-zA-Z0-9_]+ ;
STR: '"' (~["\r\n])* '"'; // 匹配双引号包裹的任意内容(不含引号与换行)
WS: [ \t\n]+ -> skip;

关键修正说明

  • STR令牌优化:改为匹配双引号包裹的任意字符(除引号和换行),支持带空格、特殊字符的字符串内容。
  • 移除冗余引号匹配:decl规则中直接使用STR(已包含引号),避免重复匹配引号导致的逻辑错误。
  • 添加EOF匹配:prog规则末尾加入EOF,确保语法能正确识别文件结束,消除EOF相关报错。
  • 删除未定义令牌:移除expr规则中的DOC引用,解决未定义令牌的语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:13:25