我有一个语法,看起来像这样:
a: b c d ;
b: x STRING y ;
,
STRING: '"' (~('"' | '\' | 'r' | 'n') | '\' ('"' | '\'))* '"';
我的文件在每行中包含一个'a'产品,所以我目前删除所有换行符。然而,我想要解析多行字符串,我该怎么做?如果我只允许'r'和'n'在字符串内,它不会工作。
在这种情况下,您只是在寻找多行字符串词法分析器规则。丢掉换行符并不会影响字符串规则的构造。与字符串规则匹配的换行符将在词法分析器考虑空白规则之前被使用。
STRING : DQUOTE ( STR_TEXT | EOL )* DQUOTE ;
WS : [ trn] -> skip;
fragment STR_TEXT: ( ~["rn\] | ESC_SEQ )+ ;
fragment ESC_SEQ : '\' ( [btf"\] | EOF )
fragment DQUOTE : '"' ;
fragment EOL : 'r'? 'n' ;