如何为字符串编写antlr4规则

时间:2018-03-07 10:51:22

标签: antlr4

我对字符串和注释有以下规则:

Double_quoted_string : '"' ( ~[\n\r] )* '"'  ;
SL_Comment : '//' .*? '\r'? '\n' -> channel(HIDDEN) ;

但我看到以下输入:

printf("Hello \"something "); //printf("Bye ");

生成的字符串标记是:

"Hello \"something "); //printf("Bye "

即。贪婪地进行最长的匹配,而不应用评论规则。

我希望字符串只是“Hello \”的东西“。应该如何修改规则?

1 个答案:

答案 0 :(得分:1)

喜欢这个

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

内部( ... )*的简短说明:

  • ~[\\"\n\r]匹配除\"\n\r
  • 之外的任何字符
  • '\\' [\\"]匹配\\\" *

*如果您想要逃避更多,只需将它们添加到角色类:'\\' [\\"'tbnrf]将匹配\\\"\'\t\b\n\r\f