![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Symbols Parser (symbols)Boost , Spirit 2.5.2 , String Parsers
|
Имя |
---|
|
|
|
template <typename Char, typename T, typename Lookup> struct symbols;
Параметр |
Описание |
По умолчанию |
---|---|---|
Char | Тип символов строк символа. | |
| Тип данных, связанный с каждым символом. | |
| Реализация поиска символов | |
Notation
Semantics of an expression is defined only where it differs from, or is not defined in PrimitiveParser
.
Выражение |
Семантика |
---|---|
| Построить пустые символы |
| Построить пустые символы по имени |
| Копировать конструируют символы от |
| Строить символы от |
| Строить символы от |
| Конструировать символы из |
| STLSTL
контейнер данных с value_type T ), который
name .
|
| Назначить |
| |
| Добавить один или несколько символов ( |
| Добавить один или несколько символов ( |
| Добавить один или несколько символов ( |
| |
sym.remove(s1)(s2)...(sN) | |
| Вычеркните все символы в |
| Верните ссылку на объект, связанный с символом, |
| Возвращение указателя на объект, связанный с символом, |
sym.prefix_find(f,
l) | Возвращение указателя на объект, связанный с самым длинным символом, который соответствует началу диапазона |
| Для каждого символа в |
| Установить нынешнее название объекта символов. |
| Установить нынешнее название символа объекта |
Атрибут symbol<Char, T>
T
.
Реализация по умолчанию использует 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;
![]() | 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;
Статья Symbols Parser (symbols) раздела Spirit 2.5.2 String Parsers может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: String Parsers ::
реклама |