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

Boolean Parser (bool_)

Boost , Spirit 2.5.2 , Numeric Parsers

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
Description

<bool_parser>может разбирать булевы произвольного типа,<B>. Тип<T>булевой основы может быть определен пользователем булевым типом, если тип соответствует определенным требованиям к выражению (документировано ниже).

Header
// forwards to <boost/spirit/home/qi/numeric/bool.hpp>
#include <boost/spirit/include/qi_bool.hpp>

См. такжеВключите структуру.

Namespace

Имя

<boost::spirit::bool_// alias: boost::spirit::qi::bool_>

<boost::spirit::true_// alias: boost::spirit::qi::true_>

<boost::spirit::false_// alias: boost::spirit::qi::false_>

Synopsis
template <typename T, typename BooleanPolicies>
struct bool_parser;
Template parameters

Параметр

Описание

по умолчанию

<B>

Булев тип булевого парсера.

<bool>

<BooleanPolicies>

Политика контролирует поведение парсера.

<bool_policies<B>>

Model of

Notation

BP

Булевой<Policies>(тип).

b

Объект<B>, числовой базовый тип.

boolean

Буквальное число, любое булево значение или ленивый аргумент, который оценивает булево значение.

f, l

<ForwardIterator>. первая/последняя пара итераторов.

attr

Атрибутное значение.

Context

Тип разбора контекста текущего вызова парсера<bool_>.

ctx

Пример контекста,<Context>.

Expression Semantics

Семантика выражения определяется только там, где она отличается от или не определена в<PrimitiveParser>.

выражение

Семантика

bool_

Парсирование булевой с использованием политики по умолчанию<bool_policies<T>>.

<
lit(boolean)
bool_(boolean)
>

Сопоставьте буквальный<boolean>с политикой по умолчанию<bool_policies<T>>. Парсер выйдет из строя, если парсируемое значение не равно указанному значению.

<
true_
false_
>

Матч<"true">и<"false">соответственно.

<
bool_parser<
   T,BoolPolicies
>()
>

Просмотр реального типа<T>с использованием<BoolPolicies>

.

<
bool_parser<
   T,BoolPolicies
>()(boolean)
>

Сопоставьте буквальный<boolean>типа<T>с использованием<BoolPolicies>. Парсер выйдет из строя, если парсируемое значение не равно указанному значению.

[Note]Note

Все булевы парсеры должным образом соблюдают директиву<no_case><[]>.

Attributes

выражение

атрибут

lit(boolean)

<unused>

<
true_
false_
bool_
bool_(boolean)
>

<bool>

bool_parser<
    T, BoolPolicies
>()
bool_parser<
    T, BoolPolicies
>()(num)

<T>

Complexity

O(N), где N - число символов, подвергающихся разбору.

Minimum Expression Requirements for B

Булевый тип<B>, минимальные требования к выражению, перечисленные ниже, должны быть действительными. Обратите внимание, что дополнительные требования могут быть наложены таможенной политикой.

выражение

Семантика

<B(bool)>

Конструкция из<bool>

.
Boolean Policies

Шаблон шаблона<Policies>представляет собой класс, который группирует все политики, контролирующие поведение парсера. Политика контролирует поведение булевых парсеров.

По умолчанию<bool_policies<bool>>. По умолчанию обеспечивается уход за наиболее распространенным случаем (есть много способов представления и, следовательно, разбора булевых чисел). В большинстве случаев политики по умолчанию являются достаточными и могут использоваться прямо из коробки. Они предназначены для разбора булевого значения формы<"true">и<"false">.

Boolean Policies Expression Requirements

Для моделей булевой<Policies>должны быть действительны следующие выражения:

выражение

Семантика

<BP::parse_true(f, l, attr, ctx)>

Просмотрите значение<true>

.

<BP::parse_false(f, l, attr, ctx)>

Сравните<false>.

Функции должны вернуться истинными, если были найдены требуемые представления<true>или<false>. В этом случае атрибут<n>должен быть установлен на соответствующее значение<true>или<false>.

Boolean Policies Specializations

Самый простой способ реализовать правильную булеву политику парсинга — вывести новый тип из типа<bool_policies>, переопределяя аспекты парсинга, которые необходимо изменить. Например, вот реализация булевой политики разбора, интерпретирующей строку<"eurt">(т.е. «истинное», записанное задом наперед) как<false>:

struct backwards_bool_policies : qi::bool_policies<>
{
    // we want to interpret a 'true' spelled backwards as 'false'
    template <typename Iterator, typename Attribute, typename Context>
    static bool
    parse_false(Iterator& first, Iterator const& last, Attribute& attr, Context& ctx)
    {
        namespace qi = boost::spirit::qi;
        if (qi::detail::string_parse("eurt", first, last, qi::unused, qi::unused))
        {
            spirit::traits::assign_to(false, attr, ctx);    // result is false
            return true;
        }
        return false;
    }
};
Example
[Note]Note

Испытательный ремень для примера (примеров) ниже представлен в разделеОсновные примеры.

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

using boost::phoenix::val;
using boost::spirit::qi::bool_;
using boost::spirit::qi::bool_parser;
using boost::spirit::qi::lit;

Базовый анализ реальных чисел:

// bool
test_parser("true", bool_);
test_parser("false", bool_);
test_parser("true", bool_(true));
test_parser("false", bool_(false));
test_parser("true", bool_(val(true)));
test_parser("false", bool_(val(false)));
// literals
test_parser("true", lit(true));
test_parser("false", lit(false));
test_parser("true", lit(val(true)));
test_parser("false", lit(val(false)));

Правила реального номера:

///////////////////////////////////////////////////////////////////////////////
//  These policies can be used to parse "eurt" (i.e. "true" spelled backwards)
//  as `false`
///////////////////////////////////////////////////////////////////////////////
struct backwards_bool_policies : boost::spirit::qi::bool_policies<>
{
    // we want to interpret a 'true' spelled backwards as 'false'
    template <typename Iterator, typename Attribute>
    static bool
    parse_false(Iterator& first, Iterator const& last, Attribute& attr)
    {
        namespace qi = boost::spirit::qi;
        if (qi::detail::string_parse("eurt", first, last, qi::unused))
        {
            namespace traits = boost::spirit::traits;
            traits::assign_to(false, attr);    // result is false
            return true;
        }
        return false;
    }
};

И его использование:

bool_parser<bool, backwards_bool_policies> backwards_bool;
test_parser("true", backwards_bool);
test_parser("eurt", backwards_bool);
test_parser("true", backwards_bool(true));
test_parser("eurt", backwards_bool(false));


PrevUpHomeNext

Статья Boolean Parser (bool_) раздела Spirit 2.5.2 Numeric Parsers может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Numeric Parsers ::


реклама


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

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