我寫了一個存根語法(只匹配評論到目前爲止),和它給我的錯誤:ANTLRWorks錯誤編譯語法:「語法錯誤:無效字符文字:無效」
syntax error: invalid char literal: <INVALID>
而且,我已經追查到錯誤,以在以下命令:
... ~LINE_ENDING* ...
LINE_ENDING : ('\n' | '\r' | '\r\n');
有人可以幫我解決這個問題嗎?
我寫了一個存根語法(只匹配評論到目前爲止),和它給我的錯誤:ANTLRWorks錯誤編譯語法:「語法錯誤:無效字符文字:無效」
syntax error: invalid char literal: <INVALID>
而且,我已經追查到錯誤,以在以下命令:
... ~LINE_ENDING* ...
LINE_ENDING : ('\n' | '\r' | '\r\n');
有人可以幫我解決這個問題嗎?
~
運算符只能應用於一個集合。在詞法分析器中,集合的元素是輸入流的字符。換句話說,你可以有這樣的:
~( 'a'..'z'
| 'C'
| '\r'
| '\n'
)
但你不能有這樣的,因爲它是一個序列(兩個字符),而不是一個設置。
~('\r\n')
您遇到的問題是第二種情況的延伸。
不知道爲什麼你會得到這個錯誤(我目前沒有辦法自己測試它)。也許你否定單個字符(\r
或\n
)或雙字符(\r\n
)是一個問題?
會發生什麼事,如果你嘗試:
SingleLineComment
: '//' (~LineBreakChar)* (NewLine | EOF)
;
LineBreakChar
: '\r' | '\n'
;
NewLine
: '\r'? '\n' | '\r'
;
?
這很有趣:當使用'〜('\ r'|'\ n')*'時,我不會得到錯誤,所以它一定是出於這個原因。我將不得不添加評論,並可能會報告這個或其他內容,感謝您的幫助! – RCIX 2009-12-10 02:18:54
這很有道理,+1。 @RCIX:將此標記爲公認的答案是公平的。 – 2009-12-10 08:51:42
啊謝謝!這就說得通了... – RCIX 2009-12-10 10:07:36