Я хотел бы использовать правило или последовательность в качестве разделителя для токенизации файла, но не возвращать разделитель
Я пытался использовать -> channel(hidden)
, но это портит анализ
У меня есть грамматика такая, что
grammar test;
file
: l1 l2? l3
;
l1
: 'L1:' STRING_LITERAL '\n'
;
l2
: 'L2:'(NUMBER)+ '\n'
;
l3
:'L3:' WORD|NUMBER '\n'
;
NUMBER : [0-9]+ ;
STRING_LITERAL : '"' (~["\\\r\n] | EscapeSequence)* '"';
WORD : ('a'..'z' | 'A'..'Z')+;
fragment EscapeSequence
: '\\' [btnfr"'\\]
| '\\' ([0-3]? [0-7])? [0-7]
;
и входной файл типа
L1: "SO LONG"
L2: 42
L3: FISH
Я бы не хотел возвращать L1:
L2:
и L3:
, но возвращаю "ТАК ДОЛГО" 42
и FISH
Я получаю токены, которые ищу, но я также получаю \n
L1:
L2:
и L3:
Также я заметил, что если у меня установлено правило l1 как l1: (~ ["\\ r \ n]) *; я не могу найти совпадения до конца строки, но получаю каждое слово как отдельный токен. смысл для меня, но есть ли способ принять это как один токен?