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

Antlr4语法如何识别多余右括号并触发报错?

解决Antlr4中多余右括号未报错的问题

问题原因

当前的myVal规则仅定义了合法表达式的结构,但Antlr4解析器默认只会匹配第一个合法的子表达式,不会检查输入是否完全消耗。比如输入(3+4)))时,解析器会先匹配(3+4)作为一个合法的myVal,剩余的))不会被验证,因此不会触发报错。

解决方案

1. 添加顶层规则并强制匹配到输入结束

在语法文件中新增一个顶层规则,要求整个输入必须是一个完整的myVal,且后面不能有多余字符(通过EOF标记输入结束):

start : myVal EOF;

// 原有的myVal规则保持不变
myVal : '(' myVal ')'                                               
     | MINUS myVal                                                 
     | NOT myVal                                                   
     | '$' IDENTIFIER '(' ')'                                     
     | '$' IDENTIFIER '(' myVal (',' myVal)* ')'                    
     | myVal op=(MULT | DIVIDE) myVal                               
     | myVal op=(PLUS | MINUS) myVal                                
     | myVal op=(EQ | NE | GT | GTE | LT | LTE) myVal               
     | myVal IN '[' myVal (',' myVal)* ']'                           
     | myVal '~' myVal                                              
     | myVal op=(AND | OR) myVal                                    
     | myVal '?' myVal ':' myVal                                     
     | IF myVal THEN myVal (ELSEIF myVal THEN myVal)* ELSE myVal       
     | IDENTIFIER DOT IDENTIFIER                                  
     | STRINGLIT                                                  
     | '[' myVal (',' myVal)* ']'                                   
     | TRUE                                                       
     | FALSE                                                      
     | IDENTIFIER                                                 
     | NUMBER                                                     
     | INTEGER                                                    
     ;

2. 调整解析入口

生成解析器后,在代码中调用解析器的start()方法作为入口,而不是直接调用myVal()方法。这样解析器会强制检查整个输入是否完全匹配start规则,一旦有多余字符(比如末尾的)))就会抛出语法错误。

原理说明

EOF是Antlr4的内置标记,表示输入流的结束。通过顶层规则绑定myVal和EOF,解析器会要求输入必须是一个完整的合法表达式,且没有任何多余内容。当输入存在未被消耗的字符时,解析器会触发语法错误,从而捕获多余的右括号问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:15:46