为什么Antlr4Eclipse插件生成错误的代码?

为什么Antlr4Eclipse插件生成错误的代码?,eclipse,antlr,antlr4,Eclipse,Antlr,Antlr4,我是ANTLR的新手,在版本4中进行了第一次实验。由于我使用EclipseMars,我决定安装EclipseAntl4插件。完成之后,我创建了以下语法(MetaCoder.g4文件): 插件生成了以下java代码(我删除了大部分注释以缩短代码): 对于所有被重写的方法,Eclipse显示以下错误: The method xxx of type MetaCoderBaseListener must override a superclass method 消息似乎是正确的,因为这个类没有祖先 出

我是ANTLR的新手,在版本4中进行了第一次实验。由于我使用EclipseMars,我决定安装EclipseAntl4插件。完成之后,我创建了以下语法(
MetaCoder.g4
文件):

插件生成了以下java代码(我删除了大部分注释以缩短代码):

对于所有被重写的方法,Eclipse显示以下错误:

The method xxx of type MetaCoderBaseListener must override a superclass method
消息似乎是正确的,因为这个类没有祖先


出了什么问题以及如何解决?

在发布问题后,StackOverflow提出了一些相关问题,这一个问题的答案是:

在我的例子中,问题是我的项目没有转换成方面


一旦我这样做了,错误就消失了。

听起来ANTLR没有正确地创建
MetaCoderListener
类,定义这些方法。使用ANTLR生成解析器时,请尝试使用
-listener
作为参数生成它。这将生成适当的侦听器,然后类将实现该侦听器(访客也是如此。使用
-visitor
参数生成访客)

// Generated from MetaCoder.g4 by ANTLR 4.4

import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.TerminalNode;

public class MetaCoderBaseListener implements MetaCoderListener {
    @Override public void enterInit(@NotNull MetaCoderParser.InitContext ctx) { }
    @Override public void exitInit(@NotNull MetaCoderParser.InitContext ctx) { }
    @Override public void enterValue(@NotNull MetaCoderParser.ValueContext ctx) { }
    @Override public void exitValue(@NotNull MetaCoderParser.ValueContext ctx) { }

    @Override public void enterEveryRule(@NotNull ParserRuleContext ctx) { }
    @Override public void exitEveryRule(@NotNull ParserRuleContext ctx) { }
    @Override public void visitTerminal(@NotNull TerminalNode node) { }
    @Override public void visitErrorNode(@NotNull ErrorNode node) { }
}
The method xxx of type MetaCoderBaseListener must override a superclass method