![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Lexer APIBoost , Spirit 2.5.2 , Reference
|
Имя |
---|
< |
< |
< |
< |
< |
Функция<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 |
---|---|
Вариадная функция с двумя или более атрибутами внутренне объединяет ссылки на все переданные атрибуты в< |
<tokenize_and_phrase_parse
>функционирует, не принимая явного<skip_flag
>, как один из их аргументов вызывает пройденного шкипера после успешного совпадения парсерного выражения. Это может быть затруднено с помощью других версий этой функции при переходе<skip_flag::dont_postskip
>к соответствующему аргументу.
Параметр |
Описание |
---|---|
< |
< |
< |
Объект лексера (определение токена). |
< |
Объект функции, называемый для каждого сгенерированного токена. |
< |
Выражение, которое может быть преобразовано в ци-парсер. |
< |
Парсер пропускал белые пространства. |
< |
Один или несколько атрибутов. |
Статья Lexer API раздела Spirit 2.5.2 Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
реклама |