Why is ANTLR 4 Eclipse plugin generating wrong code?
我是 ANTLR 新手,我的第一次实验是在版本 4 中进行的。由于我使用 Eclipse Mars,我决定安装 Eclipse ANTLR 4 插件。全部完成后,我创建了以下语法(
1 2 3 4 5 6 7 8 9 10 11 12 | grammar MetaCoder; init: '{' value (',' value)* '}' ; value: init | INT ; INT: [0-9]+ ; WS: [ \\t\ \ ]+ -> skip ; // skip spaces, tabs, newlines |
插件生成为以下java代码(我删除了大部分注释以使其更短):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 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 显示以下错误:
1 | The method xxx of type MetaCoderBaseListener must override a superclass method |
消息似乎是正确的,因为这个类没有祖先。
出了什么问题以及如何解决?
听起来 ANTLR 没有正确创建
刚刚发布了这个问题,StackOverflow 就提出了一些相关的问题,这个问题有答案:
在 Eclipse Luna (4.4) 上设置 ANTLR 4 IDE 时遇到问题
就我而言,问题是我的项目没有转换为 Facets。
一旦我这样做了,错误就消失了。