![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Parser RuleBoost , Spirit 2.5.2 , Nonterminal Parsers
|
Имя |
---|
|
template <typename Iterator, typename A1, typename A2, typename A3> struct rule;
Параметр |
Описание |
По умолчанию |
---|---|---|
Iterator | нет | |
A1 , A2 , A3 | Либо |
Вот более подробная информация о параметрах шаблона:
Параметр |
Описание |
По умолчанию |
---|---|---|
| | |
Skipper | Указывает шкиперский парсер правила. Укажите это, если вы хотите, чтобы правило пропускало белые пространства. Если это не указано, правило является «неявной лексемой» и не пропускает пробелы. Правила "имплицитной лексемы" все еще можно назвать с шкипером. В таком случае правило делает предварительный скип, как и все лексемы и примитивы. | |
Locals | |
Notation
r,
r2
Правила
p
Парсерское выражение
Iterator
Тип итератора, над которым, как ожидается, будет работать правило.
A1
, A2
, A3
Либо Подпись
, Skipper
, либо Локалы
в любом порядке.
Семантика выражения определяется только там, где она отличается от или не определена в Нетерминал
.
Выражение |
Описание |
---|---|
rule<Iterator, A1, A2, A3> r(name); rule<Iterator, A1, A2, A3> r(name); [ORIG_END] --> | |
rule<Iterator, A1, A2, A3> r(r2);
| Правило построения копии |
r =
r2; | |
| |
r.copy() | Получить копию |
r =
p; | |
r %=
p; | |
r.name() | Укажите текущее имя объекта правил. |
r.name(name) |
Парсерным атрибутом правила является
T
, его синтезированный атрибут. См.Атрибут
![]() | Note |
---|---|
Испытательный ремень для примера (примеров) ниже представлен в разделе Основные примеры. |
Некоторые используют декларации:
using boost::spirit::qi::rule; using boost::spirit::qi::int_; using boost::spirit::qi::locals; using boost::spirit::qi::_1; using boost::spirit::qi::_a; using boost::spirit::ascii::alpha; using boost::spirit::ascii::char_; using boost::spirit::ascii::space_type;
Основное правило:
rule<char const*> r; r = int_; test_parser("123", r);
Правило с синтезированным атрибутом:
rule<char const*, int()> ra; ra = int_; int i; test_parser_attr("123", ra, i); assert(i == 123);
Правило с шкипером и синтезированным атрибутом:
rule<char const*, std::vector<int>(), space_type> rs; rs = *int_; std::vector<int> v; test_phrase_parser_attr("123 456 789", rs, v); assert(v[0] == 123); assert(v[1] == 456); assert(v[2] == 789);
Правило с одной локальной переменной:
rule<char const*, locals<char> > rl; rl = alpha[_a = _1] >> char_(_a); // get two identical characters test_parser("aa", rl); // pass test_parser("ax", rl); // fail
Статья Parser Rule раздела Spirit 2.5.2 Nonterminal Parsers может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Nonterminal Parsers ::
реклама |