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

Lexer API

Boost , Spirit 2.5.2 , Reference

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

Библиотека предоставляет несколько бесплатных функций, чтобы сделать с помощью лексера щелчок. Эти функции имеют три формы. Первая форма,<tokenize>, упрощает использование отдельно стоящего лексера (без разбора). Вторая форма,<tokenize_and_parse>, сочетает в себе лексический шаг с разбором на уровне токена (без шкипера). Третий,<tokenize_and_phrase_parse>, также работает на уровне токенов, но также использует скип-парсер. Последние две версии могут принимать атрибуты путем ссылки, которая будет удерживать парсированные значения на успешном разборе.

Header
// forwards to <boost/spirit/home/lex/tokenize_and_parse.hpp>
#include <boost/spirit/include/lex_tokenize_and_parse.hpp>

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

// forwards to <boost/spirit/home/lex/tokenize_and_parse_attr.hpp>
#include <boost/spirit/include/lex_tokenize_and_parse_attr.hpp>

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

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

Namespace

Имя

<boost::spirit::lex::tokenize>

<boost::spirit::lex::tokenize_and_parse>

<boost::spirit::lex::tokenize_and_phrase_parse>

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

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

Synopsis

Функция<tokenize>является одной из основных функций lexer API. Он упрощает использование лексера для токенизации заданной входной последовательности. Основная цель заключается в использовании лексера для токенизации всех входных данных.

Обе функции берут пару итераторов, охватывающих базовый входной поток для сканирования, объект лексера (построенный из определений токенов) и (необязательный) функтор, который вызывается для каждого из генерируемых токенов. Если объект функции<f>не дан, то генерируемые токены будут отброшены.

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

Аргумент<f>, как ожидается, будет функциональным (вызываемым) объектом, принимающим один аргумент типа токена и возвращающим бул, указывая, следует ли отменить токенизацию. Если он вернется<false>, то и функция<tokenize>вернется<false>.

Аргумент<initial_state>заставляет лексировать, чтобы начать с данного лексера состояния. Если же это не так, то оно начинается с<"INITIAL">.

template <typename Iterator, typename Lexer>
inline bool
tokenize(
    Iterator& first
  , Iterator last
  , Lexer const& lex
  , typename Lexer::char_type const* initial_state = 0);
template <typename Iterator, typename Lexer, typename F>
inline bool
tokenize(
    Iterator& first
  , Iterator last
  , Lexer const& lex
  , F f
  , typename Lexer::char_type const* initial_state = 0);

Функция<tokenize_and_parse>является одной из основных функций lexer API. Он упрощает использование лексера в качестве основного источника токенов при анализе заданной входной последовательности.

Функции берут пару итераторов, охватывающих базовый входной поток для разбора, объект лексера (построенный из определений токенов) и объект парсера (построенный из определения грамматики парсера). Кроме того, они могут принимать атрибуты для шага парсера.

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

template <typename Iterator, typename Lexer, typename ParserExpr>
inline bool
tokenize_and_parse(
    Iterator& first
  , Iterator last
  , Lexer const& lex
  , ParserExpr const& expr)
template <typename Iterator, typename Lexer, typename ParserExpr
  , typename Attr1, typename Attr2, ..., typename AttrN>
inline bool
tokenize_and_parse(
    Iterator& first
  , Iterator last
  , Lexer const& lex
  , ParserExpr const& expr
  , Attr1 const& attr1, Attr2 const& attr2, ..., AttrN const& attrN);

Функции<tokenize_and_phrase_parse>берут пару итераторов, охватывающих базовый входной поток для разбора, объект лексера (построенный из определений токенов) и объект парсера (построенный из определения грамматики парсера). Дополнительный параметр шкипера будет использоваться в качестве парсера во время процесса парсинга. Кроме того, они могут принимать атрибуты для шага парсера.

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

template <typename Iterator, typename Lexer, typename ParserExpr
  , typename Skipper>
inline bool
tokenize_and_phrase_parse(
    Iterator& first
  , Iterator last
  , Lexer const& lex
  , ParserExpr const& expr
  , Skipper const& skipper
  , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip);
template <typename Iterator, typename Lexer, typename ParserExpr
  , typename Skipper, typename Attr1, typename Attr2, ..., typename AttrN>
inline bool
tokenize_and_phrase_parse(
    Iterator& first
  , Iterator last
  , Lexer const& lex
  , ParserExpr const& expr
  , Skipper const& skipper
  , Attr1 const& attr1, Attr2 const& attr2, ..., AttrN const& attrN);
template <typename Iterator, typename Lexer, typename ParserExpr
  , typename Skipper, typename Attr1, typename Attr2, ..., typename AttrN>
inline bool
tokenize_and_phrase_parse(
    Iterator& first
  , Iterator last
  , Lexer const& lex
  , ParserExpr const& expr
  , Skipper const& skipper
  , BOOST_SCOPED_ENUM(skip_flag) post_skip
  , Attr1 const& attr1, Attr2 const& attr2, ..., AttrN const& attrN);

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

[Note] Note

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

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

Template parameters

Параметр

Описание

<Iterator>

<ForwardIterator>указывая на основную входную последовательность для разбора.

<Lexer>

Объект лексера (определение токена).

<F>

Объект функции, называемый для каждого сгенерированного токена.

<ParserExpr>

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

<Skipper>

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

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

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


PrevUpHomeNext

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




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



:: Главная :: Reference ::


реклама


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

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