Java Antlr规则的返回值必须是*上下文类型?

Java Antlr规则的返回值必须是*上下文类型?,java,antlr,grammar,antlr4,Java,Antlr,Grammar,Antlr4,我正在用Antlr 4刷新我的Antlr技能(在长时间中断后),我有一个规则如下: filterExpression returns [ActivityPredicate pred]: NAME OPERATOR NUMBER { return new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text); }; 其中,SingleActivityPredica

我正在用Antlr 4刷新我的Antlr技能(在长时间中断后),我有一个规则如下:

filterExpression returns [ActivityPredicate pred]: NAME OPERATOR NUMBER {
    return new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text);
};
其中,
SingleActivityPredicate
是我编写的一个类,它实现了我的
ActivityPredicate
接口

但解析器中生成的方法是:

public final FilterExpressionContext filterExpression() throws RecognitionException {
因此,可以理解,解析器有一个语法错误:

Type mismatch: cannot convert from SingleActivityPredicate to PredicatesParser.FilterExpressionContext
如何允许规则返回不属于
上下文的自定义数据类型


查找使用嵌入式Java代码的Antlr语法示例有点棘手,因此,如果有人有任何推荐的阅读/资源,我很乐意接受。

解决方案不是显式返回任何内容,而是指定返回项的变量名:

filterExpression returns [ActivityPredicate pred]: NAME OPERATOR NUMBER {
    $pred = new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text);
};