我有这个语法:
grammar Hello;
STRING : '"' ( ESC | ~[\r\n"])* '"' ;
fragment ESC : '\\"' ;
r : STRING;
我想在输入字符串时输入:
"my name is : \" StackOverflow \" "
结果将是:
"my name is : "StackOverflow" "
但这是我测试时的结果:
那么我应该怎么做才能解决这个问题呢?我们将非常感谢您的帮助。
答案 0 :(得分:1)
如果不针对特定语言,就无法在语法中处理它。您可以在侦听器或访问者中移动解析树时删除斜杠,也可以在语法中嵌入目标特定代码。
如果Java是您的目标,您可以这样做:
STRING
: '"' ( ESC | ~[\r\n"] )* '"'
{
String text = getText();
text = text.substring(1, text.length() - 1);
text = text.replaceAll("\\\\(.)", "$1");
setText(text);
}
;