我是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
該消息似乎是正確的,因爲此類沒有祖先。
出了什麼問題以及如何解決?