Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2011, 19:18   #1
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию Boost::Spirit::Qi

Буона сера всем.
Начал разбираться с Boost::Spirit::Qi, но по нему очень мало информации на русском. Прочитав документацию на английском, я решил попробовать сабж в деле.
Написал такой код:
Код:
template <typename Iterator>
struct vic_parser : qi::grammar<Iterator, encoding::space_type>
{
    vic_parser() : vic_parser::base_type(start)
    {
        using qi::int_;
        using qi::lit;
        using qi::double_;
        using qi::lexeme;
        using qi::on_error;
        using qi::fail;
        using namespace qi::labels;

        using phoenix::val;
        using phoenix::construct;

        using encoding::char_;
        using encoding::alnum;

        assign %= lit("=");
        endop %= lit(";");

        type %= lit("int")
            |   lit("double");

        var %= lexeme[+(alnum)];

        assignment %= var
                    >> assign
                    >> var
                    >> endop;

        init %= type
            >> assignment;


        start %= *(init);


        on_error<fail>
        (
            start
          , std::cout
                << val("Error! Expecting ")
                << _4
                << val(" here: \"")
                << construct<std::string>(_3, _2)
                << val("\"")
                << std::endl
        );

    }

    qi::rule<Iterator, encoding::space_type> type, init, assignment, var, function, start,
                                            assign, endop;
};
Использую так:
Код:
    vic_parser<std::string::const_iterator> parser;

    using boost::spirit::standard::space;
    std::string::const_iterator iter = data.begin();
    std::string::const_iterator end = data.end();
    return phrase_parse(iter, end, parser, space) && iter == end;
Этот код пока что должен парсить такой код:
Код:
int i = 5;
double a = 3;
int fh = 55;
Но на выходе я получаю False, хотя on_error не отрабатывает.
Прошу помочь разобраться.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 19.02.2011, 00:49   #2
bomik
Новичок
Джуниор
 
Регистрация: 19.02.2011
Сообщений: 3
По умолчанию

Подскажите, а что это за namespace вы используете encoding? Потому что везде встречается ascii::space_type в вызове функции phrase_parse.
bomik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
установка boost ololo-schoolboy Софт 11 22.01.2011 18:29
Boost::Asio on Mingw russian-stalker Общие вопросы C/C++ 0 05.01.2011 16:27
Pre-built Boost russian-stalker Общие вопросы C/C++ 3 05.01.2011 16:20
Boost & qt: литература. nazavrik Общие вопросы C/C++ 1 03.02.2010 16:47
Библиотека boost nazavrik Общие вопросы C/C++ 3 08.12.2009 22:23