Hi Todd, > Le 9 nov. 2020 à 21:22, Todd C. Miller <todd.mil...@sudo.ws> a écrit : > > When generating a C parser, YYEMPTY is present in enum yytokentype > but there is no corresponding #define like there is for the other > values. There is a special case for YYEMPTY in b4_token_enums but > no corresponding case in b4_token_defines.
Doh... Good catch, and sorry about that. > Something like the following works, but is quite ugly. I expected > to be able to use b4_token_define([-2]) here but that produces an > error. Someone more familiar with bison's m4 macros can probably > come up with a much better fix. You are right it's ugly, but YYEMPTY is not a symbol, so it is indeed kind of ugly to deal with. Your patch is the right one. It would be slightly less ugly in master, but this bug is bad, so I will release 3.7.4 soon with the fix. This patch is therefore for the 'maint' branch. Cheers! commit d831b4ec39c4ed6edb44180f73cdfe7ebb5558b9 Author: Todd C. Miller <todd.mil...@sudo.ws> Date: Tue Nov 10 07:36:11 2020 +0100 yacc.c: fix #definition of YYEMPTY When generating a C parser, YYEMPTY is present in enum yytokentype but there is no corresponding #define like there is for the other values. There is a special case for YYEMPTY in b4_token_enums but no corresponding case in b4_token_defines. * data/skeletons/c.m4 (b4_token_defines): Do define YYEMPTY. diff --git a/NEWS b/NEWS index 32671d01..e7854838 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ GNU Bison NEWS * Noteworthy changes in release ?.? (????-??-??) [?] +** Bug fixes + + Fix missing #definition of YYEMPTY in Yacc mode. * Noteworthy changes in release 3.7.3 (2020-10-13) [stable] diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4 index 2452ed2e..50e81ee6 100644 --- a/data/skeletons/c.m4 +++ b/data/skeletons/c.m4 @@ -509,10 +509,11 @@ m4_define([b4_token_define], # ---------------- # Output the definition of the tokens. m4_define([b4_token_defines], -[b4_any_token_visible_if([/* Token kinds. */ +[[/* Token kinds. */ +#define ]b4_symbol([-2], [id])[ -2 m4_join([ ], b4_symbol_map([b4_token_define])) -])]) +]]) # b4_token_enum(TOKEN-NUM)