* data/m4sugar/m4sugar.m4: Update from CVS Autoconf.

* data/bison.simple, data/bison.c++: Handle the `#define' part, so
that we can move to enums for instance.
* src/output.c (token_definitions_output): Output a list of
`token-name, token-number' instead of the #define.
(output_skeleton): Name this list `b4_tokens', not `b4_tokendefs'.
This commit is contained in:
Akim Demaille
2002-03-19 07:48:47 +00:00
parent 01228b70de
commit 0d8bed5636
5 changed files with 83 additions and 53 deletions

View File

@@ -1,3 +1,12 @@
2002-03-19 Akim Demaille <akim@epita.fr>
* data/m4sugar/m4sugar.m4: Update from CVS Autoconf.
* data/bison.simple, data/bison.c++: Handle the `#define' part, so
that we can move to enums for instance.
* src/output.c (token_definitions_output): Output a list of
`token-name, token-number' instead of the #define.
(output_skeleton): Name this list `b4_tokens', not `b4_tokendefs'.
2002-03-14 Akim Demaille <akim@epita.fr> 2002-03-14 Akim Demaille <akim@epita.fr>
Use Gettext 0.11.1. Use Gettext 0.11.1.

View File

@@ -1,10 +1,18 @@
m4_divert(-1) m4_divert(-1)
# m4_define_default(MACRO, VALUE) # b4_token_defines(TOKEN-NAME, TOKEN-NUMBER)
# ------------------------------- # ------------------------------------------
# Define MACRO to VALUE, unless already defined. # Output the definition of this token as #define.
m4_define([m4_define_default], m4_define([b4_token_define],
[m4_ifdef([$1], [], [m4_define($@)])]) [#define $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], [$@])])
m4_define_default([b4_input_suffix], [.y]) m4_define_default([b4_input_suffix], [.y])
@@ -88,7 +96,7 @@ b4_copyright
b4_prologue b4_prologue
/* Tokens. */ /* Tokens. */
b4_tokendef b4_token_defines
/* Enabling traces. */ /* Enabling traces. */
#ifndef YYDEBUG #ifndef YYDEBUG

View File

@@ -1,11 +1,5 @@
m4_divert(-1) m4_divert(-1)
# m4_define_default(MACRO, VALUE)
# -------------------------------
# Define MACRO to VALUE, unless already defined.
m4_define([m4_define_default],
[m4_ifdef([$1], [], [m4_define($@)])])
m4_define_default([b4_input_suffix], [.y]) m4_define_default([b4_input_suffix], [.y])
m4_define_default([b4_output_parser_suffix], m4_define_default([b4_output_parser_suffix],
@@ -25,6 +19,22 @@ m4_define_default([b4_header_guard],
[m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name), [m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name),
[[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])]) [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])])
# b4_token_defines(TOKEN-NAME, TOKEN-NUMBER)
# ------------------------------------------
# Output the definition of this token as #define.
m4_define([b4_token_define],
[#define $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], [$@])])
m4_divert(0)dnl m4_divert(0)dnl
#output "b4_output_parser_name" #output "b4_output_parser_name"
/* A Bison parser, made from b4_filename /* A Bison parser, made from b4_filename
@@ -200,7 +210,7 @@ union yyalloc
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
/* Tokens. */ /* Tokens. */
b4_tokendef b4_token_defines(b4_tokens)
/* YYFINAL -- State number of the termination state. */ /* YYFINAL -- State number of the termination state. */
#define YYFINAL b4_final #define YYFINAL b4_final
@@ -1148,7 +1158,7 @@ m4_if(b4_defines_flag, 0, [],
#ifndef b4_header_guard #ifndef b4_header_guard
# define b4_header_guard # define b4_header_guard
b4_tokendef b4_token_defines(b4_tokens)
#ifndef YYSTYPE #ifndef YYSTYPE
typedef b4_stype typedef b4_stype

View File

@@ -2,7 +2,7 @@ divert(-1)# -*- Autoconf -*-
# This file is part of Autoconf. # This file is part of Autoconf.
# Base M4 layer. # Base M4 layer.
# Requires GNU M4. # Requires GNU M4.
# Copyright 1999, 2000, 2001 Free Software Foundation, Inc. # Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@@ -426,6 +426,16 @@ m4_define([m4_bmatch],
[$3])]) [$3])])
# m4_map(MACRO, LIST)
# -------------------
# Invoke MACRO($1), MACRO($2) etc. where $1, $2... are the elements
# of LIST (which can be lists themselves, for multiple arguments MACROs).
m4_define([m4_fst], [$1])
m4_define([m4_map],
[m4_if([$2], [[]], [],
[$1(m4_fst($2))[]dnl
m4_map([$1], m4_cdr($2))])])
## ---------------------------------------- ## ## ---------------------------------------- ##
## 6. Enhanced version of some primitives. ## ## 6. Enhanced version of some primitives. ##
@@ -466,6 +476,13 @@ m4_define([m4_do],
[$1[]m4_do(m4_shift($@))])]) [$1[]m4_do(m4_shift($@))])])
# m4_define_default(MACRO, VALUE)
# -------------------------------
# If MACRO is undefined, set it to VALUE.
m4_define([m4_define_default],
[m4_ifndef([$1], [m4_define($@)])])
# m4_default(EXP1, EXP2) # m4_default(EXP1, EXP2)
# ---------------------- # ----------------------
# Returns EXP1 if non empty, otherwise EXP2. # Returns EXP1 if non empty, otherwise EXP2.
@@ -521,16 +538,16 @@ m4_define([m4_popdef],
m4_builtin([popdef], $@)]) m4_builtin([popdef], $@)])
# m4_quote(STRING) # m4_quote(ARGS)
# ---------------- # --------------
# Return STRING quoted. # Return ARGS as a single arguments.
# #
# It is important to realize the difference between `m4_quote(exp)' and # It is important to realize the difference between `m4_quote(exp)' and
# `[exp]': in the first case you obtain the quoted *result* of the # `[exp]': in the first case you obtain the quoted *result* of the
# expansion of EXP, while in the latter you just obtain the string # expansion of EXP, while in the latter you just obtain the string
# `exp'. # `exp'.
m4_define([m4_quote], [[$*]]) m4_define([m4_quote], [[$*]])
m4_define([m4_dquote], [[[$*]]]) m4_define([m4_dquote], [[$@]])
# m4_noquote(STRING) # m4_noquote(STRING)
@@ -696,12 +713,12 @@ m4_define([m4_foreach],
# Low level macros used to define m4_foreach. # Low level macros used to define m4_foreach.
m4_define([m4_car], [[$1]]) m4_define([m4_car], [[$1]])
m4_define([m4_car2], [[$@]]) m4_define([m4_cdr], [m4_dquote(m4_shift($@))])
m4_define([_m4_foreach], m4_define([_m4_foreach],
[m4_if(m4_quote($2), [], [], [m4_if([$2], [[]], [],
[m4_define([$1], [m4_car($2)])$3[]_m4_foreach([$1], [m4_define([$1], m4_car($2))$3[]_m4_foreach([$1],
m4_car2(m4_shift($2)), m4_cdr($2),
[$3])])]) [$3])])])
@@ -1375,7 +1392,7 @@ m4_define([m4_re_escape],
# ------------ # ------------
# Regexp for `[a-zA-Z_0-9]*' # Regexp for `[a-zA-Z_0-9]*'
m4_define([m4_re_string], m4_define([m4_re_string],
m4_dquote(m4_defn([m4_cr_symbols2]))dnl m4_defn([m4_cr_symbols2])dnl
[*]dnl [*]dnl
) )
@@ -1384,7 +1401,7 @@ m4_dquote(m4_defn([m4_cr_symbols2]))dnl
# ---------- # ----------
# Regexp for `[a-zA-Z_][a-zA-Z_0-9]*' # Regexp for `[a-zA-Z_][a-zA-Z_0-9]*'
m4_define([m4_re_word], m4_define([m4_re_word],
m4_dquote(m4_defn([m4_cr_symbols1]))dnl m4_defn([m4_cr_symbols1])dnl
m4_defn([m4_re_string])dnl m4_defn([m4_re_string])dnl
) )
@@ -1554,22 +1571,6 @@ m4_define([m4_append_uniq],
[m4_append($@)])]) [m4_append($@)])])
# m4_foreach_quoted(VARIABLE, LIST, EXPRESSION)
# ---------------------------------------------
# FIXME: This macro should not exists. Currently it's used only in
# m4_wrap, which needs to be rewritten. But it's godam hard.
m4_define([m4_foreach_quoted],
[m4_pushdef([$1], [])_m4_foreach_quoted($@)m4_popdef([$1])])
# Low level macros used to define m4_foreach.
m4_define([m4_car_quoted], [[$1]])
m4_define([_m4_foreach_quoted],
[m4_if($2, [()], ,
[m4_define([$1], [m4_car_quoted$2])$3[]_m4_foreach_quoted([$1],
[(m4_shift$2)],
[$3])])])
# m4_text_wrap(STRING, [PREFIX], [FIRST-PREFIX], [WIDTH]) # m4_text_wrap(STRING, [PREFIX], [FIRST-PREFIX], [WIDTH])
# ------------------------------------------------------- # -------------------------------------------------------
# Expands into STRING wrapped to hold in WIDTH columns (default = 79). # Expands into STRING wrapped to hold in WIDTH columns (default = 79).
@@ -1617,16 +1618,16 @@ m4_Prefix1[]dnl
m4_if(m4_eval(m4_Cursor > m4_len(m4_Prefix)), m4_if(m4_eval(m4_Cursor > m4_len(m4_Prefix)),
1, [m4_define([m4_Cursor], m4_len(m4_Prefix)) 1, [m4_define([m4_Cursor], m4_len(m4_Prefix))
m4_Prefix])[]dnl m4_Prefix])[]dnl
m4_foreach_quoted([m4_Word], (m4_split(m4_normalize([$1]))), m4_foreach([m4_Word], m4_quote(m4_split(m4_normalize([$1]))),
[m4_define([m4_Cursor], m4_eval(m4_Cursor + m4_len(m4_Word) + 1))dnl [m4_define([m4_Cursor], m4_eval(m4_Cursor + m4_len(m4_defn([m4_Word])) + 1))dnl
dnl New line if too long, else insert a space unless it is the first dnl New line if too long, else insert a space unless it is the first
dnl of the words. dnl of the words.
m4_if(m4_eval(m4_Cursor > m4_Width), m4_if(m4_eval(m4_Cursor > m4_Width),
1, [m4_define([m4_Cursor], 1, [m4_define([m4_Cursor],
m4_eval(m4_len(m4_Prefix) + m4_len(m4_Word) + 1))] m4_eval(m4_len(m4_Prefix) + m4_len(m4_defn([m4_Word])) + 1))]
m4_Prefix, m4_Prefix,
[m4_Separator])[]dnl [m4_Separator])[]dnl
m4_Word[]dnl m4_defn([m4_Word])[]dnl
m4_define([m4_Separator], [ ])])dnl m4_define([m4_Separator], [ ])])dnl
m4_popdef([m4_Separator])dnl m4_popdef([m4_Separator])dnl
m4_popdef([m4_Cursor])dnl m4_popdef([m4_Cursor])dnl

