问题描述
例如,我通过以下方式在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()
的返回值。