如何为字符串编写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]]*? '“;