如何为字符串编写antlr4规则
how to write antlr4 rule for string
我对字符串和注释有以下规则:
Double_quoted_string : '"' ( ~[\n\r] )* '"' ;
SL_Comment : '//' .*? '\r'? '\n' -> channel(HIDDEN) ;
但我看到以下输入:
printf("Hello \"something "); //printf("Bye ");
生成的字符串标记是:
"Hello \"something "); //printf("Bye "
即贪婪地取最长的匹配,而不应用评论规则。
我希望字符串只是 "Hello \"something "。应该如何为此修改规则?
像这样
Double_quoted_string
: '"' ( ~[\"\n\r] | '\' [\"] )* '"'
;
内部简述( ... )*
:
~[\"\n\r]
匹配除 \
、"
、\n
和 \r
之外的任何字符
'\' [\"]
匹配 \
或 \"
*
* 如果你想转义更多,只需将它们添加到字符 class 中: '\' [\"'tbnrf]
将匹配 \
、\"
、\'
, \t
、\b
、\n
、\r
和 \f
我对字符串和注释有以下规则:
Double_quoted_string : '"' ( ~[\n\r] )* '"' ;
SL_Comment : '//' .*? '\r'? '\n' -> channel(HIDDEN) ;
但我看到以下输入:
printf("Hello \"something "); //printf("Bye ");
生成的字符串标记是:
"Hello \"something "); //printf("Bye "
即贪婪地取最长的匹配,而不应用评论规则。
我希望字符串只是 "Hello \"something "。应该如何为此修改规则?
像这样
Double_quoted_string
: '"' ( ~[\"\n\r] | '\' [\"] )* '"'
;
内部简述( ... )*
:
~[\"\n\r]
匹配除\
、"
、\n
和\r
之外的任何字符
'\' [\"]
匹配\
或\"
*
* 如果你想转义更多,只需将它们添加到字符 class 中: '\' [\"'tbnrf]
将匹配 \
、\"
、\'
, \t
、\b
、\n
、\r
和 \f