如何在 ANTLR4 中的字符串中包含引号

How to include quotes in string in ANTLR4

如何将字符串和字符的引号包含在字符串中。示例是 "This is a \" string",在这种情况下,它应该生成一个字符串,而不是 "This is a \" 作为一个字符串,而 string" 作为错误。角色也是如此。例子是'\'',但是 在我的例子中它只是'\'。

这是我目前的解决方案,只在没有引号的情况下有效。

字符 : '\'' ~('\'')+ '\'' ;

字符串 : '"' ~('"')+ '"' ;

您的 string/char 规则没有正确处理转义序列。对于角色,它应该是:

CHARACTER: '\'' '\'? '.' '\'';

在这里,我们将转义字符(反斜杠)作为规则的一部分,并要求在其后跟一个额外的字符(无论它是什么)。与字符串相似:

STRING: '"' ('\'? .)+? '"';

通过使用 +? 我们告诉 ANTLR4 以非贪婪的方式进行匹配,在初始引号之后的第一个非转义引号字符处停止。