Разбор многострочных строк с помощью antlr

У меня есть грамматика, которая выглядит так:

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

куда

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

И мой файл содержит одну продукцию «а» в каждой строке, поэтому в настоящее время я удаляю все новые строки. Однако я хотел бы проанализировать многострочные строки, как я могу это сделать? Это не сработает, если я просто позволю '\r' и '\n' внутри строки.


person darenn    schedule 04.09.2015    source источник


Ответы (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' ;
person GRosenberg    schedule 04.09.2015