2011-10-26 82 views
3

忽略空格我有以下ANTLR語法:在ANTLRworks

grammar mygrammar; 

ASSIGNMENT 
    : ID '=' INT 
    ; 

ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* 
    ; 

INT : '0'..'9'+ 
    ; 

WS : (' ' 
     | '\t' 
     | '\r' 
     | '\n' 
     ) {$channel=HIDDEN;} 
    ; 

只有分配規則其實是我的,其餘的都是默認由ANTLRWorks 1.4.3添加。

當我在解釋器中嘗試語法時,諸如「a = 5」的字符串成功,但是諸如「b [space] = [space] 6」之類的字符串失敗:由於空格,我得到一個MismatchedTokenException :

Picture of the interface with a MismatchedTokenException

從閱讀ANTLR網站,以及

Ignore rules: WS
{$channel=HIDDEN}
文/語法規則,似乎空白應該被忽略,然而,這並非如此。

我在做什麼錯?

+0

指定「分配」而不是「分配」固定它。 – checkers

回答

6

我知道你已經找到答案了,但是讓我解釋一下爲什麼改變了ASSIGNMENTassignment解決了它。

因爲以大寫字母開頭的規則是詞法規則(即令牌)。而{skip();}{$channel=HIDDEN;}會導致詞法分析器規則從解析器規則中跳過(或隱藏),而不是從詞法分析器規則中跳過(或隱藏)。

這就是爲什麼ASSIGNMENT(詞法分析規則)不接受任何空格,並且assignment(解析器規則)不會忽略它們。