![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
EpsilonBoost , ,
Эпсилон(epsilon_pиeps_p) — многоцелевой парсер, возвращающий совпадение нулевой длины. Simple FormВ своей простейшей форме epsilon_p соответствует нулевой струне и всегда возвращает матч нулевой длины:
Эта форма обычно используется для запускасемантического действиябезоговорочно. Например, он полезен для запуска сообщений об ошибках, когда набор альтернатив не работает:
Semantic PredicateСемантические предикаты позволяют прикрепить функцию в любом месте грамматики. В этой роли эпсилон принимает 0-арную (нулярную) функцию/функтор. Функция/функтор времени выполнения обычно является тестом, который призван устранить неоднозначность в грамматике. О сбое анализа будет сообщено, когда результат функции/функтора будет оценен как ложный. В противном случае будет объявлен пустой матч. Общая форма: eps_p(f) >> rest; Нулярная функцияfвызывается для выполнения семантического теста (скажем, проверки, находится ли символ в таблице символов). Если жеистинно, топокойбудет оценен. В противном случае производство вернется раньше без матча, никогда не касаясьотдыха. Syntactic PredicateПодобно семантическим предикатам, синтаксические предикаты утверждают, что определенный условный синтаксис должен быть удовлетворен, прежде чем оценивать другую продукцию. На этот раз epsilon_p принимает (условный) парсер. Общая форма: eps_p(p) >> rest; Еслирсовпадает с входным потоком, то попытайтесь распознатьпокой. Парсерpвызывается для проверки синтаксиса. Несмотря на успехp,eps_p(p)всегда возвращает совпадение нулевой длины (т.е. вход не потребляется). Если жеистинно, топокойбудет оценен. В противном случае производство вернется раньше без матча, никогда не касаясьотдыха. Пример:
Эпсилон здесь используется в качестве синтаксического предиката.oct_p(см.цифры) разбирается только в том случае, если мы видим ведущую'0'. Обертывание ведущего'0'внутри эпсилона заставляет парсер ничего не потреблять из входа. Если'0'видно,epsilon_pсообщает об успешном матче с нулевой длиной.
|
![]() |
![]() |
![]() |
Copyright © 1998-2003 Joel de Guzman
Copyright © 2003 Martin Wille
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
Статья Epsilon раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |