2013-05-10 26 views
1

需要在我調查從ANTLR項目wiki的JSON ANTLR語法此刻的ANTLR語法的解釋:http://www.antlr.org/wiki/display/ANTLR3/JSON+Interpreter對JSON語法

String : 
    '"' (EscapeSequence | ~('\u0000'..'\u001f' | '\\' | '\"'))* '"' 
    ; 

fragment EscapeSequence 
     : '\\' (UnicodeEscape |'b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') 
     ; 

我能不明白的是爲什麼他們在否定\\\"String規則?無論如何,它將匹配EscapeSequence

如果我們將其更改爲~('\u0000'..'\u001f')那麼它應該是相同的。

我錯過了什麼?

回答

2

這用於禁止單個未轉義的反斜槓和單個未轉義的雙引號。請注意,這些顯示爲'\\''\"',因爲至少前者在語法文字中也是不允許的。

對比中的EscapeSequence規則允許使用反斜槓和雙引號。

省略排除單個未轉義的雙引號會將String標記化擴展到可以找到的最後一個引用,但它應該在第一個未轉義引號處終止。

省略排除單個未轉義的反斜槓將允許以反斜槓開頭的序列,這些不支持EscapeSequences。

+0

哦,我看到'EscapeSequence'允許'\\\',而'String'不允許''''。對? – zerkms 2013-05-10 10:07:29

+0

我想你明白了,儘管你的評論格式出錯了。 – Gunther 2013-05-10 10:18:00

+0

噢:-S這是因爲這個反斜槓纔是逃避反射。好,謝謝 – zerkms 2013-05-10 10:23:47