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

Epsilon Generator (eps)

Boost , Spirit 2.5.2 , Auxiliary Generators

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

Семейство компонентов<eps>позволяет создавать псевдогенераторы, генерирующие пустую строку. Эта функция иногда полезна либо для того, чтобы заставить генератор потерпеть неудачу или добиться успеха, либо для включения семантических действий в процесс генерации.

Description

Эпсилон (<eps>) — многоцелевой генератор, испускающий струну нулевой длины.

Simple Form

В своей простейшей форме<eps>создает компонент, генерирующий пустую строку, всегда преуспевая:

eps       // always emits a zero-length string

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

r = a | b | c | eps[error()]; // Call error if a, b, and c fail to generate
Semantic Predicate

Компонент<eps(b)>также генерирует пустую строку, но преуспевает только в том случае, если<b>является<true>и терпит неудачу в противном случае. Его ленивый вариант<eps(fb)>эквивалентен<eps(b)>, за исключением того, что он оценивает поставляемую функцию<fb>в момент генерации, при этом используя возвращаемое значение в качестве критериев успеха.

Семантические предикаты позволяют прикрепить условную функцию в любом месте грамматики. В этой роли эпсилон принимаетЛенивый Аргумент, который возвращается<true>или<false>.Ленивый Аргументобычно является тестом, который призван разрешить двусмысленность в грамматике. О неисправности генератора будет сообщено, когда результатLazy Argumentбудет оценен до<false>. В противном случае будет выпущена пустая строка. Общая форма:

eps_p(fb) << rest;

Ленивый Аргумент<fb>призван сделать семантический тест. Если тест будет выполнен, то<rest>будет оценен. В противном случае производство вернется раньше, не касаясь отдыха.

Header
// forwards to <boost/spirit/home/karma/auxiliary/eps.hpp>
#include <boost/spirit/include/karma_eps.hpp>

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

Namespace

Имя

<boost::spirit::eps// alias: boost::spirit::karma::eps>

Model of

Notation

b

Булева ценность.

fb

Ленивый аргумент, который оценивается до булевого значения.

Expression Semantics

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

выражение

Семантика

<eps>

Создает компонент, генерирующий пустую строку. Успех всегда.

<eps(b)>

Создает компонент, генерирующий пустую строку. Если<b>, то<true>(если только основной выходной поток не сообщает об ошибке).

<eps(fb)>

Создает компонент, генерирующий пустую строку. Успешно, если<fb>возвращается<true>в момент генерации (если основной выходной поток не сообщает об ошибке).

Attributes

выражение

атрибут

<eps>

<unused>

<eps(b)>

<unused>

<eps(fb)>

<unused>

Complexity

O(1)

Сложность постоянна, поскольку выход не генерируется.

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::eps;
using boost::phoenix::val;

Использование генератора<eps>:

test_generator("abc", eps[std::cout << val("starting eps example")] << "abc");
test_generator("abc", eps(true) << "abc");
test_generator("", eps(false) << "abc");      // fails as eps expression is 'false'


PrevUpHomeNext

Статья Epsilon Generator (eps) раздела Spirit 2.5.2 Auxiliary Generators может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Auxiliary Generators ::


реклама


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

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