Pull to refresh

Comments 21

Похвальное начинание, но для того чтобы претендовать на практическую полезность, даже без покрытия тестами, нужно произвести и опубликовать сравнение по производительности с другими парсерами/конвертерами
Интересней было бы увидеть аналогичный парсер для Markdown (с использованием FSM). Особенно в свете недавней инициативы по разработке общепринятой спецификации Markdown habrahabr.ru/post/235611/
Но как мне кажется, в случае с markdown без регулярок не обойтись, например для нахождения доп. параметров, так как не представляю какой будет размер матрицы для FSM чтобы учесть всё.
Пару лет назад обсуждалось на реддите. Может быть вам будет интересно. Там же реализация парсера на конечных автоматах, правда на си и за счет кодогенерации.
Хотелось бы увидеть бенчмарки с регулярками на тестовых данных с большим вложением тегов.
Используйте константы. Через месяц вы уже и сами не вспомните что за магия чисел происходит
Вы предлагаете именовать состояния автомата? Мне кажется, лучше добавить картинку с автоматом
например для $char_type, $node['type']
Да, пожалуй, вы правы. Я быстро перешел к генераторам парсеров из DSL (yacc&lex и прочие), поэтому для меня куда легче ориентироваться в грамматике/графе, чем пытаться заменить magic numbers в коде.
Мне больше нравится либа XBBCode от наших узбекистанских друзей. Правда, по-моему сам изначальный разработчик то ли подзабил свой проект, то ли он на гитхабе под другим ником теперь… В общем самая развитая ветка на гитхабе вот эта: github.com/Gemorroj/xBBCode
Сам его слегка правил и улучшал (как ни странно мои правки тоже вошли в его код).

PS: эти парсеры удивительно похожи… Хм.
Я, конечно, не PHP-программист, но мне показалось что это и есть xBB.
Есть некие схожие признаки, но да, код другой. Представленный в статье однозначно не xBB
На самом деле я использовал некоторые наиболее мне понравившиеся идеи из xBB. Раньше я работал с xBB и даже разобрался как он работает, потом у меня появились новые идеи, возможно не самые лучшие, и я решил написать свой.
Парсер на регулярках:

— Может некорректно обрабатывать BBCode;

Регулярка — это тот же конечный автомат, только описанный в компактной форме. Он может работать некорректно только в том случае, если вы написали некорректное регулярное выражение, и — при всем уважении — найти ошибку в нем куда легче, чем в матрице из 200 чисел.

Кстати говоря, как вы решаете проблему с некорректным вводом, типа такого:

[b]Test[/i]
Зашел в комментарии, чтобы написать что-то подобное.
Действительно, автор, Вам стоило бы обратить внимание на то, что конечные автоматы и регулярные выражения имеют одинаковую мощность языков (может быть термин уже неправильно называю, но смысл понятен должен быть). Поэтому создавать автомат с помощью жестко закодированной таблицы в наше время как бы не слишком разумно.
Не обновлялся с 2010 года, сайт умер… По-моему это мёртвая штука.
Да не, парсит вроде не хуже, чем в 2010.
А чего там обновлять-то, если сам bbcode не меняется?
Хорошая работа, но мне больше нравятся peg парсеры чем LL(предсказывающие анализаторы). Код выглядит очень лаконично и без магических цифр.
Sign up to leave a comment.

Articles