如何为字符串编写antlr4规则

如何为字符串编写antlr4规则,antlr4,Antlr4,我对字符串和注释有以下规则: Double_quoted_string : '"' ( ~[\n\r] )* '"' ; SL_Comment : '//' .*? '\r'? '\n' -> channel(HIDDEN) ; 但我看到,对于以下输入: printf("Hello \"something "); //printf("Bye "); 生成的字符串标记为: "Hello \"something "); //printf("Bye " i、 e.贪婪地进行最长的匹配,而

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

Double_quoted_string : '"' ( ~[\n\r] )* '"'  ;
SL_Comment : '//' .*? '\r'? '\n' -> channel(HIDDEN) ;
但我看到,对于以下输入:

printf("Hello \"something "); //printf("Bye ");
生成的字符串标记为:

"Hello \"something "); //printf("Bye "
i、 e.贪婪地进行最长的匹配,而不应用注释规则

我只希望字符串是“Hello\”某物。应该如何为此修改规则?

像这样

Double_quoted_string
  : '"' ( ~[\\"\n\r] | '\\' [\\"] )* '"'  
  ;
内部
(…)*
的简短说明:

  • ~[\\”\n\r]
    匹配除
    \
    \n
    \r
  • \\\'[\\']
    匹配
    \\
    \'
    *

*如果您想转义更多,只需将它们添加到字符类:
\\\\\\\\\\\[\\\“'tbnrf]
将匹配
\\\
\'
\t
\b
\r
\f

谢谢您的回答,请不要贪心:
双U字串:“([\r]]*? '“;