2009-12-09 450 views

回答

2

~運算符只能應用於一個集合。在詞法分析器中,集合的元素是輸入流的字符。換句話說,你可以有這樣的:

~( 'a'..'z' 
| 'C' 
| '\r' 
| '\n' 
) 

但你不能有這樣的,因爲它是一個序列(兩個字符),而不是一個設置

~('\r\n') 

您遇到的問題是第二種情況的延伸。

+0

這很有道理,+1。 @RCIX:將此標記爲公認的答案是公平的。 – 2009-12-10 08:51:42

+0

啊謝謝!這就說得通了... – RCIX 2009-12-10 10:07:36

1

不知道爲什麼你會得到這個錯誤(我目前沒有辦法自己測試它)。也許你否定單個字符(\r\n)或雙字符(\r\n)是一個問題?

會發生什麼事,如果你嘗試:

SingleLineComment 
    : '//' (~LineBreakChar)* (NewLine | EOF) 
    ; 

LineBreakChar 
    : '\r' | '\n' 
    ; 

NewLine 
    : '\r'? '\n' | '\r' 
    ; 

+0

這很有趣:當使用'〜('\ r'|'\ n')*'時,我不會得到錯誤,所以它一定是出於這個原因。我將不得不添加評論,並可能會報告這個或其他內容,感謝您的幫助! – RCIX 2009-12-10 02:18:54