Russian Qt Forum
Ноябрь 27, 2024, 05:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Boost::spirit и иже с ним.  (Прочитано 8500 раз)
Bepec
Гость
« : Май 13, 2014, 09:40 »

Приветствую заглянувших. Имеющих баттхерт на эту тему, прощу закрыть глаза гантелями - и в теме тихо и руки накачаете Веселый

Собственно для чего тема? Попробовать что может спирит, какие у него есть + и -. Собственно буду дополнять первое сообщение, комментарии так и быть оставляю на откуп остальным.

Буду рад дополнительной информации.

Итак, boost::spirit.

Что это?
Spirit — одна из наиболее сложных частей Boost, предназначенная для написания парсеров напрямую в C++ тексте программы в виде, близком к форме Бэкуса-Наура.

+:
  • Написание парсеров при помощи правил, возможность обойтись без regExp и велосипедов.
  • Более простой для понимания код по сравнению с RegExp на больших проектах (6+ условий)

-:
  • Большое время компиляции из-за реализации. Примерно 30 секунд на 4-7 правил и увеличивается пропорционально количеству правил.
  • Большие траты памяти при компиляции. Невозможность использования более ~180-220 правил - компилятор завершается с нехваткой памяти http://habrahabr.ru/post/81175/. Т.е. для написания сложных парсеров нужно искать другой компонент.
  • Сложность понимания кода в простых конструкциях (4-6 условий) по сравнению с RegExp и велосипедами. (Таки это недостаток, не спорьте Улыбающийся )
« Последнее редактирование: Май 13, 2014, 11:40 от Bepec » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #1 : Май 13, 2014, 09:53 »

Я думаю, проблемы с памятью можно решить, перейдя на 64 бит операционку %) ну и планок доставить
Записан

Гугль в помощь
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #2 : Май 13, 2014, 10:07 »

Spirit это не только парсеры.

Spirit состоит из трёх частей (не считая устаревший classic):
Spirit::Qi - это как раз по написанию парсеров,
Spirit::Karma - создание генераторов (представление данных в заданный формат)  
и Spirit::Lex - лексические анализаторы..

В одном моём проектике приходилось парсить несколько разных форматов. Реализация была сделана на регекспах и токенайзерах..
После того, как познакомился со спиритом, переписал всё на нём..

Одним из плюсов спирита считаю, пожалуй то, что он позволяет легко реагировать на какие то изменения в начальных условиях.
И сам код получается гораздо более прозрачен.

По поводу числа правил..
Реализация xml парсера (из примеров) содержит всего 5 правил.

Если речь идёт о парсерах, описание которых требует более 100 правил..
То да, тут мозг сломается, а не только компилятор)    
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Bepec
Гость
« Ответ #3 : Май 13, 2014, 11:37 »

Там проблема с памятью, если почитать в статье - просто забитие памяти. Хотя можно многопоточно компилировать... Веселый  Попробовать можете Улыбающийся

Потихоньку буду дополнять, по мере интереса.
« Последнее редактирование: Май 13, 2014, 11:43 от Bepec » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Май 13, 2014, 11:51 »

Там проблема с памятью, если почитать в статье - просто забитие памяти. Количество значения вроде не имеет Веселый
Какое "забитие памяти"? Улыбающийся
В далёкие времена 32-битных ОС, когда пользовательскому процессу было доступно всего несколько гигабайт адресного пространства, компиляторами часто его не хватало при компиляции сложных шаблонных конструкций.
На 64-битных платформах таких проблем нет, адресного пространства для процесса более чем достаточно.
Записан
VPS
Гость
« Ответ #5 : Май 13, 2014, 12:04 »

Можно ещё здесь на русском почитать (там 5 частей)...
Записан
Bepec
Гость
« Ответ #6 : Май 13, 2014, 12:15 »

Улыбающийся Old - ссылка на хабр приведена. Можете подискутировать с автором той темы, но хабру я верю больше, чем вам Улыбающийся

to vps - спасибо, собственно я на него и наткнулся утром. Не так много русскоязычной документации Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Май 13, 2014, 12:45 »

ссылка на хабр приведена. Можете подискутировать с автором той темы
Да, но там нет ничего про "забите памяти". Улыбающийся Нам не о чем будет дискутировать с автором. Улыбающийся

но хабру я верю больше, чем вам Улыбающийся
Вот это и печально. Вы вместо того, что бы разобраться с вопросом и проверить самому - просто верите. Улыбающийся
А хабр это да - авторитетное издание: на нем могут публиковать статьи все, даже вы. Поэтому, только "самые большие специалисты" ему верят. Улыбающийся
« Последнее редактирование: Май 13, 2014, 13:01 от Old » Записан
Bepec
Гость
« Ответ #8 : Май 13, 2014, 13:04 »

Стоп оффтоп, привет адекватность.
Собственно по этой причине и верю больше Улыбающийся Там по делу, а вы как всегда "куда то в сторону коровы стреляет" ©
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Май 13, 2014, 13:12 »

Там по делу, а вы как всегда "куда то в сторону коровы стреляет" ©
Да нет, в сторону "куда-то вы стреляете" этой ерундой: Улыбающийся
Там проблема с памятью, если почитать в статье - просто забитие памяти.
Совершенно не понимая того, о чем пишите. Ну как всегда. Улыбающийся
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #10 : Май 13, 2014, 13:34 »

Буду рад дополнительной информации.
Был опыт работы со spirit еще в времена его первой версии. Хотел сделать parser/viewer для тестов в одном рабочем проекте, тесты на некоем простом dsl. Фактически parser то уже был самописный, но код в нем был ужасный и не очень подходящий для viewer.

После 30-40 правил в грамматике spirit на ноутбуке с 2GB памяти и win32 без специального флага (3GB) даже не компилировалось. А с флагом залезало в своп и чрезвычайно медленно собиралось. В случае ошибки компиляции часто вываливало такую кучу, в которой разобраться очень сложно. Иногда internal compiler error и пляски с перегруппировкой кода для обхода. Времена были MSVC 2008.

В то же время разбирался с Java. На ней в итоге и сделал viewer. Использовал ANTLR3, у которого есть книжка с примерами и своя отдельная IDE для отладки грамматики и парсера. При этом в Eclipse с плагином для ANTLR все компилировалось мгновенно, compile on save. Ошибки в грамматике ANTLR выдавал понятные, в сгенерированном ANTLR коде IDE также сразу показывает ошибки. Намного удобнее и эффективнее получилось по сравнению с boost::sprit.
Записан
Bepec
Гость
« Ответ #11 : Май 13, 2014, 13:38 »

Благодарю за информацию.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Май 13, 2014, 16:37 »

Ну, правду сказать, мне spirit понравился. Не спорю - красивая идея, задумка. Но что из этого выйдет практически - хз. Задачи парсинга у меня возникают хаотично и довольно редко (ну может 2 раза в год). Если я вижу что могу все распарсить без затей за день/два - ну чего огород городить? Основные правила там освоить нетрудно, но найдется какая-нибудь "загогулина" не укладывающаяся в рамки - и долбайся потом с ней  Плачущий А вручную я уверен что порешаю. Словом, нужна подходящая ситуация - ну может когда-то (в будущем) случится. А пока "буду иметь ввиду"  Улыбающийся
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #13 : Май 17, 2014, 16:56 »

пользовался спиритом для парсинга json в qt 4.8.x. По скорости не сказал бы что мегабыстрый, перешел на родйной QJsonObject.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 23.