2017-09-03 119 views
0

工作分配的要求「非法逃逸的字符串」表達的是:ANTLR4 - 對於詞法分析器

「非法逃逸字符串:」 +錯誤字符串:當詞法分析器檢測串非法 逃逸。錯誤的字符串是從字符串的開頭到非法轉義的 。

所有支持的轉義序列如下:

\ b退格

\˚F換頁

\ r回車

\ n換行

\噸水平標籤

\」單引號

\」雙引號

\反斜槓

我使用的代碼爲 「字符串」 作爲同這個帖子推薦:

ANTLR4 - Need an explanation on this String Literals

STRINGLIT: '"' ('\\' [btnfr"'\\] | ~[\b\t\f\r\n\\"])* '"'; 

而且還解決了「未終結(或未關閉的)字符串」有點如下:

UNCLOSE_STRING: '"' ('\\' [btnfr"'\\] | ~[\b\t\f\r\n\\"])* ; 

於是,我就寫下原型像這樣的要求:

ILLEGAL_ESCAPE: '"' .*? ESCAPE ; 
fragment ESCAPE: [\b\f\r\n\t'"\\] 

誰能幫我想弄清楚是否做了錯誤的事情,我認爲STRING和ILLEGAL_ESCAPE之間有些不清楚,所以結果不對。 我很感激您是否能夠像我之前提到的那樣再次修復它以滿足要求。提前致謝!!

回答

0

嘗試使用以下詞法規則:

ILLEGAL_ESCAPE: '"' ('\\' ~[btnfr"'\\] | ~'\\')*; 
+0

我認爲您的解決方案是相當不錯的,但你能解釋一下你的詞法規則VS我的詞法規則。非常感謝^^ –

+0

你的片段規則'ESCAPE'不正確。它不匹配兩個符號序列(反斜槓+字符),而只是一個特殊符號('\ r','\ b'等)。儘管我的詞法分析器規則匹配所有雙符號序列,但以反斜槓和不包含反斜槓的所有序列開頭。 –