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

Kleene Star Generator (*a)

Boost , Spirit 2.5.2 , Generator Operators

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

Звездные генераторы Kleene используются для повторного выполнения встроенного генератора ноль или больше раз. Независимо от успеха встроенного генератора, звездный генератор Kleene всегда преуспевает.

Header
// forwards to <boost/spirit/home/karma/operator/kleene.hpp>
#include <boost/spirit/include/karma_kleene.hpp>

Также см. Include Structure.

Model of

Expression Semantics

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

Выражение

Семантика

*a

Генератор a выполняется ноль или больше раз в зависимости от наличия атрибута. Исполнение a прекращается после того, как значения атрибутов, переданные генератору Клин, исчерпаны. Звезда Kleene всегда преуспевает (если только основной поток вывода не сообщает об ошибке).

[Note]Note

Все неудачные итерации встроенного генератора будут потреблять один элемент из поставляемого атрибута.

Attributes

См. Compound Attribute Notation.

Выражение

Attribute

*a (Клейн-звезда, неарочный *)

a: A --> *a: vector<A>
a: Unused --> *a: Unused

[Important]Important

В приведенной выше таблице используется vector<A> только в качестве владельца места. Уведомление vector<A> означает любой контейнер STL, содержащий элементы типа A.

Звездный генератор Kleene будет выполнять свой встроенный генератор один раз для каждого элемента в предоставленном атрибуте контейнера, пока встроенный генератор работает. На каждой итерации он будет передавать следующий последовательные элементы из атрибута контейнера в встроенный генератор. Поэтому количество итераций не будет больше, чем количество элементов в контейнере, переданное как его атрибут. Пустой контейнер заставит звезду Kleene вообще не производить выход.

Важно отметить, что звезда Kleene не выполняет никакой буферизации выхода, создаваемого ее встроенными элементами. Это означает, что любой генератор неисправных элементов, возможно, уже сгенерировал некоторую производительность, которая составляет не свернут назад.

[Tip]Tip

Самый простой способ заставить клейную звезду вести себя так, как будто она сделала буферизацию - это обернуть ее в буферную директиву (см. buffer):

buffer[*a]

который будет не генерировать любой выход в случае неисправного генератора *a. Выражение:

*(buffer[a])

не будет генерировать какой-либо частичный выход из генератора a, если он не генерирует в середине своего производства. Общее выражение по-прежнему будет генерировать выход, произведенный всеми успешными вызовами генератора a.

Complexity

Общая сложность генератора Клейна определяется сложностью его встроенного генератора, умноженного на количество выполненных итераций. Сложность самой клейной звезды - O(N), где N - это количество элементов в контейнере, передаваемых как его атрибут.

Example
[Note]Note

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

Некоторые из них включают:

#include <boost/spirit/include/karma.hpp>
#include <boost/spirit/include/support_utree.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/fusion/include/std_pair.hpp>
#include <iostream>
#include <string>

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

using boost::spirit::karma::double_;
using boost::spirit::karma::space;

Основное использование генератора звезды Kleene:

std::vector<double> v;
v.push_back(1.0);
v.push_back(2.0);
v.push_back(3.0);
test_generator_attr_delim("1.0 2.0 3.0 ", *double_, space, v);


PrevUpHomeNext

Статья Kleene Star Generator (*a) раздела Spirit 2.5.2 Generator Operators может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Generator Operators ::


реклама


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

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