如何从 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_typeBison 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值。