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 范围字符允许在您的字符串中(包括终止符“和开始转义序列的 \。