Разбор на многоредови низове с antlr

Имам граматика, която изглежда така:

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

където

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

И моят файл съдържа едно "a" производство във всеки ред, така че в момента изпускам всички нови редове. Бих обаче искал да анализирам многоредови низове, как мога да направя това? Не работи, ако просто разреша "\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