![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boolean Parser (bool_)Boost , Spirit 2.5.2 , Numeric Parsers
|
Имя |
---|
< |
< |
< |
template <typename T, typename BooleanPolicies> struct bool_parser;
Параметр |
Описание |
по умолчанию |
---|---|---|
< | Булев тип булевого парсера. | < |
< | Политика контролирует поведение парсера. | < |
Notation
BP
Булевой<Policies
>(тип).
b
Объект<B
>, числовой базовый тип.
boolean
Буквальное число, любое булево значение или ленивый аргумент, который оценивает булево значение.
f
, l
<ForwardIterator
>. первая/последняя пара итераторов.
attr
Атрибутное значение.
Context
Тип разбора контекста текущего вызова парсера<bool_
>.
ctx
Пример контекста,<Context
>.
Семантика выражения определяется только там, где она отличается от или не определена в<PrimitiveParser
>.
выражение |
Семантика |
---|---|
bool_
| Парсирование булевой с использованием политики по умолчанию< |
<lit(boolean) bool_(boolean)> | Сопоставьте буквальный< |
<true_ false_> | Матч< |
<bool_parser< T,BoolPolicies >()> | Просмотр реального типа< |
<bool_parser< T,BoolPolicies >()(boolean)> | Сопоставьте буквальный< |
![]() | Note |
---|---|
Все булевы парсеры должным образом соблюдают директиву< |
выражение |
атрибут |
---|---|
lit(boolean)
| < |
<true_ false_ bool_ bool_(boolean)> | < |
bool_parser< T, BoolPolicies >() bool_parser< T, BoolPolicies >()(num)
| < |
O(N), где N - число символов, подвергающихся разбору.
B
Булевый тип<B
>, минимальные требования к выражению, перечисленные ниже, должны быть действительными. Обратите внимание, что дополнительные требования могут быть наложены таможенной политикой.
выражение |
Семантика |
---|---|
< | Конструкция из< |
Policies
Шаблон шаблона<Policies
>представляет собой класс, который группирует все политики, контролирующие поведение парсера. Политика контролирует поведение булевых парсеров.
По умолчанию<bool_policies<bool>
>. По умолчанию обеспечивается уход за наиболее распространенным случаем (есть много способов представления и, следовательно, разбора булевых чисел). В большинстве случаев политики по умолчанию являются достаточными и могут использоваться прямо из коробки. Они предназначены для разбора булевого значения формы<"true"
>и<"false"
>.
Policies
Expression RequirementsДля моделей булевой<Policies
>должны быть действительны следующие выражения:
выражение |
Семантика |
---|---|
< | Просмотрите значение< |
< | Сравните< |
Функции должны вернуться истинными, если были найдены требуемые представления<true
>или<false
>. В этом случае атрибут<n
>должен быть установлен на соответствующее значение<true
>или<false
>.
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; } };
![]() | 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));
Статья Boolean Parser (bool_) раздела Spirit 2.5.2 Numeric Parsers может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Numeric Parsers ::
реклама |