View File

@@ -568,6 +568,7 @@ void
token_definitions_output (FILE *out) token_definitions_output (FILE *out)
{ {
int i; int i;
int first = 1;
for (i = 0; i < ntokens; ++i) for (i = 0; i < ntokens; ++i)
{ {
bucket *symbol = symbols[i]; bucket *symbol = symbols[i];
@@ -594,12 +595,13 @@ token_definitions_output (FILE *out)
if (strchr (symbol->tag, '.') || strchr (symbol->tag, '$')) if (strchr (symbol->tag, '.') || strchr (symbol->tag, '$'))
continue; continue;
fprintf (out, "# define %s\t%d\n", fprintf (out, "%s [[[%s]], [%d]]",
symbol->tag, number); first ? "" : ",\n", symbol->tag, number);
if (semantic_parser) if (semantic_parser)
/* FIXME: This is probably wrong, and should be just as /* FIXME: This is probably wrong, and should be just as
above. --akim. */ above. --akim. */
fprintf (out, "# define T%s\t%d\n", symbol->tag, symbol->value); fprintf (out, "# define T%s\t%d\n", symbol->tag, symbol->value);
first = 0;
} }
} }
@@ -988,9 +990,9 @@ output_skeleton (void)
guards_output (out); guards_output (out);
fputs ("]])\n\n", out); fputs ("]])\n\n", out);
fputs ("m4_define([b4_tokendef], \n[[", out); fputs ("m4_define([b4_tokens], \n[", out);
token_definitions_output (out); token_definitions_output (out);
fputs ("]])\n\n", out); fputs ("])\n\n", out);
muscles_m4_output (out); muscles_m4_output (out);