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

Semantic Actions with Generators

Boost , Spirit 2.5.2 , Reference

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

Семантические действия могут быть прикреплены к любой точке грамматической спецификации. Они позволяют вызывать функцию или функциональный объект для того, чтобы обеспечить вывод значения генератором, присоединенным к семантическому действию. Семантические действия связаны с генератором с использованием синтаксиса<g[]>, где<g>— произвольное выражение генератора.

Header
// forwards to <boost/spirit/home/karma/action.hpp>
#include <boost/spirit/include/karma_action.hpp>

См. такжеВключите структуру.

Model of

Notation

a, g

Примеры генератора<G>

A

Тип атрибута, выставляемого генератором<a>

fa

Функция семантического действия с подписью<void(Attrib&,Context&,bool&)>. Третий параметр — булев флаг, который может быть установлен на ложный, чтобы заставить генератор выйти из строя. И<Context>, и булев флаг необязательны. Более подробную информацию см. ниже.

Attrib

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

Context

Тип контекста исполнения генератора. Более подробную информацию см. ниже.

Expression Semantics

Семантика выражения определяется только там, где она отличается от или не определена в<UnaryGenerator>.

выражение

Семантика

<g[fa]>

Призывайте семантические действия<fa>допризывания<g>. Функция или объект функции<fa>, как ожидается, обеспечивают значение для генерации вывода от генератора<g>

.

Возможными сигнатурами для функций, используемых в качестве семантических действий, являются:

template <typename Attrib>
void fa(Attrib& attr);
template <typename Attrib, typename Context>
void fa(Attrib& attr, Context& context);
template <typename Attrib, typename Context>
void fa(Attrib& attr, Context& context, bool& pass);

Предполагается, что функция или объект функции возвращают значение для генерации вывода путем присвоения ему первого параметра<attr>. Вот<Attrib>тип атрибута генератора, прикрепленный к семантическому действию.

Тип<Context>— тип контекста исполнения генератора. Этот тип не определен и зависит от контекста, в котором используется генератор. Значение<context>используется семантическими действиями, написанными с использованиемФениксадля доступа к различным зависящим от контекста атрибутам и значениям. Для получения дополнительной информации оФениксевыражениях, используемых в семантических действиях см.<Nonterminal>.

Третий параметр,<pass>, может быть использован семантическим действием, чтобы заставить соответствующий генератор выйти из строя. В случае, если передатчик установлен на<false>, генератор действия сразу же вернется<false>, при этом не ссылаясь<g>и не генерируя никакого вывода.

Attributes

выражение

атрибут

<a[fa]>

<a: A--> a[fa]: A>

Complexity

Сложность генератора действия определяется сложностью генератора, к которому присоединено семантическое действие, и сложностью функции или объекта функции, используемого в качестве семантического действия.

[Important]Important

Обратите внимание, что использование семантических действий вДух. Кармаобычно заставляет библиотеку создаватькопиюатрибута, что может быть дорогостоящей операцией. Всегда подумайте об использовании других средств связи значения с конкретным генератором.

Example
[Note]Note

Тестовый ремень для примера (примеров) ниже представлен в разделеОсновные примеры.

Некоторые включают:

#include <boost/spirit/include/karma.hpp>
#include <boost/spirit/include/support_utree.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/fusion/include/std_pair.hpp>
#include <iostream>
#include <string>

Некоторые используют декларации:

using boost::spirit::karma::int_;
using boost::spirit::karma::string;
using boost::spirit::karma::_1;
using boost::phoenix::ref;
using boost::phoenix::val;

Некоторые примеры:

int i = 42;
test_generator("42", int_[_1 = ref(i)]);
test_generator("abc", string[_1 = val("abc")]);

Больше примеров семантических действий можно найти здесь:Примеры семантических действий.


PrevUpHomeNext

Статья Semantic Actions with Generators раздела Spirit 2.5.2 Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Reference ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 06:13:51/0.0044760704040527/0