ANTLR4解析带命名参数与嵌套函数调用代码故障排查
问题排查及解决方案
核心问题1:监听器判断逻辑错误
你定义的val规则明确说明参数值只能是字符串字面量或者函数调用二者之一,正常解析时必然只有其中一个分支有值,另一个为null。但你写的判断逻辑是只要二者任意一个为null就抛出异常,相当于合法值一定会触发异常:
// 错误逻辑:只要有一个为null就抛异常,合法值必然满足该条件 if (value.type_literal() == null || value.function_call() == null) { throw new RuntimeException("Could not parse argument value"); }
修改为:
// 正确逻辑:两个都为null才说明解析失败 if (value.type_string() == null && value.function_call() == null) { throw new RuntimeException("Could not parse argument value"); }
核心问题2:规则名与监听器调用方法名不一致
你语法中定义的字符串规则名是type_string,生成的解析器上下文对应方法为type_string(),但你在监听器中调用的是不存在的type_literal()方法,必然返回null导致判断逻辑误判。
核心问题3:缺失空白符忽略规则
你的示例代码中=前后存在空格,但词法规则中没有定义空白符的处理逻辑,解析器会将空格识别为无效字符触发匹配失败,需要在G4文件的词法规则部分添加空白符跳过规则:
WS : [ \t\n\r]+ -> skip ;
内容的提问来源于stack exchange,提问作者user2749903
相关产品推荐
相关产品推荐

