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;} ;
當我測試的情況下,如下所示:
的問題是我的字符串「{{{test}}}」是不正確的,但是解析器將ID識別爲錯誤的標記,問題是什麼?
您應該檢查解析過程中是否有任何異常。 ANTLR通常會嘗試從解析錯誤/異常中恢復,然後樹可能會像您所觀察到的那樣變形。 –
謝謝,Lex,我認爲這是ANTLR的錯誤恢復,'{'根本不是一個有效的標記。 – Zava