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

Parser Rule

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

Правило представляет собой полиморфный парсер, который действует как именованный заполнитель, фиксирующий поведение назначенного ему выражения Парсинг-экспрессионной грамматики . Наименование грамматики Парсинг-экспрессии позволяет ссылаться на нее позже и позволяет правилу называть себя. Это один из важнейших механизмов и причина слова «рекурсивный» в рекурсивном спусковом парсинге.

Header
// forwards to <boost/spirit/home/qi/nonterminal/rule.hpp>
#include <boost/spirit/include/qi_rule.hpp>

Кроме того, см. Включить структуру .

Namespace

Имя

boost::spirit::qi::rule

Synopsis
template <typename Iterator, typename A1, typename A2, typename A3>
struct rule;
Template parameters

Параметр

Описание

По умолчанию

Iterator

нет

A1, A2, A3

Либо Подпись , Skipper, либо Локалы в любом порядке. См. таблицу ниже.

Вот более подробная информация о параметрах шаблона:

Параметр

Описание

По умолчанию

Подпись

неиспользованный_тип. Когда Подпись по умолчанию неиспользуемый_тип , эффект такой же, как и указание подписи лишенный(), что также эквивалентно неиспользуемый_тип()

Skipper

Указывает шкиперский парсер правила. Укажите это, если вы хотите, чтобы правило пропускало белые пространства. Если это не указано, правило является «неявной лексемой» и не пропускает пробелы. Правила "имплицитной лексемы" все еще можно назвать с шкипером. В таком случае правило делает предварительный скип, как и все лексемы и примитивы.

unused_type

Locals

unused_type

Model of

Notation

r, r2

Правила

p

Парсерское выражение

Iterator

Тип итератора, над которым, как ожидается, будет работать правило.

A1, A2, A3

Либо Подпись, Skipper, либо Локалы в любом порядке.

Expression Semantics

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

Выражение

Описание

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 = r2;

r.alias()

r.copy()

Получить копию r.

r = p;

r %= p;

r.name()

Укажите текущее имя объекта правил.

r.name(name)

Attributes

Парсерным атрибутом правила является T, его синтезированный атрибут. См. Атрибут

Complexity

Example
[Note]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


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:01:09/0.0048680305480957/0