Компиляция / анализ значимых пробелов - PullRequest
0 голосов
/ 10 сентября 2010

Привет, я хочу создать псевдо-Markdown язык и парсер, чтобы разобрать его в xhtml.

Я никогда не писал компилятор ... Я кратко рассмотрел ANTLR, и мне интересно, может ли ANTLR обрабатывать вещи с осмысленным пробелом?

Так скажи, у меня что-то вроде этого:

some text

  some other text

  # bullet point

    # nested bullet point

В зависимости от контекста и количества префиксных пробелов эти строки будут означать разные вещи.

Какой хороший инструмент для написания парсера для этого?

Спасибо, Alex

Ответы [ 2 ]

2 голосов
/ 10 сентября 2010

ANTLR наверняка можно использовать для этого.Однако, если вы новичок в ANTLR или в генераторе синтаксических анализаторов в целом, я не думаю, что смогу дать краткое объяснение того, как именно это сделать.Я рекомендую вам попробовать несколько простых вещей с ANTLR и просмотреть The Definitive ANTLR Reference .В нем даже есть параграф об этой проблеме, которая похожа на синтаксический анализ кода Python.Подробности см. В главе 4.3 Правила , параграф Излучение более одного токена на правило Lexer .

1 голос
/ 10 сентября 2010

Мой подход заключается в том, чтобы заставить ваш лексер генерировать токены отступа / отступа. Сохраните текущий уровень отступа и сопоставьте шаблон, например, \n *. Подсчитайте количество пробелов и, если оно отличается от текущего уровня отступа, выведите маркер indent / outdent.

Аналогичным образом подсчитывать вкладки в начале строки. Вставка правила, которое вызывает ошибку в шаблоне \n[ \t]*, должна мешать людям смешивать символы табуляции и пробелы.

...