Он выходит из строя, с линией 1: 0 несовпадающими вход «название: привет world \ n 'Ожидание IDENT
Вы должны понимать, что лексер работает независимо от анализатора. Независимо от того, что синтаксический анализатор будет «как», чтобы соответствовать в определенный момент времени, лексер просто не создает маркеры после нескольких строгих правил:
- пытаются соответствовать лексемы сверху вниз в правилах LeXeR (правила, определенные первой испытываются первый);
- соответствовать как можно большему количеству текста. В случае, если правила 2 совпадают с одинаковым количеством текста, первое правило будет согласовано.
Из-за правила 2 ваш REST_OF_LINE
всегда будет «выигрывать» из правила IDENT
. Единственный раз, когда будет создан токен IDENT
, когда в конце не будет \n
. Вот что происходит с вашими грамматиками: сообщения об ошибках указывают, что он ожидает токена IDENT
, который не найден (но производится токен REST_OF_LINE
).
Я знаю, что ANTLR является излишним для разбора MIME-подобных заголовков, но это только на вершине более сложного файла.
Вы не можете просто определить маркеры (правила lexer), которые вы хотите применить к заголовку файла. Эти жетоны будут также применяться к остальной части более сложного файла. Возможно, вы должны предварительно обработать заголовок отдельно от остальной части файла?
К сожалению, я хочу прочитать весь текст до конца строки, который может включать числа, буквы, знаки препинания. –
Нет, вы не начинаете с АСТ, вы начинаете с грамматики. Кроме того, производство АСТ даже не обязательно: вы можете просто работать с деревом разбора. –