![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Epsilon Parser (eps)Boost , Spirit 2.5.2 , Auxiliary Parsers
|
Имя |
---|
|
Notation
f
Ленивый аргумент, который оцениваетбол
.
Семантика выражения определяется только там, где она отличается отПримитивного Парсера
.
выражение |
Семантика |
---|---|
| Сравните пустую нить (всегда матчи). |
| Если |
выражение |
атрибут |
---|---|
|
|
Для простых
эпс
сложность О(1). Для семантических предикатовepsf
] сложность определяется функциейf
.
![]() | 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)]));
Статья Epsilon Parser (eps) раздела Spirit 2.5.2 Auxiliary Parsers может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Auxiliary Parsers ::
реклама |