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