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