| 词法分析器迭代器接口 | ![]() |
![]() |
![]() |
任何词法分析器,在使用本库时,都必须从输入流中返回由词法分析器生成的令牌。这些令牌应符合在“令牌类型”主题中所述的概要。词法分析器类型应暴露一个符合至少是Wave(C++ 标准定义的意义上)的接口,返回令牌类型。下面的代码示例不显示此前向迭代器接口的定义,因为这高度依赖于实现。forward_iterator(C++ 标准定义的意义上)返回令牌类型的接口。下面的代码示例不显示此前向迭代器接口的定义,因为这高度依赖于实现。
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控制词法分析器需要初始化的模式。
![]() |
![]() |
版权所有 © 2003-2011 Hartmut Kaiser
根据 Boost Software License, Version 1.0 分发。(参见附带的 LICENSE_1_0.txt 文件或访问 https://boost.ac.cn/LICENSE_1_0.txt 副本)
最后更新日期2008年10月12日,星期日 20:15