![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Character Generators (char_, lit)Boost , Spirit 2.5.2 , Char Generators
|
![]() | Note |
---|---|
Разрозненные битовые векторы Для размещения 16/32 и 64-битных символов char-set статически переключается с реализации< < |
Наконец, при заданной строке (простой строке 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
>Когда проходит один символ, ведет себя как один аргумент<char_
>, за исключением того, что<lit
>не потребляет атрибут.<char
>или<wchar_t
>является эквивалентом<lit
>.
![]() | Note |
---|---|
< |
Примеры:
'x' lit('x') lit(L'x') lit(c) // c is a char
// forwards to <boost/spirit/home/karma/char/char.hpp> #include <boost/spirit/include/karma_char_.hpp>
См. такжеВключить структуру.
Имя |
---|
< |
ns::char_ |
В приведенной выше таблице<ns
>представленоПространство имен символов.
Notation
ch
, ch1
, ch2
Специфический характер класса персонажа (см. Типы классов персонажа) или ленивый аргумент, который оценивает значение конкретного персонажа класса персонажа
cs
Строка спецификатора набора символов (см. Типы классов символов) или ленивый аргумент, который оценивает строку спецификатора набора символов или указатель / ссылка на нулевой массив символов. Эта строка определяет строку определения шара, следуя синтаксису, который напоминает наборы символов регулярного выражения в стиле posix (кроме квадратных скобок и символа отрицания<^
>).
ns
cg
Генератор char, генератор char range или генератор char set.
Семантика выражения определяется только там, где она отличается или не определена в.<PrimitiveGenerator
>.
выражение |
Описание |
---|---|
ch | Создайте буквальный символ< |
< | Создайте буквальный символ< |
ns::char_ | Создайте символ, предоставленный обязательным атрибутом, интерпретируемым в наборе символов, определенном< |
ns::char_(ch) | |
ns::char_("c") | Создайте символ< |
ns::char_(ch1,
ch2) | |
ns::char_(cs) | Создайте символ, предоставленный обязательным атрибутом, интерпретируемым в наборе символов, определенном< |
~cg | Негат< |
Предполагается, что символ<ch
>относится к диапазону символов, определенному<ns::char_(ch1,ch2)
>, если его значение символа (двоичное представление), интерпретируемое в наборе символов, определенном<ns
>, не меньше значения символа<ch1
>и не больше, чем значение символа<ch2
>(т.е.<ch1<=
ch<=
ch2
>).
Параметр<charset
>, переданный<ns::char_(charset)
>, должен быть строкой, содержащей более одного символа. Предполагается, что каждый отдельный символ в этой строке принадлежит набору символов, определенному этим выражением. Исключением из этого является<'-'
>символ, который имеет особое значение, если он не указан как первый и не последний символ в<charset
>. Если<'-'
>используется между символами, он интерпретируется как охватывающий диапазон символов. Символ<ch
>считается принадлежащим к определенному набору символов<charset
>, если он соответствует одному из символов, как указано параметром строки, описанным выше. Например,
Пример |
Описание |
---|---|
char_("abc") | 'a', 'b' и 'c' |
char_("a-z") | |
< | |
char_("-1-9") |
выражение |
атрибут |
---|---|
ch | < |
< | < |
ns::char_ | Ch , атрибут
является обязательным (в противном случае компиляция потерпит неудачу). Ch - это тип персонажа
Character
Encoding Namespace, ns .
|
ns::char_(ch) | < |
ns::char_("c") | Ch , атрибут
является необязательным, если он поставляется, генератор сравнивает
атрибуты c
и успех только в том случае, если оба равны, в противном случае. Ch - это тип персонажа
Character
Encoding Namespace, ns .
|
ns::char_(ch1,
ch2) | Ch , атрибут
является обязательным (в противном случае компиляция потерпит неудачу), генератор
преуспевает, если атрибут относится к диапазону символов [ch1, ch2] , интерпретируемому в символе
ns .
Ch - это персонаж
Тип Character
Encoding Namespace, ns .
|
ns::char_(cs) | Ch , атрибут
является обязательным (в противном случае компиляция потерпит неудачу), генератор
преуспевает, если атрибут относится к набору символов cs , интерпретируется в символе
ns .
Ch - это персонаж
Тип Character
Encoding Namespace, ns .
|
~cg |
![]() | Note |
---|---|
В дополнение к их обычному атрибуту типа< |
O(1)
Сложность<ch
>,<lit(ch)
>,<ns::char_
>,<ns::char_(ch)
>и<ns::char_("c")
>постоянна, так как все генераторы излучают ровно один символ на вызов.
Генератор диапазона символов<ns::char_(ch1,ch2)
>дополнительно требует постоянного времени поиска для проверки того, принадлежит ли атрибут диапазону символов.
Генератор набора символов (<ns::char_(cs)
>) дополнительно требует времени поиска O(log N) для проверки того, принадлежит ли атрибут набору символов, где N — количество символов в наборе символов.
![]() | 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::lit; using boost::spirit::ascii::char_;
Использование генераторов<char_
>:
test_generator("A", 'A'); test_generator("A", lit('A')); test_generator_attr("a", char_, 'a'); test_generator("A", char_('A')); test_generator_attr("A", char_('A'), 'A'); test_generator_attr("", char_('A'), 'B'); // fails (as 'A' != 'B') test_generator_attr("A", char_('A', 'Z'), 'A'); test_generator_attr("", char_('A', 'Z'), 'a'); // fails (as 'a' does not belong to 'A'...'Z') test_generator_attr("k", char_("a-z0-9"), 'k'); test_generator_attr("", char_("a-z0-9"), 'A'); // fails (as 'A' does not belong to "a-z0-9")
Статья Character Generators (char_, lit) раздела Spirit 2.5.2 Char Generators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Char Generators ::
реклама |