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

Character Parser (char_, lit)

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

<char_>Парсер соответствует одиночных персонажей.<char_>Парсер имеет ассоциированныйКодирование символов пространства имен. Это необходимо при выполнении основных операций, таких как ингибирование чувствительности к случаю и работа с диапазонами символов.

Существуют различные формы<char_>.

char_

В<char_>-х годах не было ни одного из них.Кодирование символов пространства имен.

char_               // matches any character
char_(ch)

<char_>[<char_>] [[<char_>]] [[<char_>]] [[<char_>]]] [[<char_>]]] [[[<char_>]]]] [[<char_>]]] [[[<char_>]]]] [[[<char_>]]]] [[[[[]]]]]] [[[[[]]]]]] [[[[[]]]]]] [[[[[[]]]]]]] [[[[[]]]]][[[[[]]]]]][[[[[]]]]]][[[[[]]]]]][[[[[]]]]]][[[[[]]]]][[[[[]]]]]]][[[[[[]]]]]][[[[[]]]]]][[[[[]]]]][[[[]]]]]][[[[[[]]]]]][[[

char_('x')          // matches 'x'
char_(L'x')         // matches L'x'
char_(x)            // matches x (a char)
char_(first, last)

<char_>с двумя аргументами, соответствует ряду символов.

char_('a','z')      // alphabetic characters
char_(L'0',L'9')    // digits

Ряд символов создается из низко-высокой пары символов. Такой парсер соответствует одному персонажу, который находится в диапазоне, включая обе конечные точки. Обратите внимание, что первый символ должен бытьдовторого, согласно базовомуПространству имен символов.

Картирование символов по своей сути зависит от платформы. Например, в стандарте не гарантируется, что<'A' <'Z'>, именно поэтому в Spirit2 мы специально прикрепляем к парсеру<char_>специальноепространство имен для кодирования символов(например, ASCII, ISO-8859-1) для устранения таких неясностей.

[Note]Note

Разрозненные битовые векторы

Для размещения 16/32 и 64-битных символов char-set статически переключается с реализации<std::bitset>, когда тип символа не превышает 8 бит, на разреженный бит/булевый набор, который использует сортированный вектор разъединенных диапазонов<range_run>. Набор построен из таких диапазонов, что смежные или перекрывающиеся диапазоны сливаются.

<range_runs>очень экономичны в ситуациях, когда существует множество диапазонов и несколько отдельных разрозненных значений. Поиск - это O(log n), где n - число диапазонов.

char_(def)

Наконец, при заданной строке (простой строке C,<std::basic_string>и т. Д.), Струна рассматривается как строка определения char-set после синтаксиса, который напоминает наборы символов с регулярным выражением в стиле posix (за исключением того, что двойные цитаты ограничивают элементы набора вместо квадратных скобок и нет специального отрицания ^ символа). Примеры:

char_("a-zA-Z")     // alphabetic characters
char_("0-9a-fA-F")  // hexadecimal characters
char_("actgACTG")   // DNA identifiers
char_("\x7f\x7e")   // Hexadecimal 0x7F and 0x7E
lit(ch)

<lit>При прохождении одного символа ведет себя как один аргумент<char_>, за исключением того, что<lit>не синтезирует атрибут.<char>или<wchar_t>является эквивалентом<lit>.

[Note]Note

<lit>используется какструнные парсеры, так и шар парсеры. Как правило, парсер char создается, когда вы проходите в персонаже, а парсер строки создается, когда вы проходите в строке. Исключением является прохождение одной буквальной строки элемента, например<lit("x")>. В этом случае мы оптимизируем это, чтобы создать парсер char вместо парсера строк.

Примеры:

'x'
lit('x')
lit(L'x')
lit(c) // c is a char
Header
// forwards to <boost/spirit/home/qi/char/char.hpp>
#include <boost/spirit/include/qi_char_.hpp>

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

Namespace

Имя

<boost::spirit::lit// alias: boost::spirit::qi::lit>

<ns::char_>

В приведенной выше таблице<ns>представленоПространство имен символов.

Model of

Notation

c, f, l

Буквальный шар, например<'x'>,<L'x'>или что-либо, что может быть преобразовано в<char>или<wchar_t>, илиЛенивый аргумент, который оценивает все, что может быть преобразовано в<char>или<wchar_t>.

ns

Пространство имен символов.

cs

AStringилиLazy Argument, который оценивает доString, который определяет строку определения шара, следуя синтаксису, который напоминает наборы символов регулярного выражения в стиле posix (кроме квадратных скобок и символа отрицания<^>).

cp

Чар-парсер, чар-парсер или чар-сет-парсер.

Expression Semantics

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

выражение

Семантика

<c>

Создайте из шара парсер<c>

.

<lit(c)>

Создайте парсер из шара<c>

.

<ns::char_>

Создайте парсер, который соответствует любому символу в кодировке<ns>.

<ns::char_(c)>

Создайте парсер с<ns>кодированием из шара,<c>

.

<ns::char_(f, l)>

Создайте char-range парсер, который соответствует символам от диапазона<f>до<l>включительно с<ns>кодированием.

<ns::char_(cs)>

Создать char-set парсер с<ns>кодированием из строки определения char-set,<cs>.

<~cp>

Негат<cp>. Результатом является отрицательный char parser, который соответствует любому символу в кодировке<ns>, за исключением символов, соответствующих<cp>

.
Attributes

выражение

атрибут

<c>

<unused>или если<c>являетсяЛенивым Аргументом, тип символа возвращается, ссылаясь на него.

<lit(c)>

<unused>или если<c>являетсяЛенивым Аргументом, тип символа возвращается, ссылаясь на него.

<ns::char_>

Тип символаПространство имен символов,<ns>.

<ns::char_(c)>

Тип символаПространство имен символов,<ns>.

<ns::char_(f, l)>

Тип символаПространство имен символов,<ns>.

<ns::char_(cs)>

Тип символаПространство имен символов,<ns>.

<~cp>

Атрибут<cp>

.
Complexity

O(N), за исключением наборов шаров с 16-битными (или более) символами (например,<wchar_t>). Они имеют сложностьO(log N), где N — число различных диапазонов символов в наборе.

Example
[Note]Note

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

Некоторые используют декларации:

using boost::spirit::qi::lit;
using boost::spirit::ascii::char_;

Основные буквы:

test_parser("x", 'x');                      // plain literal
test_parser("x", lit('x'));                 // explicit literal
test_parser("x", char_('x'));               // ascii::char_

Дальность:

char ch;
test_parser_attr("5", char_('0','9'), ch);  // ascii::char_ range
std::cout << ch << std::endl;               // prints '5'

Набор персонажей:

test_parser_attr("5", char_("0-9"), ch);    // ascii::char_ set
std::cout << ch << std::endl;               // prints '5'

Lazy char_ using Phoenix

namespace phx = boost::phoenix;
test_parser("x", phx::val('x'));            // direct
test_parser("5",
    char_(phx::val('0'),phx::val('9')));    // ascii::char_ range


PrevUpHomeNext

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




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



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


реклама


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

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