![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Parser GrammarBoost , Spirit 2.5.2 , Nonterminal Parsers
|
Имя |
---|
< |
template <typename Iterator, typename A1, typename A2, typename A3> struct grammar;
Параметр |
Описание |
по умолчанию |
---|---|---|
< | Основной тип итератора, над которым, как ожидается, будет работать правило. | Нет |
< | Или< | См. таблицу ниже. |
Вот более подробная информация о параметрах шаблона:
Параметр |
Описание |
по умолчанию |
---|---|---|
< | Указывает синтезированные (возвратное значение) грамматики и наследственные атрибуты (аргументы). Подробнее об этом здесь:< | < |
< | Указывает грамматический парсер шкипера. Укажите это, если вы хотите, чтобы грамматика пропускала белые пространства. | < |
< | Указывает локальные переменные грамматики. См.< | < |
Notation
g
Грамматика
Семантика выражения определяется только там, где она отличается от или не определена в<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... };
| Грамматическое определение.< |
![]() | Note |
---|---|
Параметры шаблона грамматики и правила ее начала (правило, переданное конструктору базового класса грамматики) должны совпадать, иначе вы увидите ошибки компиляции. |
Парсерный атрибут грамматики<
T
>, его синтезированный атрибут. См.<Attribute
>
Сложность определяется сложностью его определения.
![]() | 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);
Статья Parser Grammar раздела Spirit 2.5.2 Nonterminal Parsers может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Nonterminal Parsers ::
реклама |