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

Symbols Parser (symbols)

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

Класс символы реализует таблицу символов: ассоциативный контейнер (или карта) пар ключевых значений, где ключи являются строками. Класс символы может эффективно работать с 8, 16, 32 и даже 64 битными символами.

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

Header
// forwards to <boost/spirit/home/qi/string/symbols.hpp>
#include <boost/spirit/include/qi_symbols.hpp>

Также см. Include Structure.

Namespace

Имя

boost::spirit::qi::символы

boost::spirit::qi::tst

boost::spirit::qi::tst_map

Synopsis
template <typename Char, typename T, typename Lookup>
struct symbols;
Template parameters

Параметр

Описание

По умолчанию

Char

Тип символов строк символа.

char

T

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

неиспользуемый_тип

Lookup

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

tst<Char, T>

Model of

Notation

Sym

Тип символы.

Char

Тип персонажа.

T

Тип данных.

sym, sym2

символы объектов.

sseq

STL контейнер строк.

dseq

An STL value_type T.

s1...sN

A String.

d1...dN

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

f

Звонимая функция или объект функции.

f, l

ForwardIterator первая/последняя пара.

Expression Semantics

Semantics of an expression is defined only where it differs from, or is not defined in PrimitiveParser.

Выражение

Семантика

Sym()

Построить пустые символы "символы".

Sym(имя)

Построить пустые символы по имени имя.

Sym(sym2)

Копировать конструируют символы от sym2 (Другой символы объект).

Sym(seq)

Строить символы от seq (STL "символы".

Sym(seq, имя)

Строить символы от seq (STL name.

Sym(seq, dseq)

Конструировать символы из seq и dseq (STL контейнер струн и STL контейнер данных с value_type T который называется "символы".

Sym(seq, dseq,имя)

STLSTL контейнер данных с value_typeT), который name.

sym = sym2

Назначить sym2 на сим.

sym = s1, 2, ..., sN

sym += s1, 2, ..., sN

Добавить один или несколько символов (s1...sN) на sym.

sym.add(s1"(s2)...(sN)

Добавить один или несколько символов (s1...sN) на sym.

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

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

сим -= s1, 2, ..., sN

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

sym.clear()

Вычеркните все символы в сим.

sym.(s)

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

sym.find(s)

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

sym.prefix_find(f, l)

Возвращение указателя на объект, связанный с самым длинным символом, который соответствует началу диапазона [f, l], и обновления f<312>, чтобы указать на один конец этого матча. Если символ не совпадает, то верните нуль указателя, а f не меняется.

sym.for_each(f)

Для каждого символа в sym, s, a std::basic_string<Char<312>>> с соответствующими данными, dd>>>>>>>>>>>>>>>>>>>>>>

сим.имя()

Установить нынешнее название объекта символов.

sym.имя(имя)

Установить нынешнее название символа объекта имя.

Attributes

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

Complexity

Реализация по умолчанию использует Ternary Search Tree (TST) со сложностью:

O(log n+k)

Где k - длина строки для поиска в TST с n строк.

TST быстрее, чем хэширование для многих типичных проблем поиска, особенно когда поисковый интерфейс основан на итераторе. TSTs во много раз быстрее, чем хэш-столы для неудачных поисков, поскольку туманности обнаруживаются ранее после изучения только нескольких персонажей. Столы Hash всегда исследуют весь ключ при поиске.

Альтернативная реализация использует гибридный передний конец хэш-карты (для первого персонажа) плюс TST: tst_map. Это дает нам сложность

O(1 + log n+k-1)

Это оказалось значительно быстрее, чем обычный TST, хотя с немного большим количеством требований к использованию памяти (каждый слот в хэш-карте - это TST-узел). Если требуется много символов для поиска, используйте tst_map реализации. Это можно сделать с помощью tst_map в качестве третьего параметра шаблона для класса символов:

symbols<Char, T, tst_map<Char, T> > sym;
Example
[Note]Note

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

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

using boost::spirit::qi::symbols;

Символы с данными:

symbols<char, int> sym;
sym.add
    ("Apple", 1)
    ("Banana", 2)
    ("Orange", 3)
;
int i;
test_parser_attr("Banana", sym, i);
std::cout << i << std::endl;

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

symbols<char, int> sym;
sym.add
    ("apple", 1)    // symbol strings are added in lowercase...
    ("banana", 2)
    ("orange", 3)
;
int i;
// ...because sym is used for case-insensitive parsing
test_parser_attr("Apple", no_case[ sym ], i);
std::cout << i << std::endl;
test_parser_attr("ORANGE", no_case[ sym ], i);
std::cout << i << std::endl;


PrevUpHomeNext

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




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



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


реклама


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

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