退出ANTLR4的报价?

时间:2015-07-06 17:39:31

标签: antlr4

我有这个语法:

grammar Hello;
STRING : '"' ( ESC | ~[\r\n"])*  '"' ;
fragment ESC : '\\"' ;
r : STRING;

我想在输入字符串时输入:

"my name is : \" StackOverflow \" "

结果将是:

"my name is : "StackOverflow" "

但这是我测试时的结果:

enter image description here

那么我应该怎么做才能解决这个问题呢?我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果不针对特定语言,就无法在语法中处理它。您可以在侦听器或访问者中移动解析树时删除斜杠,也可以在语法中嵌入目标特定代码。

如果Java是您的目标,您可以这样做:

STRING
 : '"' ( ESC | ~[\r\n"] )*  '"'
   {
     String text = getText();
     text = text.substring(1, text.length() - 1);
     text = text.replaceAll("\\\\(.)", "$1");
     setText(text);
   }
 ;