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

ANTLR4语法报错:输入不匹配,期望PARAM_NAME如何解决?

问题解决:ANTLR4参数名匹配错误

问题根源

你的语法中ENTITY_NAME和PARAM_NAME的词法规则完全一致(都是[a-zA-Z_][a-zA-Z0-9_]*),而ANTLR4的词法分析器遵循先定义先匹配的优先级规则。所有符合标识符格式的输入(包括参数名)都会被优先识别为ENTITY_NAME,但param规则期望的是PARAM_NAME,因此出现"mismatched input"错误。

解决方法

合并重复的词法规则,用一个通用的IDENTIFIER规则替代ENTITY_NAME和PARAM_NAME,然后在语法规则中根据上下文区分使用场景即可。

修改后的完整语法:

grammar SimpleExpr2;

expr: entityName '(' paramList ')' SEMICOLON;

entityName: IDENTIFIER;

paramList: param (SEPARATOR param)*;

param: IDENTIFIER ':' DATA_TYPE
     | IDENTIFIER;

IDENTIFIER: [a-zA-Z_][a-zA-Z0-9_]*;

DATA_TYPE: 'int'
         | 'string'
         | 'float'
         | 'date'
         | 'text'
         ;

SEPARATOR: ',';

SEMICOLON: ';';

WS: [ \t\n\r]+ -> skip;

修改说明

  1. 移除原有的ENTITY_NAME和PARAM_NAME规则,新增通用的IDENTIFIER规则,覆盖所有标识符匹配需求。
  2. 将entityName规则中的ENTITY_NAME替换为IDENTIFIER,param规则中的PARAM_NAME也替换为IDENTIFIER。

这样修改后,输入entity( parametros:int, parametro:int, paramtrico:float, paramtri);就能被正确解析,不会再出现匹配错误。

内容的提问来源于stack exchange,提问作者Cristian Jacob Jimenez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:13:10