2011-11-14 19 views
2

說我有一塊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」因此,這似乎是完全不可理解。你有什麼想法?

回答

1

雖然你已經把WSHIDDEN通道,"x y z"三個Ident令牌,因爲WS令牌在語法規則僅丟棄,內詞法分析規則。

更具體,我有一個規則

VARIABLE: ('A'..'Z')+ DIGIT* ; 

我希望它認識到變量的身份像X3,Y4,XX55等,但出人意料的是,這個規則承認「XY」因此,這似乎是完全不可理解。你有什麼想法?

沒有,規則VARIABLE不匹配" X Y"(包括空格):你一定是做錯了什麼。

3

Ident : LETTER (LETTER | DIGIT)*;表示Ident是一個字母,後跟零個或多個字母或數字。 沒有空格!
這就是爲什麼「XYZ」被認爲像3 訂貨號

+0

謝謝。但。爲什麼你說無空白?我有一個WS規則來承認它。 – zell

+0

WS規則匹配:('x'和'y')和('y'和'z')之間的2個空格 –

相關問題