我正在使用 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 语法示例有点棘手,所以如果有人有任何推荐的阅读/资源,我会很乐意接受它们。
最佳答案
解决方案不是显式地返回
任何东西,而是分配返回项的变量名:
filterExpression returns [ActivityPredicate pred]: NAME OPERATOR NUMBER {
$pred = new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text);
};
关于java - Antlr 规则的返回值必须是 *Context 类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246311/