如何在Bison C ++变体中从yy :: parser :: symbol_type获取yy :: parser :: token?

问题描述

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

[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()函数时,我没有看到任何API从{{1}中获取yy::parser::token }在Bison c++ variant manual中。

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

或者没有这种API可以完成这项工作?我需要使用yy::parser::make_XXX API来获得类似symbol_type.kind()的东西吗?

解决方法

没有yy::parser::token类型的对象。存在struct仅用于保存enum token_kind_type枚举(不是具有该值的成员;枚举本身)。参见Bison manual outline of the C++ API

我并不是很了解这样做的动机,但是我想它来自允许使用没有enum class的C ++标准的较早版本的愿望。

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