2014-02-18 2 views
0

Я пытаюсь разобрать этот кусок текстаТребуется предикат Antlr4 lexer?

:20: test :254: 
aapje 
:21: rest 
... 

:20: и :21: являются специальными тегами, потому что они начинают линию. :254: должен быть «нормальным» текстом, так как он не начинается с новой строки.

Я хотел бы, чтобы результат

(20, 'test :254: \naapje') 
(21, 'rest') 

Линии прекращаются с использованием либо \r\n или «\ п»

Я начал пытаться игнорировать пробелы, но тогда я совпадает с «: 254 : '. Поэтому я должен создать что-то, что использует информацию о пробелах.

То, что я хотел бы быть в состоянии сделать что-то вроде этого:

lexer grammar MT9740_lexer; 

InTagNewLine : '\r\n' ~':'; 
ReadNewLine :'\r\n' ; 

Но первый будет потреблять : Как я могу еще генерировать эти маркеры? Или есть ухищренный подход?

ответ

1

Я понимаю, что вы ищете некоторые правила lexer, которые соответствуют началу строки. Это правило лексер должен разметить свой: 20: или: 21: появляется в начале строки только

SOL : {getCharPositionInLine() == 0}? ':' [0-9]+ ':' ; 

Ваши правила синтаксического анализа могут затем искать для этого маркера SOL перед анализом остальной части строки.

Смежные вопросы