2011-02-17 89 views
0

Antlr3產生以下輸出System.out,而其他人做正確的一切:這條ANTLR3日誌消息的含義是什麼?

line 0:0 null 
line 0:0 null 
line 0:0 null 
... 

它是什麼?

ps。問題是,在解析時,我通過RecognitionException()。看起來像null是這樣的結果。而不是null應該有一些有意義的消息,但RecognitionException沒有這樣的構造函數。該怎麼辦?


grammar Bar; 
document: (CHAR { Foo.validate($CHAR.text); })+ EOF; 
CHAR: 'a'..'z'; 

Foo類在同一包某處:

public class Foo { 
    public static void validate(String txt) throws RecognitionException { 
    if ("q".equals(txt)) { 
     throw new RecognitionException(); 
    } 
    } 
} 

現在一個單元測試:

public class BarTest { 
    @Test public void testEverything() throws Exception { 
    this.parse("abc"); // valid 
    this.parse("abcq"); // invalid 
    } 
    private void parse(String txt) { 
    CharStream input = new ANTLRStringStream(txt); 
    BarLexer lexer = new BarLexer(input); 
    TokenStream tokens = new CommonTokenStream(lexer); 
    BarParser parser = new BarParser(tokens); 
    parser.document(); 
    } 
} 

的輸出是:

line 0:0 null 
+0

嗯,這是相當明顯的,不是嗎? :-D(我有時會發現antlr3的信息確實可能是神祕的) – 2011-02-17 16:13:14

+0

Nah,根本不明顯......你知道這是什麼意思嗎? – yegor256 2011-02-17 16:16:40

回答

0

A RecognitionException應該由解析器本身拋出。這樣的異常具有在解析器遍歷令牌流(行號,索引,當前令牌等)時更新的所有類型的信息。所以,你不應該把它們扔掉。

看一看,處理錯誤報告和恢復這兩個維基文章:

相關問題