JSON语法所需的ANTLR语法的解释

时间:2013-05-10 05:19:49

标签: parsing antlr grammar lexical-analysis

目前我正在调查来自ANTLR项目wiki的JSON ANTLR语法:http://www.antlr.org/wiki/display/ANTLR3/JSON+Interpreter

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

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

我无法得到的是他们在\\规则中否定\"String的原因?无论如何,它将与EscapeSequence匹配。

如果我们将其更改为~('\u0000'..'\u001f'),那么它应该是相同的。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

这用于禁止单个未转义的反斜杠和单个未转义的双引号。请注意,它们显示为'\\''\"',因为至少前者在语法文字中也是不允许的。

相反,EscapeSequence规则允许转义反斜杠和双引号。

省略单个未转义的双引号会将String标记化扩展到可以找到的最后一个引号,但它应该在第一个未转义的引号处终止。

省略排除单个未转义的反斜杠将允许以反斜杠开头的序列,不支持EscapeSequences。