ANTLR - 如何在解析时接受双引号字符串中的双引号
ANTLR - How to accept double quotes inside double quoted string while parsing
我开发了一种解析特定文件的语法。如果用双引号(“一些文本”)括起来,我需要语法来解析字符串,我这样做了。我正在寻找的部分是,我需要处理所有字符串本身包含一些带有转义字符的双引号的情况。
还有就是反斜杠,必须接受双反斜杠,转成单反斜杠
请参考以下案例
“一些文本”-> 有效 -> 预期是 -> 一些文本
“一些“文本”” -> 有效 -> 预期是 -> 一些“文本”
“一些文本和反斜杠\\” -> 有效 -> 预期是 -> 一些文本和反斜杠\
“一些“文本””-> 无效输入-> 因为内部双引号没有转义字符
“一些文本和反斜杠\”-> 无效输入-> 因为没有转义字符
因为很多语言以前都处理过这种事情,所以 ANTLR 语法页面 ANTLR Grammars.
是一个很好的资源
我刚刚提取了 JSON 语法,删除了 Unicode 内容,这是他们的解决方案。它应该做你要求的。如果你想要 Unicode,你可以从 JSON 语法中按原样提取它。
STRING
: '"' (ESC | SAFECODEPOINT)* '"'
;
fragment ESC
: '\' (["\/bfnrt])
;
fragment SAFECODEPOINT
: ~ ["\\u0000-\u001F]
;
ESC
片段将识别您的 \” 序列并使其成为字符串的一部分(它还允许转义 / \b、\f、\n、\r、\t 和\。您可能不想要所有这些,但您可能至少想要 \,这将允许用户在他们的字符串中放置文字 \。SAFECODEPOINT
片段排除了您不想要的 ASCII 范围字符允许在您的字符串中(包括终止符“和开始转义序列的 \。
我开发了一种解析特定文件的语法。如果用双引号(“一些文本”)括起来,我需要语法来解析字符串,我这样做了。我正在寻找的部分是,我需要处理所有字符串本身包含一些带有转义字符的双引号的情况。
还有就是反斜杠,必须接受双反斜杠,转成单反斜杠 请参考以下案例
“一些文本”-> 有效 -> 预期是 -> 一些文本
“一些“文本”” -> 有效 -> 预期是 -> 一些“文本”
“一些文本和反斜杠\\” -> 有效 -> 预期是 -> 一些文本和反斜杠\
“一些“文本””-> 无效输入-> 因为内部双引号没有转义字符
“一些文本和反斜杠\”-> 无效输入-> 因为没有转义字符
因为很多语言以前都处理过这种事情,所以 ANTLR 语法页面 ANTLR Grammars.
是一个很好的资源我刚刚提取了 JSON 语法,删除了 Unicode 内容,这是他们的解决方案。它应该做你要求的。如果你想要 Unicode,你可以从 JSON 语法中按原样提取它。
STRING
: '"' (ESC | SAFECODEPOINT)* '"'
;
fragment ESC
: '\' (["\/bfnrt])
;
fragment SAFECODEPOINT
: ~ ["\\u0000-\u001F]
;
ESC
片段将识别您的 \” 序列并使其成为字符串的一部分(它还允许转义 / \b、\f、\n、\r、\t 和\。您可能不想要所有这些,但您可能至少想要 \,这将允许用户在他们的字符串中放置文字 \。SAFECODEPOINT
片段排除了您不想要的 ASCII 范围字符允许在您的字符串中(包括终止符“和开始转义序列的 \。