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

Epsilon Parser (eps)

Boost , Spirit 2.5.2 , Auxiliary Parsers

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

Epsiloneps— многоцелевой парсер, возвращающий совпадение нулевой длины.

Simple Form

В простейшей формеepsсоответствует нулевой струне и всегда возвращает матч нулевой длины:

eps // always returns a zero-length match

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

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

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

eps(f) >> rest;

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

Header
// forwards to <boost/spirit/home/qi/auxiliary/eps.hpp>
#include <boost/spirit/include/qi_eps.hpp>

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

Namespace

Имя

повышение::дух::эпс// псевдоним: повышение::дух::qi::eps

Model of

Notation

f

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

Expression Semantics

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

выражение

Семантика

eps

Сравните пустую нить (всегда матчи).

epsf

Еслиfоцениваетистинно, верните совпадение нулевой длины.

Attributes

выражение

атрибут

eps

неиспользованный

Complexity

Для простыхэпссложность О(1). Для семантических предикатовepsf] сложность определяется функциейf.

Example
[Note]Note

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

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

using boost::spirit::qi::eps;
using boost::spirit::qi::int_;
using boost::spirit::qi::_1;
namespace phx = boost::phoenix;

Основныеэпс:

test_parser("", eps); // always matches

Этот пример имитирует «классический»парсер if_p. Здесьint_будет опробован только в том случае, если условиеcистинно.

bool c = true; // a flag
test_parser("1234", eps(phx::ref(c) == true) >> int_);

Этот пример имитирует «классический», а_pпарсер. Здесь петля клена выйдет, как только условиеcстанет истинным. Заметьте, что условиеc, превращается вложное, когда мы подходим к разбору4.

test_phrase_parser("1 2 3 4",
    *(eps(phx::ref(c) == true) >> int_[phx::ref(c) = (_1 == 4)]));


PrevUpHomeNext

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




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



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


реклама


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

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