为什么ANTLR 4 Eclipse插件会生成错误的代码?

问题描述:

我是ANTLR的新手,在版本4中进行了第一次实验。由于我使用Eclipse Mars,因此我决定安装Eclipse ANTLR 4插件。全部完成后,我创建了下面的语法(MetaCoder.g4文件):为什么ANTLR 4 Eclipse插件会生成错误的代码?

grammar MetaCoder; 

init: '{' value (',' value)* '}' ; 

value: init 
    | INT 
    ; 

INT: [0-9]+ ; 
WS: [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines 

生成Java代码的插件(我删除了大部分的意见,使之短):

// 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) { } 
} 

对于所有的覆盖方法Eclipse显示以下错误:

The method xxx of type MetaCoderBaseListener must override a superclass method 

该消息似乎是正确的,因为此类没有祖先。

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

刚刚张贴的问题后,*的sugested一些相关的问题,而这其中有答案:

Trouble Setting Up ANTLR 4 IDE on Eclipse Luna (4.4)

的问题,在我的情况,是我的项目未转换为字母。

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

这听起来像ANTLR没有正确创建MetaCoderListener类,定义这些方法。当您使用ANTLR生成解析器时,尝试使用-listener作为参数生成它。这将生成适当的监听器,然后您将执行该类监听器(访客也一样,使用-visitor参数来生成访问者)。