2013-02-08 68 views
28

在決定從v3切換到v4後,我需要幫助使用我的ANTLR 4語法。我不是很有經驗的ANTLR所以我真的很抱歉,如果我的問題是愚蠢的;)

在v3中我用下面的代碼來檢測Java風格的評論:

COMMENT 
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} 
    | '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;} 
    ; 

V4中沒有規則 - 特定選項。行動(轉移到隱藏頻道)也是無效的。

有人請給我一個提示如何在ANTLR v4中做到這一點?

回答

33

V4的等效會是什麼樣子:

COMMENT 
    : ('//' ~[\r\n]* '\r'? '\n' 
     | '/*' .*? '*/' 
     ) -> channel(HIDDEN) 
    ; 

將提上HIDDEN頻道的所有單和多行註釋。但是,如果你沒有做任何與這些HIDDEN -tokens,你也可以skip這些標記,這將是這樣的:

COMMENT 
    : ('//' ~[\r\n]* '\r'? '\n' 
     | '/*' .*? '*/' 
     ) -> skip 
    ; 

注意,告訴詞法分析器或解析器匹配ungreedy,你不」不再使用options {greedy=false;},而是附加一個?,類似於許多正則表達式的實現。

+0

非常感謝! – user2055330 2013-02-08 19:09:34

+0

我現在使用你建議的代碼(使用通道的第一個變體),它會引發一個錯誤:在詞法分析規則'COMMENT'中的' - >命令必須是單個最外面的alt的最後一個元素。有什麼問題? – user2055330 2013-02-08 20:25:00

+0

@ user2055330,試試我編輯的版本。 – 2013-02-08 20:38:18