0

例如,我yy::parser::symbol_type通过以下方式返回 flex 规则:

[a-zA-Z][a-zA-Z0-9_]*  return yy::parser::make_ID(yytext);

我在野牛中定义的令牌在哪里ID,它将生成yy::parser::token结构。

现在我想为 flex 做一些单元测试token.l,当我调用该yy::parser::symbol_type yylex()函数时,我没有yy::parser::tokenBison c++ 变体手册yy::parser::symbol_type中看到任何 API 。

顺便说一句,在野牛手册中,建议yy::parser::symbol_type通过yy::parser::make_XXXflex 规则中的 API 返回。

还是没有这样的 API 来完成这项工作?我需要使用symbol_type.kind()API 来获得类似的东西yy::parser::symbol_type_kind::S_T_ID

4

1 回答 1

2

没有类型的对象yy::parser::token。那struct只是为了保存enum token_kind_type枚举(不是具有该值的成员;枚举本身)。请参阅C++ API 的 Bison 手册大纲

我并不真正理解这样做的动机,但我想它来自于允许 C++ 标准的古代版本没有enum class.

无论如何,我几乎可以肯定你想要的值确实是symbol_type.kind().

于 2020-08-27T14:54:30.940 回答