For example, I return yy::parser::symbol_type in flex rule via:
[a-zA-Z][a-zA-Z0-9_]* return yy::parser::make_ID(yytext);
where ID is a token I defined in bison, it will generate the yy::parser::token structure.
Now I want to do some unit test just for flex's token.l, when I invoke the yy::parser::symbol_type yylex() function, I didn't see any API to get yy::parser::token from yy::parser::symbol_type in Bison c++ variant manual.
And by the way, in bison manual, return yy::parser::symbol_type via yy::parser::make_XXX APIs in flex rule is a recommanded.
Or is there no such API to do this job ? I need to use the symbol_type.kind() API to get something like yy::parser::symbol_type_kind::S_T_ID ?
There is no object of type yy::parser::token. That struct exists only to hold the enum token_kind_type enumeration (not a member with that value; the enumeration itself). See the Bison manual outline of the C++ API.
I don't really understand the motivation for this, but I suppose it comes from a desire to allow ancient versions of the C++ standard which didn't have enum class.
In any case, I am almost certain that the value you want is indeed the return value of symbol_type.kind().