tag:blogger.com,1999:blog-22921254.post136259980381785648..comments2023-09-04T14:38:18.275+03:00Comments on Raider's Programming Blog: Boost.Spirit in practiceRaiderhttp://www.blogger.com/profile/14942191356667310038noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-22921254.post-84108681310308963242010-04-07T23:01:58.865+04:002010-04-07T23:01:58.865+04:00Прочитал Вашу статью, вдохновился и начал использо...Прочитал Вашу статью, вдохновился и начал использовать Spirit.Qi. Есть трабла.<br /><br />В общем, пишу небольшой парсер одного формата. Имеется текстовый файл, представленный блоками вида<br />[SOME BLOCK]<br />SomeProperty=Blabla<br />AnotherProperty=Blablabla<br />[END-SOME BLOCK]<br /><br />Блоки не абсолютно произвольные: их всего несколько типов, поэтому для каждого типа я создал небольшую структурку, его описывающую. Самый первый такой «блок» — заголовок файла со служебной информацией, остальные описывают какой-то объект (например, полигон).<br /><br />Итак, унаследовал qi::grammar, описал правила для разбора. Для каждого блока создаётся объект соответствующей ему структурки. На выходе получаю объект структуры со служебной инфой и вектором «объектов» (для каждого блока).<br /><br />Так вот если входной текстовый файл имеет размер килобайт триста, то разбирает моментально, но уже на килобайтах 600 парсер может уйти в раздумья минуты на 3-4. А мне надо 10-метровый файл распарсить. В чём может быть проблема?Anonymoushttps://www.blogger.com/profile/00768248497256469551noreply@blogger.comtag:blogger.com,1999:blog-22921254.post-33423534496550699042010-03-16T22:51:40.793+03:002010-03-16T22:51:40.793+03:00спирит очень удобен во время прототипирования, но ...спирит очень удобен во время прототипирования, но на сложных грамматиках он либо убивает компилятор (у меня было такое на 1-м спирите + gcc 3.x 64-bit), либо объем исполняемого файла становится слишком большим.<br />я сейчас остановился на комбинированном решении - adhoc-задачи и прототипы пишу на спирите, а потом, если нужно переписываю на собственную комбинаторную библиотеку (plain C), а-ля parsec в хаскеле (очень приблизительное сравнение)...Alex Otthttps://www.blogger.com/profile/13001951608173211050noreply@blogger.comtag:blogger.com,1999:blog-22921254.post-56704660045575382152010-03-10T10:10:05.067+03:002010-03-10T10:10:05.067+03:00strelok, твой комментарий подтверждает мои наблюде...strelok, твой комментарий подтверждает мои наблюдения - сложные парсеры видимо лучше писать на чем-то, отличном от Спирита.Raiderhttps://www.blogger.com/profile/14942191356667310038noreply@blogger.comtag:blogger.com,1999:blog-22921254.post-66917998739731490912010-03-10T01:38:42.749+03:002010-03-10T01:38:42.749+03:00Этот комментарий был удален автором.strelokhttps://www.blogger.com/profile/16094534661744141608noreply@blogger.comtag:blogger.com,1999:blog-22921254.post-38891280410446329852010-03-10T01:38:40.665+03:002010-03-10T01:38:40.665+03:00Статья интересная, теперь лучше себе представляю B...Статья интересная, теперь лучше себе представляю Boost.Spirit, но видимо из числа людей что его не любят. Сейчас, около двух месяцев, пишу свой большой и сложный парсер на bison, все время думал что там синтаксис вырви глаз, но Спирит его превзошел, конечно классно, что не надо париться со всякими лексерами, парсерами, генераторами кода, сразу написал в коде и работает, но синтаксис убиться об стену.strelokhttps://www.blogger.com/profile/16094534661744141608noreply@blogger.com