字符串标记的Antlr标记定义

时间:2014-11-12 18:33:34

标签: c# antlr

我的Antlr语法的字符串标记定义有问题。

我目前正在使用以下内容:

String_tok : '"' ( ~["\n\r] | '\\"')* '"' ;

这似乎适用于这样的令牌:"This is a STRING"

但是,它不适用于此:"This is a \"STRING\""

我尝试了一些变化,我可以得到一个但不是另一个的东西。我希望得到一些帮助来解决这个问题。感谢。

1 个答案:

答案 0 :(得分:0)

以下内容应该有效:

String_tok : '"' ('\\' ["\\] | ~["\\\r\n])* '"' ;

基本上,替换的第一部分允许您使用\"\\转义,第二部分则使用其他所有内容。这意味着也要排除\字符。

在原始模式中,字符串中的\字符被~["\n\r]表达式使用,并且永远不会进入'\\"'表达式。