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

Nonterminal

Boost , Spirit 2.5.2 , Generator Concepts

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

Нетерминал является символом в грамматике парсинг-экспрессии, которая представляет собой фрагмент грамматики. Нетерминалы могут сами указывать на рекурсию. Это одно из важнейших понятий и причина появления слова «рекурсивный» в рекурсивном поколении.

Refinement of
Signature

Правила могут иметь как потребляемые, так и наследственные атрибуты. ПравилоПодписьуказывает как потребляемые, так и наследственные атрибуты. В спецификации используется синтаксис декларатора функций:

RT(A0, A1, A2, ..., AN)

где<RT>- потребленный атрибут правила и<A0>...<AN>- наследственные атрибуты правила.

Attributes

Правило моделирует функцию C++. Потребляемый атрибут правила аналогичен возвращаемому значению функции, поскольку это тип -экспонированный - правилом. Его унаследованные атрибуты аналогичны функциональным аргументам. Унаследованные атрибуты (аргументы) могут передаваться так же, как любойЛенивый Аргумент, например:

r(expr) // Evaluate expr at parse time and pass the result to the Nonterminal r
_val

Заполнитель<boost::spirit::karma::_val>может быть использован вФениксесемантических действиях в любом месте определения Нетерминала. ЭтотФениксзаполнитель относится к атрибуту Nonterminal (потребляемый).<_val>заполнитель действует как неизменная ссылка на атрибут Nonterminal.

[Note] Note

Начиная сSpiritV2.5 (распределяется с Boost V1.47) заполнитель<_val>может использоваться в семантических действиях, присоединенных к компонентам генератора верхнего уровня.Генератор APIдля получения дополнительной информации.

_r1...r10

<boost::spirit::_r1>...<boost::spirit::r10>заполнители могут быть использованы вФеникссемантические действия в любом месте в определении Nonterminal. Этизаполнители Фениксаотносятся к наследственным атрибутам Нетерминала.

Locals

Нетерминалы могут иметь локальные переменные, которые будут создаваться на стеке во время выполнения. Местный дескриптор, добавленный к Нетерминальной декларации, дает Нетерминальные локальные переменные:

template <typename T0, typename T1, typename T2, ..., typename TN>
struct locals;

где<T0>...<TN>— типы локальных переменных, доступных в вашихсемантических действиях Фениксас использованием заполнителей:

  • <boost::spirit::_a>
  • <boost::spirit::_b>
  • <boost::spirit::_c>
  • <boost::spirit::_d>
  • <boost::spirit::_e>
  • <boost::spirit::_f>
  • <boost::spirit::_g>
  • <boost::spirit::_h>
  • <boost::spirit::_i>
  • <boost::spirit::_j>

которые соответствуют локальным переменным Нетерминала<T0>...<T9>.

Notation

x

Нетерминальный

X

Нетерминальный тип

arg1, arg2, ..., argN

Ленивые аргументы, которые оценивают каждый из наследственных атрибутов Нетерминала.

Valid Expressions

В дополнение к требованиям, определенным в<Generator>, для любого Нетерминала необходимо выполнить следующее:

выражение

Семантика

Тип возврата

<x>

В выражении генератора вызовите Nonterminal<x>

<X>

<x(arg1, arg2, ...,argN)>

В экспрессии генератора вызовите нетерминальный<x>переход в наследственных атрибутах<arg1>...<argN>

<X>

<x.name(name)>

Установите имя нетерминала

<void>

<x.name()>

Получить имя нетерминала

<std::string>

Type Expressions

выражение

Описание

<X::sig_type>

Подпись<X>:Последовательность движения вперед. Первый элемент - это тип потребленных атрибутов Nonterminal, а остальные - наследственные типы атрибутов.

<X::locals_type>

Местные переменные<X>: AnMPL Forward Sequence

.
Models

PrevUpHomeNext

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




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



:: Главная :: Generator Concepts ::


реклама


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

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