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

Symbols Generator (symbols)

Boost , Spirit 2.5.2 , String Generators

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

Класс<symbols>реализует «обратную» таблицу символов: ассоциативный контейнер (или карту) пар ключевых значений, где значения являются (большинство времени) строками. Он отображает генерируемое значение (ключ) на любое другое значение, которое будет испущено вместо исходного ключа.

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

Header
// forwards to <boost/spirit/home/karma/string/symbols.hpp>
#include <boost/spirit/include/karma_symbols.hpp>

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

Namespace

Имя

<boost::spirit::karma::symbols>

Synopsis
template <typename Attrib, typename T, typename Lookup
  , typename CharEncoding, typename Tag>
struct symbols;
Template parameters

Параметр

Описание

по умолчанию

<Attrib>

Тип исходного атрибута, используемого в качестве ключа в генераторе символов (символ).

<char>

<T>

Тип данных, связанный с каждым ключом.

<unused_type>

<Lookup>

Реализация поиска символов

если T<unused_type>,<std::set<Attrib>>и<std::map<Attrib, T>>иначе

<CharEncoding>

Используется для выбора набора символов, обычно не используется конечным пользователем.

<unused_type>

<Tag>

Используется для выбора набора символов, обычно не используется конечным пользователем.

<unused_type>

Model of

Notation

Sym

Тип<symbols>.

Attrib

Тип атрибута.

T

Тип данных.

sym, sym2

<symbols>Предметы.

sseq

СТЛконтейнер струн.

dseq

STLконтейнер данных с<value_type><T>.

s1...sN

Струна.

d1...dN

Объекты типа<T>.

f

Функция или объект функции.

f, l

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

Expression Semantics

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

выражение

Семантика

<Sym()>

Постройте пустой экземпляр объекта с символами<"symbols">

.

<Sym(name)>

Постройте пустой экземпляр объекта символов<name>

.

<Sym(sym2)>

Копии строят символы из<sym2>(Другой<symbols>объект).

<Sym(sseq)>

Конструкция символов из<sseq>STLконтейнера символов типа<Attrib><"symbols">

.

<Sym(sseq, name)>

Построение символов из<sseq>STLконтейнера символов типа<Attrib>, названного<name>.

<Sym(sseq, dseq)>

Построить символы из<sseq>и<dseq>STLконтейнера символов типа<AttribSTLконтейнера данных с<value_type><T>, который называется<"symbols">

.

<Sym(sseq, dseq, name)>

Построить символы из<sseq>и<dseq>[STLконтейнера символов типа<AttribSTLконтейнера данных с<value_type><T>, который называется<name>

.

<sym= sym2>

Назначить<sym2><sym>

.

<sym= s1, s2, ...,sN>

Назначить один или несколько символов<s1>...<sN><sym>. Соответствующие значения данных типа<T>построены по умолчанию.

<sym+= s1, s2, ...,sN>

Добавить один или несколько символов<s1>...<sN>к<sym>. Соответствующие значения данных типа<T>построены по умолчанию.

<sym.add(s1)(s2)...(sN)>

Добавить один или несколько символов<s1>...<sN>к<sym>. Соответствующие значения данных типа<T>построены по умолчанию.

<sym.add(s1, d1)(s2, d2)...(sN, dN)>

Добавить один или более символов<s1>...<sN>с соответствующими данными<d1>...<dN>к<sym>.

<sym-= s1, s2, ...,sN>

Удалить один или несколько символов<s1>...<sN>из<sym>

.

<sym.remove(s1)(s2)...(sN)>

Удалить один или несколько символов<s1>...<sN>из<sym>

.

<sym.clear()>

Удалите все символы<sym>

.

<sym.at(s)>

Возврат ссылки на объект, связанный с символом<s>. Если<sym>еще не содержит такого объекта,<at>вставляет объект по умолчанию<T()>

.

<sym.find(s)>

Возврат указателя на объект, связанный с символом<s>. Если<sym>уже не содержит такого объекта,<find>возвращает нулевой указатель.

<sym.for_each(f)>

Для каждого символа в<sym><s>призывайте<f(typenameLookup::value_type)>

.

<sym.name()>

Восстановите текущее имя объекта символов.

<sym.name(name)>

Установите текущее имя объекта символов<name>

.

Генератор символов использует поставляемый атрибут в качестве ключа для поиска во внутреннем ассоциативном контейнере. Если ключ существует, генератор испускает связанное значение и преуспевает (если основной выходной поток не сообщает об ошибке). Если тип значения, хранящийся в генераторе символов<unused_type>, будет излучать ключ. Если ключа не существует, генератор выходит из строя, ничего не испуская.

Attributes

Атрибут<symbol<Attrib,T>>—<Attrib>.

Если поставляемый атрибут является последовательностьюBoost.Fusion, то генератор таблицы символов будет использовать первый элемент этой последовательностиBoost.Fusionв качестве ключа для поиска. Тип этого первого элемента должен быть конвертируемым в<Attrib>. В этом случае второй элемент последовательностиBoost.Fusionиспользуется в качестве атрибута при вызове генератора, полученного из значения, хранящегося в таблице символов для найденной записи.

Если поставляемым атрибутом является тип контейнера (<traits::is_container>разрешает<mpl::true_>), то генератор таблицы символов будет использовать первый элемент, хранящийся в этом контейнере, в качестве ключа для поиска.<value_type>(возвращается<traits::container_value>) должен быть конвертируемым в<Attrib>. В этом случае второй элемент, хранящийся в этом контейнере, используется в качестве атрибута при вызове генератора, полученного из значения, хранящегося в таблице символов для найденной записи.

Если поставляемый атрибут не является последовательностьюBoost.Fusionи не является типом контейнера, поставляемый атрибут непосредственно используется в качестве ключа для поиска элемента. Атрибут используется в качестве атрибута при вызове генератора, полученного из значения, хранящегося в таблице символов для найденной записи.

В любом случае, поскольку поставляемый ключ (т.е. либо первый элемент последовательностиBoost.Fusion, первый элемент контейнера, или атрибут иным образом) передается в качестве атрибута генератору, полученному из значения, хранящегося в таблице символов для найденной записи, таблица символов может хранить генераторы, которые будут производить выход на основе этого значения. Например:

// The symbol table maps a single character key to a rule<>
// The rule<> exposes an attribute of char as well
rule<output_iterator_type, char()> r1 = char_;
symbols<char, rule<output_iterator_type, char()> > sym;
sym.add
    ('j', r1.alias())
    ('h', r1.alias())
    ('t', r1.alias())
    ('k', r1.alias())
;
// Supplying a fusion vector as the attribute will use the first element
// (the 'j') as the key to be looked up, while the second element (the 'J') 
// is passed on as the attribute to the rule<> stored in the symbol table. 
// Consequently, the example generates a single 'J'.
BOOST_ASSERT(test("J", sym, make_vector('j', 'J')));
Complexity

Реализация по умолчанию использует<std::map<>>или<std::set<>>со сложностью:

O(log n)

где n - количество хранимых символов.

Example
[Note]Note

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

Некоторые включают:

#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::symbols;

Использование генераторов<symbol>:

symbols<char, char const*> sym;
sym.add
    ('a', "Apple")
    ('b', "Banana")
    ('o', "Orange")
;
test_generator_attr("Banana", sym, 'b');


PrevUpHomeNext

Статья Symbols Generator (symbols) раздела Spirit 2.5.2 String Generators может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: String Generators ::


реклама


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

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