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

libs/spirit/example/support/utree/sexpr_generator.hpp

Boost , ,

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

libs/spirit/example/support/utree/sexpr_generator.hpp

/*==============================================================================
    Copyright (c) 2001-2011 Hartmut Kaiser
    Copyright (c) 2010-2011 Bryce Lelbach
    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_SPIRIT_UTREE_EXAMPLE_SEXPR_GENERATOR_HPP)
#define BOOST_SPIRIT_UTREE_EXAMPLE_SEXPR_GENERATOR_HPP
#include <boost/spirit/include/support_utree.hpp>
#include <boost/spirit/include/karma.hpp>
namespace boost {
namespace spirit {
namespace traits { 
template<>
struct transform_attribute<utree::nil_type, unused_type, karma::domain> {
  typedef unused_type type;
  static unused_type pre (utree::nil_type&) { return unused_type(); }
};
} // traits
} // spirit
} // boost
namespace sexpr
{
namespace karma = boost::spirit::karma;
namespace standard = boost::spirit::standard;
using boost::spirit::utree;
using boost::spirit::utf8_symbol_range_type;
using boost::spirit::utf8_string_range_type;
using boost::spirit::binary_range_type;
struct bool_output_policies : karma::bool_policies<>
{
    template <typename CharEncoding, typename Tag, typename Iterator>
    static bool generate_true(Iterator& sink, bool)
    {
        return string_inserter<CharEncoding, Tag>::call(sink, "#t");
    }
    template <typename CharEncoding, typename Tag, typename Iterator>
    static bool generate_false(Iterator& sink, bool)
    {
        return string_inserter<CharEncoding, Tag>::call(sink, "#f");
    }
};
template <typename Iterator>
struct generator : karma::grammar<Iterator, utree()>
{
    typedef boost::iterator_range<utree::const_iterator> utree_list;
    karma::rule<Iterator, utree()>
        start, ref_;
    karma::rule<Iterator, utree_list()>
        list;
    karma::rule<Iterator, utf8_symbol_range_type()>
        symbol;
    karma::rule<Iterator, utree::nil_type()>
        nil_;
    karma::rule<Iterator, utf8_string_range_type()>
        utf8;
    karma::rule<Iterator, binary_range_type()>
        binary;
    generator() : generator::base_type(start)
    {
        using standard::char_;
        using standard::string;
        using karma::bool_generator;
        using karma::uint_generator;
        using karma::double_;
        using karma::int_;
        using karma::lit;
        using karma::right_align;
        uint_generator<unsigned char, 16> hex2;
        bool_generator<bool, bool_output_policies> boolean;
        start = nil_
              | double_
              | int_
              | boolean
              | utf8
              | symbol
              | binary
              | list
              | ref_;
  
        ref_ = start;
        list = '(' << -(start % ' ') << ')';
        utf8 = '"' << *(&char_('"') << "\\\"" | char_) << '"';
        symbol = string;
        binary = '#' << *right_align(2, '0')[hex2] << '#';
        nil_ = karma::attr_cast(lit("nil"));
        start.name("sexpr");
        ref_.name("ref");
        list.name("list");
        utf8.name("string");
        symbol.name("symbol");
        binary.name("binary");
        nil_.name("nil");
    }
};
} // sexpr
#endif // BOOST_SPIRIT_UTREE_EXAMPLE_SEXPR_GENERATOR_HPP

Статья libs/spirit/example/support/utree/sexpr_generator.hpp раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 15:57:10/0.0032138824462891/0