| 令牌类型 | ![]() |
![]() |
![]() |
中的令牌类型Wave是信息的主要载体。它是通过解引用词法分析组件暴露的迭代器和预处理器组件暴露的迭代器返回的。令牌最初由词法分析器生成(“一种将解析对象在词法上转换为一组更适合后续解析的对象(称为令牌)的实体”)。Wave 库包含两个不同且可互换的 C++ 词法分析器,它们可以用作开发自己的应用程序的起点。词法分析器生成的令牌由预处理引擎(宏展开、包含文件处理等)转换,然后返回给 Wave 的用户。Wave库。
只要您自己的词法分析器实现了某些必需的接口,您就可以将其与任意令牌类型结合使用。必需的令牌类型接口如下所述,并且由wave::cpplexer::lex_token模板实现,所需的词法分析器接口在此处描述。
下文描述了 Wave 库中预定义的令牌类型,该令牌类型也与 Wave 库中包含的两个预定义的 C++ 词法分析器结合使用。如果您需要使用自己的令牌类型,则必须实现下面描述的接口。Wave库,该库与其中包含的两个预定义的 C++ 词法分析器结合使用。Wave库中也包含的两个预定义的 C++ 词法分析器。如果您需要使用自己的令牌类型,则必须实现下面描述的接口。
namespace boost { namespace wave { namespace cpplexer { template <typename Position> class lex_token { public: typedef std::basic_string<char> string_type; typedef Position position_type; lex_token(); lex_token(token_id id, string_type const &value, PositionT const &pos); // accessors operator token_id() const; string_type const &get_value() const; position_type const &get_position() const; void set_token_id (token_id id); void set_value (string_type const &newval); void set_position (position_type const &pos); }; } // namespace cpplexer } // namespace wave } // namespace boost
预定义的令牌类型使用模板参数位置,它允许指定用于承载生成令牌中的文件位置信息的数据类型。您自己的令牌类型不需要此位置模板参数,但请注意,令牌类型在任何情况下都需要具有嵌入式类型定义position_type(如下所示)。
令牌类型需要定义两个嵌入式类型string_typeandposition_type来填充。该string_type必须是与std::basic_string<>class.
兼容的类型。此类型应至少包含令牌识别位置的文件名、行号和列号。对于预定义的令牌类型,它默认为一个简单的 `file_position` 模板类,在此处进行了描述。请注意,您自己的position_type也应遵循 `file_position` 模板所描述的接口。
lex_token();
lex_token(token_id id,
string_t const &value,
PositionT const &pos);
第一个(默认)构造函数用于生成流结束令牌,该令牌用于指示底层输入流的结束。
第二个构造函数使用令牌 ID(有关有效令牌 ID 列表,请在此处查看)、其值的字符串表示以及文件位置来初始化新创建的令牌对象,该文件位置描述了令牌在输入流中的识别位置。
operator token_id() const;
允许访问令牌的令牌 ID。此访问器允许 Wave 生成的令牌流直接使用 Wave 生成的令牌流。Spirit解析器。在此处描述了可能的令牌 ID。在此处查看令牌 ID。在此处查看令牌 ID。
此函数在任何情况下都不会抛出异常。
string_type const &get_value() const;
返回令牌在输入流中识别的值。即使对于常量令牌(如关键字或运算符等),返回的值也反映了在输入流中找到的字符序列。
此函数在任何情况下都不会抛出异常。
Position const &get_position() const;
返回令牌在输入流中的位置,令牌在此处被识别。该位置包含有关令牌的文件名、行号和列号的信息。默认情况下,Wave 库为此目的使用 `file_position` 模板,在此处更详细地进行了描述。Wave库使用 `file_position` 模板来完成此目的,该模板在此处有更详细的描述。
此函数在任何情况下都不会抛出异常。
void set_token_id(token_id id);
将令牌的令牌 ID 更改为新值。在此处描述了可能的令牌 ID。此函数对于库用户来说可能价值不大,但在某些情况下对于预处理引擎的正确运行是必需的。
此函数在任何情况下都不会抛出异常。
void set_value(string_type const &newval);
将存储在令牌中的值更改为新值。此函数对于库用户来说可能价值不大,但在某些情况下对于预处理引擎的正确运行是必需的。
void set_position(Position const &newpos);
将存储在令牌中的位置更改为新值。这用于实现例如实现#line指令相反。
![]() |
![]() |
版权所有 © 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