我的语法看起来像这样:
a: b c d ;
b: x STRING y ;
,其中
STRING: '"' (~('"' | '\\' | '\r' | '\n') | '\\' ('"' | '\\'))* '"';
我的文件在每行中包含一个'a'产品,因此我目前正在删除所有新行。我想要解析多行字符串,我该怎么做?如果我在字符串中只允许'\ r'和'\ n',它就不起作用。
答案 0 :(得分:1)
IIUC,您只是在寻找多行字符串词法分析器规则。您删除换行符的事实确实不会影响字符串规则的构造。在词法分析器考虑空白规则之前,将在那里使用字符串规则中匹配的换行符。
STRING : DQUOTE ( STR_TEXT | EOL )* DQUOTE ;
WS : [ \t\r\n] -> skip;
fragment STR_TEXT: ( ~["\r\n\\] | ESC_SEQ )+ ;
fragment ESC_SEQ : '\\' ( [btf"\\] | EOF )
fragment DQUOTE : '"' ;
fragment EOL : '\r'? '\n' ;