使用antlr解析多行字符串

时间:2015-09-04 00:32:36

标签: antlr antlr4

我的语法看起来像这样:

a: b c d ;
b: x STRING y ;

,其中

STRING: '"' (~('"' | '\\' | '\r' | '\n') | '\\' ('"' | '\\'))* '"';

我的文件在每行中包含一个'a'产品,因此我目前正在删除所有新行。我想要解析多行字符串,我该怎么做?如果我在字符串中只允许'\ r'和'\ n',它就不起作用。

1 个答案:

答案 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' ;