On Friday, November 10, 2023 1:57:59 AM CET James K. Lowden wrote:
> I can't seem to look up token names in yytname correctly using enum
> yytokentype.
>
> At the end of enum yytokentype, I have
>
> END_UNSTRING = 893, /* END_UNSTRING */
> END_WRITE = 894, /* END_WRITE */
> END_IF = 895, /* END_IF */
> THRU = 896, /* THRU */
> OR = 897, /* OR */
> AND = 898, /* AND */
> NOT = 899, /* NOT */
> NE = 900, /* NE */
> LE = 901, /* LE */
> GE = 902, /* GE */
> NEG = 903, /* NEG */
> POW = 904 /* POW */
>
> but in yytname, where we transition from terminals to nonterminals, I
> have this:
>
> "END_UNSTRING",
> "END_WRITE",
> "END_IF",
> "THRU",
> "OR",
> "AND",
> "NOT",
> "'<'",
> "'>'",
> "'='",
> "NE",
> "LE",
> "GE",
> "'-'",
> "'+'",
> "'*'",
> "'/'",
> "NEG",
> "POW",
> "'.'",
> "'&'",
> "'S'",
> "'('",
> "')'",
> "':'",
> "$accept",
> "top",
> "programs",
>
> 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?
/Christian