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

Stream Parsers (stream, wstream, etc.)

Boost , Spirit 2.5.2 , Stream 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

<stream_parser>является примитивным, который позволяет использовать ранее существовавшие стандартные потоковые операторы для парсинга ввода, интегрированные сSpirit.Qi. Он обеспечивает оберточный парсер, отправляющий базовый входной поток оператору потока соответствующего типа атрибута для анализа. Любое значение<a>, которое будет проанализировано с использованием<stream_parser>, приведет к вызову стандартного оператора потоковой передачи для его типа<A>, например:

std::istream& operator>> (std::istream&, A&);
Header
// forwards to <boost/spirit/home/qi/stream.hpp>
#include <boost/spirit/include/qi_stream.hpp>

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

Namespace

Имя

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

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

Synopsis
template <typename Char, typename Attrib>
struct stream_parser;
Template parameters

Параметр

Описание

по умолчанию

<Char>

Тип символа, используемый для генерации ввода. Этот тип будет использоваться при назначении генерируемых символов базовому итератору ввода.

<char>

<Attrib>

Тип атрибута<stream_parser>, как ожидается, разберет его вход в.

<spirit::basic_hold_any<Char>>

Model of

Notation

s

Переменный экземпляр любого типа с заданной соответствующей потоковой передачей<operator>>()>илиЛенивым аргументом, который оценивает любой тип с заданной соответствующей потоковой передачей<operator>>()>.

Expression Semantics

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

выражение

Описание

<stream>

Позвоните в стриминг<operator>>()>по типу обязательного атрибута. Ввод, распознанный этим оператором, будет результатом парсера<stream>. Этот парсер никогда не выходит из строя (если основной поток ввода не сообщает об ошибке). Тип символа I/O istream предполагается<char>.

<wstream>

Позвоните в стриминг<operator>>()>по типу обязательного атрибута. Ввод, распознанный этим оператором, будет результатом парсера<wstream>. Этот парсер никогда не выходит из строя (если основной поток ввода не сообщает об ошибке). Тип символа I/O istream предполагается<wchar_t>

.

Все парсеры, перечисленные в таблице выше, являются предварительно определенными специализациями<stream_parser<Char>>основного типа парсера потока, описанного ниже. Можно напрямую использовать этот тип для создания потоковых парсеров с использованием произвольного базового типа символов.

выражение

Семантика

<
stream_parser<
   Char,Attrib
>()
>

Позвоните в стриминг<operator>>()>по типу необязательного атрибута<Attrib>. Ввод, распознанный этим оператором, будет результатом парсера<stream_parser<>>. Этот парсер никогда не выходит из строя (если основной поток ввода не сообщает об ошибке). Тип символа I/O istream предполагается<Char>

.
Additional Requirements

Все перечисленные выше парсеры потоков требуют, чтобы тип значения для разбора (связанный атрибут) реализовывал оператор потоков, соответствующий обычным конвенциям потоков ввода-вывода (где<attribute_type>является типом значения для распознавания при разборе):

template <typename Istream>
Istream& operator>> (Istream& os, attribute_type& attr)
{
    // type specific input parsing
    return os;
}

Этот оператор будет вызван парсерами потока для сбора входных данных для атрибута типа<attribute_type>.

[Note]Note

Если парсер<stream>вызывается внутри<match>(или<phrase_match>) потокового манипулятора, то<Istream>, переданный<operator>>()>, зарегистрирует (включит) тот же стандартный локальный экземпляр, что и поток<match>(или<phrase_match>), с которым использовался манипулятор. Это гарантирует, что все аспекты, зарегистрированные (встроенные) в исходный объект потока ввода/вывода, используются во время парсинга ввода.

Attributes

выражение

атрибут

<stream>

<spirit::hold_any>

<wstream>

<spirit::whold_any>

<stream_parser<Char,Attrib>()>

<Attrib>

[Important]Important

Тип атрибута<spirit::hold_any>, представленный некоторыми парсерами потока, семантически и синтаксически эквивалентен типу, реализованномуBoost.Any. Он был добавлен кДуху, поскольку он имеет лучшую производительность и меньший след, чемBoost.Any.

Complexity

O(N), где N - количество символов, потребляемых парсером потока

Example
[Note]Note

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

Определение класса, используемое в примерах:

// a simple complex number representation z = a + bi
struct complex
{
    complex (double a = 0.0, double b = 0.0)
      : a(a), b(b)
    {}
    double a;
    double b;
};

// define streaming operator for the type complex
std::istream&
operator>> (std::istream& is, complex& z)
{
    char lbrace = '\0', comma = '\0', rbrace = '\0';
    is >> lbrace >> z.a >> comma >> z.b >> rbrace;
    if (lbrace != '{' || comma != ',' || rbrace != '}')
        is.setstate(std::ios_base::failbit);
    return is;
}

Использование деклараций и переменных:

using boost::spirit::qi::stream;
using boost::spirit::qi::stream_parser;

Простая строка с использованием оператора>>(istream&, std::string&);

std::string str;
test_parser_attr("abc", stream, str);
std::cout << str << std::endl;                  // prints: abc

Проанализируйте наш сложный тип с помощью оператора>>(istream&, complex&);

complex c;
test_parser_attr("{1.0,2.5}", stream_parser<char, complex>(), c);
std::cout << c.a << "," << c.b << std::endl;    // prints: 1.0,2.5


PrevUpHomeNext

Статья Stream Parsers (stream, wstream, etc.) раздела Spirit 2.5.2 Stream Parsers может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

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