2012-11-20 43 views
0

我用ANTLR 3.4編寫一個解析器語法,就像這樣:ANTLR承認錯誤的解析器

var : VAR_LEFT_PART atom_var VAR_RIGHT_PART ; 
atom_var : ID | VAR_LEFT_PART ID VAR_RIGHT_PART ; 

VAR_LEFT_PART : '{{'; 
VAR_RIGHT_PART : '}}'; 
ID : ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')* ; 
INT : ('1'..'9')('0'..'9')* ; 
NEWLINE:'\r'? '\n' ; 
WS : (' '|'\t')+ { $channel = HIDDEN;} ; 

當我測試的情況下,如下所示:

enter image description here

的問題是我的字符串「{{{test}}}」是不正確的,但是解析器將ID識別爲錯誤的標記,問題是什麼?

+1

您應該檢查解析過程中是否有任何異常。 ANTLR通常會嘗試從解析錯誤/異常中恢復,然後樹可能會像您所觀察到的那樣變形。 –

+0

謝謝,Lex,我認爲這是ANTLR的錯誤恢復,'{'根本不是一個有效的標記。 – Zava

回答

0

我試過用ANTLR 3.4,它似乎正常工作。 eclipse插件的解釋器繪製了與您的帖子中相同的錯誤樹,但它被稱爲buggy。

+0

謝謝Andy,如果這只是一個bug,我會繼續添加一些語法,並手寫測試用例。 – Zava