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

Parser Grammar

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

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

Header
// forwards to <boost/spirit/home/qi/nonterminal/grammar.hpp>
#include <boost/spirit/include/qi_grammar.hpp>

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

Namespace

Имя

<boost::spirit::qi::grammar>

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

Параметр

Описание

по умолчанию

<Iterator>

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

Нет

<A1>,<A2>,<A3>

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

См. таблицу ниже.

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

Параметр

Описание

по умолчанию

<Signature>

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

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

.

<Skipper>

Указывает грамматический парсер шкипера. Укажите это, если вы хотите, чтобы грамматика пропускала белые пространства.

<unused_type>

<Locals>

Указывает локальные переменные грамматики. См.<Nonterminal>

.

<unused_type>

Model of

Notation

g

Грамматика

Expression Semantics

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

выражение

Семантика

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

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

[Note]Note

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

Attributes

Парсерный атрибут грамматики<T>, его синтезированный атрибут. См.<Attribute>

Complexity

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

Example
[Note]Note

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

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

using boost::spirit::ascii::space_type;
using boost::spirit::int_;
using boost::spirit::qi::grammar;
using boost::spirit::qi::rule;

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

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

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

num_list nlist;
test_phrase_parser("123, 456, 789", nlist);


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:36:54/0.025824069976807/1