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

Iterator Based Parser API

Boost , Spirit 2.5.2 , Parser API

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

Библиотека предоставляет несколько бесплатных функций, чтобы сделать разбор. Эти функции парсера имеют две формы. Первая форма<parse>работает на уровне персонажа. Второй<phrase_parse>работает на уровне фразы и требует пропуска парсера. Обе версии могут принимать атрибуты по ссылке, которая будет удерживать парсированные значения на успешном разборе.

Header
// forwards to <boost/spirit/home/qi/parse.hpp>
#include <boost/spirit/include/qi_parse.hpp>

Для вариадных атрибутов:

// forwards to <boost/spirit/home/qi/parse_attr.hpp>
#include <boost/spirit/include/qi_parse_attr.hpp>

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

Для функций API выводится правильный (соответствующий) тип парсера из поставляемого типа атрибута:

// forwards to <boost/spirit/home/qi/detail/parse_auto.hpp>
#include <boost/spirit/include/qi_parse_auto.hpp>

Кроме того, см.Включите структуру.

Namespace

Имя

<boost::spirit::qi::parse>

<boost::spirit::qi::phrase_parse>

<boost::spirit::qi::skip_flag::postskip>

<boost::spirit::qi::skip_flag::dont_postskip>

Synopsis
namespace boost { namespace spirit { namespace qi
{
    template <typename Iterator, typename Expr>
    inline bool
    parse(
        Iterator& first
      , Iterator last
      , Expr const& expr);
    template <typename Iterator, typename Expr
      , typename Attr1, typename Attr2, ..., typename AttrN>
    inline bool
    parse(
        Iterator& first
      , Iterator last
      , Expr const& expr
      , Attr1& attr1, Attr2& attr2, ..., AttrN& attrN);
    template <typename Iterator, typename Expr, typename Skipper>
    inline bool
    phrase_parse(
        Iterator& first
      , Iterator last
      , Expr const& expr
      , Skipper const& skipper
      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip);
    template <typename Iterator, typename Expr, typename Skipper
      , typename Attr1, typename Attr2, ..., typename AttrN>
    inline bool
    phrase_parse(
        Iterator& first
      , Iterator last
      , Expr const& expr
      , Skipper const& skipper
      , Attr1& attr1, Attr2& attr2, ..., AttrN& attrN);
    template <typename Iterator, typename Expr, typename Skipper
      , typename Attr1, typename Attr2, ..., typename AttrN>
    inline bool
    phrase_parse(
        Iterator& first
      , Iterator last
      , Expr const& expr
      , Skipper const& skipper
      , BOOST_SCOPED_ENUM(skip_flag) post_skip
      , Attr1& attr1, Attr2& attr2, ..., AttrN& attrN);
}}}
[Note] Note

Начиная сSpiritV2.5 (распределяется с Boost V1.47) заполнитель<_val>может использоваться в семантических действиях, прикрепленных к компонентам парсера верхнего уровня. В этом случае<_val>относится к поставляемому атрибуту в целом. Для функций API более одного аргумента атрибута<_val>будет относиться к вектору Fusion или ссылкам на атрибуты.

Spirit.Qiфункции парсерного API, основанные на автоматическом создании соответствующего парсерного типа:

namespace boost { namespace spirit { namespace qi
{
    template <typename Iterator, typename Attr>
    inline bool
    parse(
        Iterator& first
      , Iterator last
      , Attr& attr);
    template <typename Iterator, typename Attr, typename Skipper>
    inline bool
    phrase_parse(
        Iterator& first
      , Iterator last
      , Attr& attr
      , Skipper const& skipper
      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip);
}}}

Все функции выше возвращают<true>, если ни один из участвующих парсерных компонентов не вышел из строя, и<false>в противном случае.

Максимальное количество поддерживаемых аргументов ограничено константой препроцессора<SPIRIT_ARGUMENTS_LIMIT>. Эта постоянная по умолчанию соответствует значению, определенному константой препроцессора<PHOENIX_LIMIT>(которая, в свою очередь, по умолчанию равна<10>).

[Note] Note

Вариадные функции с двумя или более атрибутами внутренне объединяют ссылки на все переданные атрибуты в<fusion::vector>и передают это как комбинированный атрибут соответствующей одной функции атрибута.

<phrase_parse>функционирует, не принимая явного<skip_flag>, как один из их аргументов вызывает пройденного шкипера после успешного совпадения парсерного выражения. Это можно предотвратить, используя другие версии этой функции при переходе<skip_flag::dont_postskip>к соответствующему аргументу.

Параметр

Описание

<Iterator>

<ForwardIterator>указывает на источник для разбора.

<Expr>

Выражение, которое может быть преобразовано в ци-парсер.

<Skipper>

Парсер пропускал белые пространства.

<Attr>

Тип атрибута, используемый для создания соответствующего типа парсера.

<Attr1>,<Attr2>, ...,<AttrN>

Один или несколько атрибутов.


PrevUpHomeNext

Статья Iterator Based Parser API раздела Spirit 2.5.2 Parser API может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Parser API ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 04:46:41/0.0065248012542725/1