Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Sum - adding numbers

Boost , Spirit 2.5.2 , Tutorials

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Вот парсер, который суммирует список чисел, разделенный запятой.

Хорошо, мы рассмотрели некоторые детали в наших предыдущих примерах. Во-первых, наша включает в себя:

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <iostream>
#include <string>

Некоторые используют директивы:

namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
using qi::double_;
using qi::_1;
using ascii::space;
using phoenix::ref;

Пространство имен

Описание

повышение::phoenix

Усиление::Дух

Усиление::Дух::ascii

Специальные финики для духов

[Note]Note

Если вам неудобно использовать целые пространства имен, не стесняйтесь квалифицировать свой код, использовать псевдонимы пространства и т. Д. Для целей этого учебника мы представим неквалифицированные имена как для Духа, так и для Феникса.. Не волнуйтесь, мы всегда представим полный рабочий код, чтобы вы не заблудились. Фактически, все примеры в этом руководстве имеют соответствующий файл cpp, который QuickBook (инструмент документации, который мы используем) импортирует здесь в виде фрагментов кода.

Теперь настоящий парсер:

template <typename Iterator>
bool adder(Iterator first, Iterator last, double& n)
{
    bool r = qi::phrase_parse(first, last,
        //  Begin grammar
        (
            double_[ref(n) = _1] >> *(',' >> double_[ref(n) += _1])
        )
        ,
        //  End grammar
        space);
    if (first != last) // fail if we did not get a full match
        return false;
    return r;
}

The full cpp file for this example can be found here: ../../example/qi/sum.cpp

Это почти как в нашем оригинальном списке чисел. Мы постепенно строим на наших примерах. На этот раз, как и в примере со сложными числами, мы добавим умные. Есть аккумулятор (<double&n>), который добавляет числа, разобранные. При успешном разборе это число является суммой всех разобранных чисел.

Первый<double_>парсер прилагает это действие:

ref(n) = _1

Это приводит к тому, что<double_><n>[<n>].<ref(n)>говоритФениксу, что<n>является изменчивой ссылкой.<_1>Фениксзаполнитель для парсированного атрибута результата.

Второй<double_>парсер прилагает это действие:

ref(n) += _1

Последующие числа складываются в<n>.

Это было не так уж и плохо, не так ли?


PrevUpHomeNext

Статья Sum - adding numbers раздела Spirit 2.5.2 Tutorials может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Tutorials ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:19:22/0.0020449161529541/0