词法分析器迭代器接口

介绍
Wave 词法分析器概要
公共类型定义
成员函数

引言

任何词法分析器,在使用本库时,都必须从输入流中返回由词法分析器生成的令牌。这些令牌应符合在“令牌类型”主题中所述的概要。词法分析器类型应暴露一个符合至少是Wave(C++ 标准定义的意义上)的接口,返回令牌类型。下面的代码示例不显示此前向迭代器接口的定义,因为这高度依赖于实现。forward_iterator(C++ 标准定义的意义上)返回令牌类型的接口。下面的代码示例不显示此前向迭代器接口的定义,因为这高度依赖于实现。

Wave 词法分析器概要(头文件: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)
    };

请注意,在本库头文件 wave/cpplexer/cpp_lexer_interface.hpp 中定义的lex_iterator实际上是一个模板类,它将要使用的令牌类型作为其模板参数。这在上面的概要中被省略了,因为它是 Wave 库提供的 Re2C 词法分析器的实现细节。

如果您想在 Wave 中使用您自己的词法分析组件,该组件只需符合上面描述的接口即可。

公共类型定义

除了 C++ 标准为forward_iterator强制要求的类型定义之外,任何与本库一起使用的词法分析器都应定义以下类型定义:Wave与本库一起使用的词法分析器都应定义以下类型定义:

boost::wave::context
定义的公共类型定义

标记token_typeboost::wave::context由词法分析器返回的类型。此类型用作本库提供的迭代器的返回值。

成员函数

除了 C++ 标准为forward_iterators强制要求提供的函数之外,任何与本库一起使用的词法分析器都必须实现以下函数:Wave与本库一起使用的词法分析器都必须实现以下函数:

构造函数

    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);

第二个构造函数应构造一个词法分析器迭代器,该迭代器可用作遍历由词法分析器类生成的令牌序列的迭代器。

一对迭代器firstandlast应代表由给定词法分析器类进行标记化的输入流。

参数pos包含用于令牌生成的初始位置信息。

参数language控制词法分析器需要初始化的模式。