java - Antlr 规则的返回值必须是 *Context 类型吗?

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

在哪里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/

相关文章:

Java 泛型未经检查的转换 - 通配符边界

c++ - 是否有适用于 ANTLR 的 C++ 语法文件?

ANTLR 在输入 '<EOF>' 处没有可行的替代方案

python - python 如何确定合适的元类?

javascript - 将 block 与对象初始值设定项区分开来

java - 仅比较日期(而不是时间)

java - 当存在重复标签时,在JAVA中解析XML

Java 转换实用程序库

antlr4 如何修复词法分析器模式隐式标记错误?

grammar - 如何解决这个选择冲突 - JavaCC