为什么Antlr4Eclipse插件生成错误的代码?
我是ANTLR的新手,在版本4中进行了第一次实验。由于我使用EclipseMars,我决定安装EclipseAntl4插件。完成之后,我创建了以下语法(为什么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 消息似乎是正确的,因为这个类没有祖先 出
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