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);
};