Return 来自 Antlr 规则的值必须是 *Context 类型?
Return value from Antlr rule required to be of *Context type?
我正在使用 Antlr 4 更新我的 Antlr 技能(经过长时间的中断),我有一个规则如下:
filterExpression returns [ActivityPredicate pred]: NAME OPERATOR NUMBER {
return new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text);
};
其中 SingleActivityPredicate
是我写的 class 实现了我的 ActivityPredicate
接口。
但是解析器中生成的方法是:
public final FilterExpressionContext filterExpression() throws RecognitionException {
因此,可以理解,解析器出现语法错误:
Type mismatch: cannot convert from SingleActivityPredicate to PredicatesParser.FilterExpressionContext
如何允许我的规则 return 不是 <RuleName>Context
的 的自定义数据类型?
寻找使用嵌入式 Java 代码的 Antlr 语法示例有点棘手,所以如果有人推荐 reading/resources,我会很乐意接受它们。
解决方案不是return
任何显式的,而是分配返回项的变量名称:
filterExpression returns [ActivityPredicate pred]: NAME OPERATOR NUMBER {
$pred = new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text);
};
我正在使用 Antlr 4 更新我的 Antlr 技能(经过长时间的中断),我有一个规则如下:
filterExpression returns [ActivityPredicate pred]: NAME OPERATOR NUMBER {
return new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text);
};
其中 SingleActivityPredicate
是我写的 class 实现了我的 ActivityPredicate
接口。
但是解析器中生成的方法是:
public final FilterExpressionContext filterExpression() throws RecognitionException {
因此,可以理解,解析器出现语法错误:
Type mismatch: cannot convert from SingleActivityPredicate to PredicatesParser.FilterExpressionContext
如何允许我的规则 return 不是 <RuleName>Context
的 的自定义数据类型?
寻找使用嵌入式 Java 代码的 Antlr 语法示例有点棘手,所以如果有人推荐 reading/resources,我会很乐意接受它们。
解决方案不是return
任何显式的,而是分配返回项的变量名称:
filterExpression returns [ActivityPredicate pred]: NAME OPERATOR NUMBER {
$pred = new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text);
};