* data/bison.simple (b4_token_enum): New.

(b4_token_defines): Use it to output tokens both as #define and
enums.
Suggested by Paul Eggert.
* src/output.c (token_definitions_output): Don't output spurious
white spaces.
This commit is contained in:
Akim Demaille
2002-05-03 08:42:48 +00:00
parent 1f41899519
commit 83ccf991a6
5 changed files with 35 additions and 26 deletions

View File

@@ -1,3 +1,12 @@
2002-05-03 Akim Demaille <akim@epita.fr>
* data/bison.simple (b4_token_enum): New.
(b4_token_defines): Use it to output tokens both as #define and
enums.
Suggested by Paul Eggert.
* src/output.c (token_definitions_output): Don't output spurious
white spaces.
2002-05-03 Akim Demaille <akim@epita.fr>
* data/m4sugar/m4sugar.m4: Update from CVS Autoconf.

20
TODO
View File

@@ -34,26 +34,6 @@ Paul notes:
PDP-10 ports :-) but they should probably be documented
somewhere.
* Using enums instead of int for tokens.
Paul suggests:
#ifndef YYTOKENTYPE
# if defined (__STDC__) || defined (__cplusplus)
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
FOO = 256,
BAR,
...
};
/* POSIX requires `int' for tokens in interfaces. */
# define YYTOKENTYPE int
# endif
#endif
#define FOO 256
#define BAR 257
...
* Output directory
Akim:

View File

@@ -50,8 +50,8 @@ m4_define([b4_rhs_location],
[location_stack_@<:@m4_eval([$1 - $2])@:>@])
# b4_token_defines(TOKEN-NAME, TOKEN-NUMBER)
# ------------------------------------------
# b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
# -----------------------------------------
# Output the definition of this token as #define.
m4_define([b4_token_define],
[#define $1 $2

View File

@@ -70,19 +70,39 @@ m4_define_default([b4_header_guard],
[[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])])
# b4_token_defines(TOKEN-NAME, TOKEN-NUMBER)
# ------------------------------------------
# b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
# -----------------------------------------
# Output the definition of this token as #define.
m4_define([b4_token_define],
[#define $1 $2
])
# b4_token_enum(TOKEN-NAME, TOKEN-NUMBER)
# ---------------------------------------
# Output the definition of this token as an enum.
m4_define([b4_token_enum],
[enum $1 = $2])
# b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
# -------------------------------------------------------
# Output the definition of the tokens as #define.
m4_define([b4_token_defines],
[m4_map([b4_token_define], [$@])])
[#ifndef YYTOKENTYPE
# if defined (__STDC__) || defined (__cplusplus)
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
m4_map_sep([ b4_token_enum], [,
],
[$@])
};
/* POSIX requires `int' for tokens in interfaces. */
# define YYTOKENTYPE int
# endif
#endif
m4_map([b4_token_define], [$@])])
m4_divert(0)dnl

View File

@@ -603,7 +603,7 @@ token_definitions_output (FILE *out)
if (strchr (symbol->tag, '.') || strchr (symbol->tag, '$'))
continue;
fprintf (out, "%s [[[%s]], [%d]]",
fprintf (out, "%s[[[%s]], [%d]]",
first ? "" : ",\n", symbol->tag, number);
first = 0;
}