![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Kleene Star Generator (*a)Boost , Spirit 2.5.2 , Generator Operators
|
Выражение |
Семантика |
---|---|
| Генератор |
![]() | Note |
---|---|
Все неудачные итерации встроенного генератора будут потреблять один элемент из поставляемого атрибута. |
См. Compound Attribute Notation.
Выражение |
Attribute |
---|---|
*a
(Клейн-звезда, неарочный * )
|
a: A --> *a: vector<A> a: Unused --> *a: Unused
|
![]() | Important |
---|---|
В приведенной выше таблице используется |
Звездный генератор Kleene будет выполнять свой встроенный генератор один раз для каждого элемента в предоставленном атрибуте контейнера, пока встроенный генератор работает. На каждой итерации он будет передавать следующий последовательные элементы из атрибута контейнера в встроенный генератор. Поэтому количество итераций не будет больше, чем количество элементов в контейнере, переданное как его атрибут. Пустой контейнер заставит звезду Kleene вообще не производить выход.
Важно отметить, что звезда Kleene не выполняет никакой буферизации выхода, создаваемого ее встроенными элементами. Это означает, что любой генератор неисправных элементов, возможно, уже сгенерировал некоторую производительность, которая составляет не свернут назад.
![]() | Tip |
---|---|
Самый простой способ заставить клейную звезду вести себя так, как будто она сделала буферизацию - это обернуть ее в буферную директиву (см. buffer[*a] который будет не генерировать любой выход в случае неисправного генератора *(buffer[a]) не будет генерировать какой-либо частичный выход из генератора |
Общая сложность генератора Клейна определяется сложностью его встроенного генератора, умноженного на количество выполненных итераций. Сложность самой клейной звезды - O(N), где N - это количество элементов в контейнере, передаваемых как его атрибут.
![]() | 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);
Статья Kleene Star Generator (*a) раздела Spirit 2.5.2 Generator Operators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Generator Operators ::
реклама |