說我有一塊ANTLR語法(詞法部分)爲什麼令牌規則(在ANTLR中)「IDENT:LETTER(LETTER | DIGIT)*;」不能識別「x y z」?
fragment LETTER : ('a'..'z' | 'A'..'Z') ;
fragment DIGIT : '0'..'9';
INTEGER : DIGIT+ ;
Ident : LETTER (LETTER | DIGIT)*;
WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;};
COMMENT : '//' .* ('\n'|'\r') {$channel = HIDDEN;};
我想到的是,由於WS吃令牌之間的所有空格,無論是「某某」和「XYZ」應該已經recognizied爲Ident的相同標記。但顯然只有「x y z」纔會被視爲3 Ident。所以當我對詞法分析器規則遇到空白時,我感到困惑。
更具體,我有一個規則
VARIABLE: ('A'..'Z')+ DIGIT* ;
我希望它認識到變量的身份像X3,Y4,XX55等,但出人意料的是,這個規則承認「XY」因此,這似乎是完全不可理解。你有什麼想法?
謝謝。但。爲什麼你說無空白?我有一個WS規則來承認它。 – zell
WS規則匹配:('x'和'y')和('y'和'z')之間的2個空格 –