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

Nonterminal

Boost , Spirit 2.5.2 , Parser 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++. Синтезированный атрибут Nonterminal аналогичен значению возврата функции, а его унаследованные атрибуты аналогичны аргументам функции. Унаследованные атрибуты (аргументы) могут передаваться так же, как любойЛенивый Аргумент, например:

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

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

[Note] Note

Начиная сSpiritV2.5 (распределяется с Boost V1.47) заполнитель<_val>может использоваться в семантических действиях, прилагаемых к компонентам парсера верхнего уровня. См.Parse 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

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

выражение

Семантика

Тип возврата

<x>

В парсерном выражении призывайте Нетерминал<x>

<X>

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

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

<X>

<x.name(name)>

Наименование термина.

<void>

<x.name()>

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

<std::string>

отладка(x)

Debug Nonterminal<x>

<void>

Type Expressions

выражение

Описание

<X::sig_type>

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

<X::locals_type>

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

.
Models

PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:53:43/0.0088000297546387/1