Russian Qt Forum
Ноябрь 27, 2024, 05:50
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Boost::spirit и иже с ним.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Boost::spirit и иже с ним. (Прочитано 8500 раз)
Bepec
Гость
Boost::spirit и иже с ним.
«
:
Май 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
Сообщений: 817
Погроммист
Re: Boost::spirit и иже с ним.
«
Ответ #1 :
Май 13, 2014, 09:53 »
Я думаю, проблемы с памятью можно решить, перейдя на 64 бит операционку %) ну и планок доставить
Записан
Гугль в помощь
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Boost::spirit и иже с ним.
«
Ответ #2 :
Май 13, 2014, 10:07 »
Spirit это не только парсеры.
Spirit состоит из трёх частей (не считая устаревший classic):
Spirit::Qi - это как раз по написанию парсеров,
Spirit::Karma - создание генераторов (представление данных в заданный формат)
и Spirit::Lex - лексические анализаторы..
В одном моём проектике приходилось парсить несколько разных форматов. Реализация была сделана на регекспах и токенайзерах..
После того, как познакомился со спиритом, переписал всё на нём..
Одним из плюсов спирита считаю, пожалуй то, что он позволяет легко реагировать на какие то изменения в начальных условиях.
И сам код получается гораздо более прозрачен.
По поводу числа правил..
Реализация xml парсера (из примеров) содержит всего 5 правил.
Если речь идёт о парсерах, описание которых требует более 100 правил..
То да, тут мозг сломается, а не только компилятор)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Bepec
Гость
Re: Boost::spirit и иже с ним.
«
Ответ #3 :
Май 13, 2014, 11:37 »
Там проблема с памятью, если почитать в статье - просто забитие памяти. Хотя можно многопоточно компилировать...
Попробовать можете
Потихоньку буду дополнять, по мере интереса.
«
Последнее редактирование: Май 13, 2014, 11:43 от Bepec
»
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Boost::spirit и иже с ним.
«
Ответ #4 :
Май 13, 2014, 11:51 »
Цитата: Bepec от Май 13, 2014, 11:37
Там проблема с памятью, если почитать в статье - просто забитие памяти. Количество значения вроде не имеет
Какое "забитие памяти"?
В далёкие времена 32-битных ОС, когда пользовательскому процессу было доступно всего несколько гигабайт адресного пространства, компиляторами часто его не хватало при компиляции сложных шаблонных конструкций.
На 64-битных платформах таких проблем нет, адресного пространства для процесса более чем достаточно.
Записан
VPS
Гость
Re: Boost::spirit и иже с ним.
«
Ответ #5 :
Май 13, 2014, 12:04 »
Можно ещё
здесь
на русском почитать (там 5 частей)...
Записан
Bepec
Гость
Re: Boost::spirit и иже с ним.
«
Ответ #6 :
Май 13, 2014, 12:15 »
Old - ссылка на хабр приведена. Можете подискутировать с автором той темы, но хабру я верю больше, чем вам
to vps - спасибо, собственно я на него и наткнулся утром. Не так много русскоязычной документации
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Boost::spirit и иже с ним.
«
Ответ #7 :
Май 13, 2014, 12:45 »
Цитата: Bepec от Май 13, 2014, 12:15
ссылка на хабр приведена. Можете подискутировать с автором той темы
Да, но там нет ничего про "забите памяти".
Нам не о чем будет дискутировать с автором.
Цитата: Bepec от Май 13, 2014, 12:15
но хабру я верю больше, чем вам
Вот это и печально. Вы вместо того, что бы разобраться с вопросом и проверить самому - просто верите.
А хабр это да - авторитетное издание: на нем могут публиковать статьи все, даже вы. Поэтому, только "самые большие специалисты" ему верят.
«
Последнее редактирование: Май 13, 2014, 13:01 от Old
»
Записан
Bepec
Гость
Re: Boost::spirit и иже с ним.
«
Ответ #8 :
Май 13, 2014, 13:04 »
Стоп оффтоп, привет адекватность.
Собственно по этой причине и верю больше
Там по делу, а вы как всегда "куда то в сторону коровы стреляет" ©
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Boost::spirit и иже с ним.
«
Ответ #9 :
Май 13, 2014, 13:12 »
Цитата: Bepec от Май 13, 2014, 13:04
Там по делу, а вы как всегда "куда то в сторону коровы стреляет" ©
Да нет, в сторону "куда-то вы стреляете" этой ерундой:
Цитата: Bepec от Май 13, 2014, 11:37
Там проблема с памятью, если почитать в статье - просто забитие памяти.
Совершенно не понимая того, о чем пишите. Ну как всегда.
Записан
kamre
Частый гость
Offline
Сообщений: 233
Re: Boost::spirit и иже с ним.
«
Ответ #10 :
Май 13, 2014, 13:34 »
Цитата: Bepec от Май 13, 2014, 09:40
Буду рад дополнительной информации.
Был опыт работы со 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
Гость
Re: Boost::spirit и иже с ним.
«
Ответ #11 :
Май 13, 2014, 13:38 »
Благодарю за информацию.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Boost::spirit и иже с ним.
«
Ответ #12 :
Май 13, 2014, 16:37 »
Ну, правду сказать, мне spirit понравился. Не спорю - красивая идея, задумка. Но что из этого выйдет практически - хз. Задачи парсинга у меня возникают хаотично и довольно редко (ну может 2 раза в год). Если я вижу что могу все распарсить без затей за день/два - ну чего огород городить? Основные правила там освоить нетрудно, но найдется какая-нибудь "загогулина" не укладывающаяся в рамки - и долбайся потом с ней
А вручную я уверен что порешаю. Словом, нужна подходящая ситуация - ну может когда-то (в будущем) случится. А пока "буду иметь ввиду"
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Boost::spirit и иже с ним.
«
Ответ #13 :
Май 17, 2014, 16:56 »
пользовался спиритом для парсинга json в qt 4.8.x. По скорости не сказал бы что мегабыстрый, перешел на родйной QJsonObject.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...