![]() |
![]() ![]() ![]() ![]() |
![]() |
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 ::
реклама |