我的Antlr语法的字符串标记定义有问题。
我目前正在使用以下内容:
String_tok : '"' ( ~["\n\r] | '\\"')* '"' ;
这似乎适用于这样的令牌:"This is a STRING"
但是,它不适用于此:"This is a \"STRING\""
我尝试了一些变化,我可以得到一个但不是另一个的东西。我希望得到一些帮助来解决这个问题。感谢。
答案 0 :(得分:0)
以下内容应该有效:
String_tok : '"' ('\\' ["\\] | ~["\\\r\n])* '"' ;
基本上,替换的第一部分允许您使用\"
和\\
转义,第二部分则使用其他所有内容。这意味着也要排除\
字符。
在原始模式中,字符串中的\
字符被~["\n\r]
表达式使用,并且永远不会进入'\\"'
表达式。