如何从 Bison c++ 变体中的 yy::parser::symbol_type 获取 yy::parser::token?
How to get yy::parser::token from yy::parser::symbol_type in Bison c++ variant?
例如,我在 flex 规则中 return yy::parser::symbol_type
通过:
[a-zA-Z][a-zA-Z0-9_]* return yy::parser::make_ID(yytext);
其中ID
是我在bison中定义的token,它会生成yy::parser::token
结构。
现在我只想为 flex 的 token.l
做一些单元测试,当我调用 yy::parser::symbol_type yylex()
函数时,我没有看到任何 API 得到 yy::parser::token
来自 yy::parser::symbol_type
在 Bison c++ variant manual.
顺便说一下,在 bison 手册中,建议在 flex 规则中通过 yy::parser::make_XXX
APIs return yy::parser::symbol_type
。
或者没有这样的 API 来完成这项工作?我需要使用 symbol_type.kind()
API 来得到类似 yy::parser::symbol_type_kind::S_T_ID
?
的东西
没有 yy::parser::token
类型的对象。 struct
仅用于保存 enum token_kind_type
枚举(不是具有该值的成员;枚举本身)。见 Bison manual outline of the C++ API.
我不太明白这样做的动机,但我想这是因为希望允许没有 enum class
.
的 C++ 标准的古老版本
无论如何,我几乎可以肯定,你要的值确实是symbol_type.kind()
的return值。
例如,我在 flex 规则中 return yy::parser::symbol_type
通过:
[a-zA-Z][a-zA-Z0-9_]* return yy::parser::make_ID(yytext);
其中ID
是我在bison中定义的token,它会生成yy::parser::token
结构。
现在我只想为 flex 的 token.l
做一些单元测试,当我调用 yy::parser::symbol_type yylex()
函数时,我没有看到任何 API 得到 yy::parser::token
来自 yy::parser::symbol_type
在 Bison c++ variant manual.
顺便说一下,在 bison 手册中,建议在 flex 规则中通过 yy::parser::make_XXX
APIs return yy::parser::symbol_type
。
或者没有这样的 API 来完成这项工作?我需要使用 symbol_type.kind()
API 来得到类似 yy::parser::symbol_type_kind::S_T_ID
?
没有 yy::parser::token
类型的对象。 struct
仅用于保存 enum token_kind_type
枚举(不是具有该值的成员;枚举本身)。见 Bison manual outline of the C++ API.
我不太明白这样做的动机,但我想这是因为希望允许没有 enum class
.
无论如何,我几乎可以肯定,你要的值确实是symbol_type.kind()
的return值。