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

The Lexer Interface

Boost , ,

The Lexer Iterator Interface

Введение
Волновой синопсис Лексера
Общественные типы
Функции члена

Introduction

Каждый лексер, который следует использовать в сочетании сВолноваябиблиотека, должна возвращать токены, сформированные из входного потока. Эти токены должны соответствовать синопсису, описанному в темеТип токена. Тип лексера должен подвергать интерфейс, который соответствует, по меньшей мере,forward_iterator(в смысле, определенном стандартом C++), возвращающему тип токена. Образец кода, приведенный ниже, не показывает определение этого интерфейса переднего итератора, поскольку он высоко определен реализацией.

Wave lexer synopsis (header: wave/cpplexer/cpp_lexer_interface.hpp)

    struct lex_iterator
    {
        typedef boost::wave::lex_token<> token_type;
    // Every lex_iterator should implement at least a complete 
    // forward_iterator interface (not shown here)
        typedef std::forward_iterator_tag iterator_category;
    // additional requirements
        lex_iterator();
        template <typename Iterator>
        lex_iterator(Iterator const &first, Iterator const &last
            typename token_type::position_type const &pos, 
            boost::wave::language_support language)
    };

Обратите внимание, чтоlex_iterator, определенный в заголовке библиотекиwave/cpplexer/cpp_lexer_interface.hpp, на самом деле является классом шаблонов, использующим тип токена в качестве параметра шаблона. Это опущено в синопсисе выше, потому что это деталь реализации лексера Re2C, предоставленного как часть библиотеки Wave.

Если вы хотите использовать Волна в сочетании с вашим лексирующим компонентом должна соответствовать интерфейсу, описанному выше.

Public Typedefs

Кроме типдефов, предписанных дляforward_iteratorстандартом C++, каждый лексер должен использоваться с. Волноваябиблиотека должна определять следующие типдефы:

Public typedef's defined by the boost::wave::context class
token_type

— [] — [] — [] — []. Этот тип используется в качестве возвращаемого значения основных итераторов, обеспечиваемого импульсом::волна::контекстобъекта.

Member functions

Кроме функций, которые должны быть предусмотрены дляforward_iteratorsв соответствии с мандатом C++. Стандартный, каждый лексер должен выполнять следующие функции, которые будут использоваться с. Библиотека:

Конструктор

    lex_iterator();

Конструктор по умолчанию должен построить итератор лексера, который может использоваться в качестве конечного итератора предоставленного диапазона итераторов.

    template <typename Iterator>
    lex_iterator(Iterator const &first, Iterator const &last,
        typename token_type::position_type const &pos, 
        boost::wave::language_support language);

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

Пара итераторовпервыйипоследнийдолжны представлять входной поток, который будет токенизирован данным классом лексера.

Параметрposсодержит начальную информацию о местоположении, используемую для генерации токенов.

Параметрязыкауправляет режимом reuqired, с которым лексер должен быть инициализирован.


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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:33:26/0.0058798789978027/1