Озаботился, проблемой парсинга yaml и pdoc. Оказывается, все не так страшно, как мне казалось. Теоретически, есть генераторы парсеров, где можно описать грамматику, и они сгенерируют полноценный обработчик. Практически - для yaml это будет муторно (тем более, есть готовый код, который можно портировать). А вот для pdoc тема прокатит.
Конкретно для JS нашел 2 парсера, которые внушают хоть какое-то доверие (имеют большое собщество, стабильные версии, и своевременно обновляются).
Какой из парсеров выбрать - пока не знаю. PEGjs - проще в освоении, как любой пакратовский. С другой стороны, jison значительно мощнее и активнее развивается. В пользу jison говорит, что на нем сделали coffescript.
Возвращаемся к pdoc. Шаблоны страниц на ERB можно использовать почти без изменений - под ноду есть темплейтер EJS с аналогичным синтаксисом. Правила парсинга описаны на TreeTop - их 1:1 использовать не получится, но можно без особых проблем сконвертировать под jison/PEGjs. Короче, на “свой код” остается совсем немного.
PS. Теперь понял, как дешево и сердито сделать парсер ббкода. В нодеке я ббкод использовать не планирую, но данные-то сконвертировать все равно надо.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"39c21abc3df9550077797d18":{"_id":"39c21abc3df9550077797d18","hid":349,"name":"Vitaly","nick":"Vitaly","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"4e42531a9970730077103b04","hid":12310,"title":"Оказывается, парсеры - не так уж и страшно","html":"<p>Озаботился, проблемой парсинга yaml и pdoc. Оказывается, все не так страшно, как мне казалось. Теоретически, есть генераторы парсеров, где можно описать грамматику, и они сгенерируют полноценный обработчик. Практически - для yaml это будет муторно (тем более, есть готовый код, который можно портировать). А вот для pdoc тема прокатит.</p>\n<p>Конкретно для JS нашел 2 парсера, которые внушают хоть какое-то доверие (имеют большое собщество, стабильные версии, и своевременно обновляются).</p>\n<ul>\n<li><a href=\"http://zaach.github.com/jison/docs/\" class=\"link link-ext\" data-nd-link-orig=\"http://zaach.github.com/jison/docs/\" target=\"_blank\" rel=\"nofollow noopener\">jison</a> - аналог bison/flex.</li>\n<li><a href=\"http://pegjs.majda.cz/\" class=\"link link-ext\" data-nd-link-orig=\"http://pegjs.majda.cz/\" target=\"_blank\" rel=\"nofollow noopener\">PEGjs</a> - packrat-овский парсер</li>\n</ul>\n<p>Какой из парсеров выбрать - пока не знаю. PEGjs - проще в освоении, как любой пакратовский. С другой стороны, jison значительно мощнее и активнее развивается. В пользу jison говорит, что на нем сделали coffescript.</p>\n<p>Возвращаемся к pdoc. Шаблоны страниц на ERB можно использовать почти без изменений - под ноду есть темплейтер EJS с аналогичным синтаксисом. Правила парсинга описаны на TreeTop - их 1:1 использовать не получится, но можно без особых проблем сконвертировать под jison/PEGjs. Короче, на “свой код” остается совсем немного.</p>\n<!--cut-->\n<p>PS. Теперь понял, как дешево и сердито сделать парсер ббкода. В нодеке я ббкод использовать не планирую, но данные-то сконвертировать все равно надо.</p>\n","user":"39c21abc3df9550077797d18","ts":"2011-08-10T09:44:58.000Z","st":1,"cache":{"comment_count":0},"views":914,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}