2010-02-14 138 views
2

我試圖寫在ANTLR評論匹配規則,這是目前以下:ANTLR評論問題

LINE_COMMENT 
    : '--' (options{greedy=false;}: .)* NEWLINE {Skip();} 
    ; 

NEWLINE : '\r'|'\n'|'\r\n' {Skip();}; 

此代碼工作正常,除了在評論是文件的最後一個字符的情況下,在這種情況下,它會拋出一個NoViableAlt異常。我怎樣才能解決這個問題?

回答

2

爲什麼不:

LINE_COMMENT  : '--' (~ NEWLINE)* ; 
fragment NEWLINE : '\r' '\n'? | '\n' ; 

如果您有沒有碰到過這樣好了,又詞法規則(全部大寫)只能由常量和標記,而不是其他的詞位。你需要一個解析器規則。

+0

不要你的意思是'片段NEWLINE',而不是'令牌NEWLINE'?由於'NEWLINE'可能存在多個字符,否定否定符在'LINE_COMMENT'規則中仍然有效? – 2010-02-14 11:50:40

+0

,除了對「片段」的更改和對NEWLINE片段的修改之外,這是有效的。謝謝!不能依靠我沒想到它...... – RCIX 2010-02-14 12:21:12

+0

@RCIX:糾正了'片段'部分。對不起,有點生疏。很高興它的工作。 – cletus 2010-02-14 12:32:13

0

我會去:

LINE_COMMENT 
    : '--' ~('\r' | '\n')* {Skip();} 
    ; 

NEWLINE 
    : ('\r'? '\n' | '\r') {Skip();} 
    ;