2016-03-15 45 views
0

我是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 

該消息似乎是正確的,因爲此類沒有祖先。

出了什麼問題以及如何解決?

回答

0

這聽起來像ANTLR沒有正確創建MetaCoderListener類,定義這些方法。當您使用ANTLR生成解析器時,嘗試使用-listener作爲參數生成它。這將生成適當的監聽器,然後您將執行該類監聽器(訪客也一樣,使用-visitor參數來生成訪問者)。

相關問題