Как написать парсер для разметки? - PullRequest
1 голос
/ 29 июня 2011

Я бы хотел запрограммировать синтаксический анализатор для языка разметки, подобного BBCode, Markdown, Wikisyntax и т. Д., Используя язык высокого уровня, такой как Python или Perl. Он должен включать секционирование, подсветку кода, автоматическое создание ссылок, встраивание изображений, но позволяет использовать HTML для более сложного форматирования.

Кто-нибудь делал подобные вещи или работал в тесном контакте с этими системами и мог бы в целом описать, как это можно сделать эффективно? Хотя эффективность не столь важна для такой маленькой системы, в целом она благоприятна. В частности, я хотел бы узнать, существует ли более эффективный способ, чем использование регулярных выражений для такой программы.

1 Ответ

0 голосов
/ 22 ноября 2012

Для общего обсуждения ...

Вы должны начать со следующего плана:

  • вам нужно перебирать все данные по всей таблице
  • вам нужно идентифицировать каждыйchar по контексту, так как это может быть открытие тега ('<', '[' и т. д.) или просто char.Это может быть сделано с помощью флага escape, запускаемого escape-символом (как в некоторых языках обратная косая черта).если вы используете этот подход, вам также необходимо проверить наличие сбежавшего спуска. </li>
  • вам также может понадобиться флаг, указывающий, что вы находитесь внутри комментария или раздела специальных данных, которые могут иметь другие правила спуска.
  • вам нужно построить древовидную структуру или хотя бы какой-нибудь стек для вложенных тегов.Вот почему регулярные выражения являются плохой идеей: они не только требуют больших накладных расходов, но и бесполезны, если вы хотите получить правильный закрывающий тег для второго тега x (x = any) в следующем фрагменте кода: <x><x><x></x><x><x></x></x><x></x><!-- </x> -->this one →</x><x></x></x>
...