Antlr规则的返回值必须为*Context类型



我正在用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

如何允许我的规则返回<RuleName>Context而非的自定义数据类型?

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

解决方案不是显式地return,而是分配返回项的变量名:

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

相关内容

  • 没有找到相关文章

最新更新