On Mon, 13 Nov 2023 12:33:57 +0100 Christian Schoenebeck <schoeneb...@crudebyte.com> wrote:
> > When I look up #899, NOT, I get "NOT". But when I look up #900, > > NE, I get "'<'" because that's the next element in yytname (900 - > > 255). > [...] > > Are you aware that yytname[] is indexed by "symbol-number", not by > "token- number", as it contains terminals and non-terminals? That's interesting. No, I'm not. Respectfully, how could I be? The term "symbol-number" does not appear in the Bison info manual. The %token-table directive says "?yytname[I]? is the name of the token whose internal Bison token code is I.' You tell me: what is a "Bison token code"? in Appendix A, a distinction is drawn, but not defined: -- Type: yytoken_kind_t An enum of all the ?token kinds? declared with ?%token? (*note Token Decl::). These are the return values for ?yylex?. They should not be confused with the _symbol kinds_, used internally by the parser. Well, I'm not confused, but I am flummoxed. What I have is an integer, the token returned by yylex, as derived from whatever was provided it by the header file generated by Bison. What I want is the token's name. The only translation between the two that I know of is yytname. If I'm not supposed to use yytokentype to index into yytname, and should use yytoken_kind_t instead (assuming that's what you mean), then how do I get from yytokentype to yytoken_kind_t? Asking for a friend. --jkl