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

Generator Grammar

Boost , Spirit 2.5.2 , Nonterminal Generators

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

Грамматика инкапсулирует наборправил(а также примитивных генераторов<PrimitiveGenerator>) и подграмм. Грамматика является основным механизмом модуляризации и композиции. Грамматики могут быть составлены для формирования более сложных грамматик.

Header
// forwards to <boost/spirit/home/karma/nonterminal/grammar.hpp>
#include <boost/spirit/include/karma_grammar.hpp>

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

Namespace

Имя

<boost::spirit::karma::grammar>

Synopsis
template <typename OutputIterator, typename A1, typename A2, typename A3>
struct grammar;
Template parameters

Параметр

Описание

по умолчанию

<OutputIterator>

Нет

A1, A2, A3

Или<Signature>,<Delimiter>или<Locals>в любом порядке. См. таблицу ниже.

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

Параметр

Описание

по умолчанию

Signature

Указывает синтезированные (возвратное значение) и наследственные атрибуты (аргументы) грамматики. Подробнее об этом здесь:<Nonterminal>

unused_type. Когда Signature по умолчанию unused_type, эффект такой же, как указание подписи void() который также эквивалентен unused_type()

Delimiter

unused_type

<Locals>

unused_type

Model of

Notation

g

Грамматика

Expression Semantics

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

выражение

Семантика

template <typename OutputIterator>
struct my_grammar : grammar<OutputIterator, A1, A2, A3>
{
    my_grammar() : my_grammar::base_type(start, name)
    {
        // Rule definitions
        start = /* ... */;
    }
    rule<OutputIterator, A1, A2, A3> start;
    // more rule declarations...
};

Грамматическое определение.<name>— необязательная строка, дающая грамматике её название, полезная для отладки.

[Note]Note

Параметры шаблона грамматики и правила ее начала (правило, переданное конструктору базового класса грамматики) должны совпадать, иначе вы увидите ошибки компиляции.

Attributes

Complexity

Сложность определяется сложностью его определения.

Example
[Note]Note

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

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

using boost::spirit::ascii::space_type;
using boost::spirit::ascii::space;
using boost::spirit::int_;
using boost::spirit::karma::grammar;
using boost::spirit::karma::rule;

Использование базовой грамматики:

struct num_list : grammar<output_iterator_type, space_type, std::vector<int>()>
{
    num_list() : base_type(start)
    {
        using boost::spirit::int_;
        num = int_;
        start = num << *(',' << num);
    }
    rule<output_iterator_type, space_type, std::vector<int>()> start;
    rule<output_iterator_type, space_type, int()> num;
};

Как использовать пример грамматики:

num_list nlist;
std::vector<int> v;
v.push_back(123);
v.push_back(456);
v.push_back(789);
test_generator_attr_delim("123 , 456 , 789", nlist, space, v);


PrevUpHomeNext

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




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



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


реклама


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

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