У меня небольшие проблемы с ручным выводом токена с правилом лексера в ANTLR. Я знаю, что необходимо использовать функцию emit (), но, похоже, по этому поводу явно отсутствует документация. У кого-нибудь есть хороший пример того, как это сделать?
Книга ANTLR дает хороший пример того, как вам нужно сделать это для анализа вложенности Python. Например, если вы видите определенное количество пробелов, превышающее пробел предыдущей строки, создайте токен INDENT, но если его меньше, используйте токен DEDENT. К сожалению, в книге скрыт фактический синтаксис, который требуется.
РЕДАКТИРОВАТЬ: Вот пример того, что я пытаюсь разобрать. Это вложенные цитаты Маркдауна:
before blockquote
> text1
>
> > text2
>
> text3
outside blockquote
Теперь мой подход состоит в том, чтобы по существу считать> символы на строку. Например, приведенное выше похоже на то, что оно должно выдавать (примерно ...) PARAGRAPH_START, CDATA, PARAGRAPH_END, BQUOTE_START, CDATA, BQUOTE_START, CDATA, BQUOTE_END, CDATA, BQUOTE_END, PARAGRAPH_START, CDATA, PARAGRAPH_END. Трудность здесь заключается в окончательном BQUOTE_END, который, я думаю, должен быть воображаемым токеном, выпущенным после того, как найден элемент, не являющийся блок-цитатой (и уровень вложенности>> 1)