]> git.saurik.com Git - bison.git/blobdiff - ChangeLog
* configure.bat: Remove, completely obsolete.
[bison.git] / ChangeLog
index ba506efecf2dc645266af1cb08f6a58b4f9f41d9..26c6517c1f16d17854da1d7f29f6b5e528730a69 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2002-05-03  Akim Demaille  <akim@epita.fr>
+
+       * configure.bat: Remove, completely obsolete.
+       * Makefile.am (EXTRA_DIST): Adjust.
+       Don't distribute config.rpath...
+       * config/Makefile.am (EXTRA_DIST): Do it.
+
+2002-05-03  Akim Demaille  <akim@epita.fr>
+
+       * configure.in (GETTEXT_VERSION): New.
+       Suggested by Bruno Haible for the forthcoming Gettext 0.10.3.
+
+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.
+
+2002-05-02  Robert Anisko  <robert@lrde.epita.fr>
+
+       * data/bison.c++: Adapt expansion of $s and @s to the C++ parser.
+       Update the stack class, give a try to deque as the default container.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+       * data/bison.simple (yyparse): Do not implement @$ = @1.
+       (YYLLOC_DEFAULT): Adjust to do it.
+       * doc/bison.texinfo (Location Default Action): Fix.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+       * src/reader.c (parse_braces): Merge into...
+       (parse_action): this.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+       * configure.in (ALL_LINGUAS): Remove.
+       * po/LINGUAS, hr.po: New.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+       Remove the so called hairy (semantic) parsers.
+
+       * src/system.h (EXT_GUARD_C, EXT_STYPE_H): Remove.
+       * src/gram.h, src/gram.c (semantic_parser): Remove.
+       (rule_t): Remove the guard and guard_line members.
+       * src/lex.h (token_t): remove tok_guard.
+       * src/options.c (option_table): Remove %guard and %semantic_parser
+       support.
+       * src/output.c, src/output.h (guards_output): Remove.
+       (prepare): Adjust.
+       (token_definitions_output): Don't output the `T'
+       tokens (???).
+       (output_skeleton): Don't output the guards.
+       * src/files.c, src/files.c (attrsfile): Remove.
+       * src/reader.c (symbol_list): Remove the guard and guard_line
+       members.
+       Adjust dependencies.
+       (parse_guard): Remove.
+       * data/bison.hairy: Remove.
+       * doc/bison.texinfo (Environment Variables): Remove occurrences of
+       BISON_HAIRY.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+       * src/reader.c (copy_at, copy_dollarm parse_braces, parse_action)
+       (parse_guard): Rename the formal argument `stack_offset' as
+       `rule_length', which is more readable.
+       Adjust callers.
+       (copy_at, copy_dollar): Instead of outputting the hard coded
+       values of $$, $n and so forth, output invocation to b4_lhs_value,
+       b4_lhs_location, b4_rhs_value, and b4_rhs_location.
+       Note: this patch partially drops `semantic-parser' support: it
+       always does `rule_length - n', where semantic parsers ought to
+       always use `-n'.
+       * data/bison.simple, data/bison.c++ (b4_lhs_value)
+       (b4_lhs_location, b4_rhs_value, and b4_rhs_location: New.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+       * configure.in (AC_INIT): Bump to 1.49b.
+       (AM_INIT_AUTOMAKE): Short invocation.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+       Version 1.49a.
+
+2002-05-01  Akim Demaille  <akim@epita.fr>
+
+       * src/skeleton.h: Remove.
+
+2002-05-01  Akim Demaille  <akim@epita.fr>
+
+       * src/skeleton.h: Fix the #endif.
+       Reported by Magnus Fromreide.
+
+2002-04-26  Paul Eggert  <eggert@twinsun.com>
+
+       * data/bison.simple (YYSTYPE_IS_TRIVIAL, YYLTYPE_IS_TRIVIAL):
+       Define if we define YYSTYPE and YYLTYPE, respectively.
+       (YYCOPY): Fix [] quoting problem in the non-GCC case.
+
+2002-04-25  Robert Anisko  <robert@lrde.epita.fr>
+
+       * src/scan-skel.l: Postprocess quadrigraphs.
+
+       * src/reader.c (copy_character): New function, used to output
+       single characters while replacing `[' and `]' with quadrigraphs, to
+       avoid troubles with M4 quotes.
+       (copy_comment): Output characters with copy_character.
+       (read_additionnal_code): Likewise.
+       (copy_string2): Likewise.
+       (copy_definition): Likewise.
+
+       * tests/calc.at: Exercise M4 quoting.
+
+2002-04-25  Akim Demaille  <akim@epita.fr>
+
+       * tests/sets.at (AT_EXTRACT_SETS): Sed portability issue: no space
+       between `!' and the command.
+       Reported by Paul Eggert.
+
+2002-04-24  Robert Anisko  <robert@lrde.epita.fr>
+
+       * tests/calc.at: Exercise prologue splitting.
+
+       * data/bison.simple, data/bison.c++: Use `b4_pre_prologue' and
+       `b4_post_prologue' instead of `b4_prologue'.
+
+       * src/output.c (prepare): Add the `pre_prologue' and `post_prologue'
+       muscles.
+       (output): Free pre_prologue_obstack and post_prologue_obstack.
+       * src/files.h, src/files.c (attrs_obstack): Remove.
+       (pre_prologue_obstack, post_prologue_obstack): New.
+       * src/reader.c (copy_definition): Add a parameter to specify the
+       obstack to fill, instead of using attrs_obstack unconditionally.
+       (read_declarations): Pass pre_prologue_obstack to copy_definition if
+       `%union' has not yet been seen, pass post_prologue_obstack otherwise.
+
+2002-04-23  Paul Eggert  <eggert@twinsun.com>
+
+       * data/bison.simple: Remove unnecessary commentary and white
+       space differences from 1_29-branch.
+       Depend on YYERROR_VERBOSE, not defined (YYERROR_VERBOSE).
+
+       (union yyalloc, YYSTACK_GAP_MAX, YYSTACK_BYTES, YYCOPY,
+       YYSTACK_RELOCATE): Do not define if yyoverflow is defined, or
+       if this is a C++ parser and YYSTYPE or YYLTYPE has nontrivial
+       constructors or destructors.
+
+       (yyparse) [! defined YYSTACK_RELOCATE]: Do not relocate the stack.
+
+2002-04-23  Akim Demaille  <akim@epita.fr>
+
+       * tests/sets.at (AT_EXTRACT_SETS): Don't use 8 char long sed labels.
+       * tests/synclines.at (AT_TEST_SYNCLINE): Be robust to GCC's
+       location with columns.
+       * tests/conflicts.at (%nonassoc and eof): Don't use `error.h'.
+       All reported by Paul Eggert.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+       * src/reduce.c (dump_grammar): Move to...
+       * src/gram.h, src/gram.c (grammar_dump): here.
+       Be sure to separate long item numbers.
+       Don't read the members of a rule's prec if its nil.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+       * src/output.c (table_size, table_grow): New.
+       (MAXTABLE): Remove, replace uses with table_size.
+       (pack_vector): Instead of dying when the table is too big, grow it.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+       * data/bison.simple (yyr1): Its type is that of a token number.
+       * data/bison.c++ (r1_): Likewise.
+       * tests/regression.at (Web2c Actions): Adjust.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+       * src/reader.c (token_translations_init): 256 is now the default
+       value for the error token, i.e., it will be assigned another
+       number if the user assigned 256 to one of her tokens.
+       (reader): Don't force 256 to error.
+       * doc/bison.texinfo (Symbols): Adjust.
+       * tests/torture.at (AT_DATA_HORIZONTAL_GRAMMAR)
+       (AT_DATA_TRIANGULAR_GRAMMAR): Number the tokens as 1, 2, 3
+       etc. instead of 10, 20, 30 (which was used to `jump' over error
+       (256) and undefined (2)).
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+       Propagate more token_number_t.
+
+       * src/gram.h (token_number_as_item_number)
+       (item_number_as_token_number): New.
+       * src/output.c (GENERATE_OUTPUT_TABLE): New.
+       Use it to create output_item_number_table and
+       output_token_number_table.
+       * src/LR0.c, src/derives.c, src/gram.c, src/gram.h, src/lalr.c,
+       * src/lex.c, src/nullable.c, src/output.c, src/print.c,
+       * src/print_graph.c, src/reader.c, src/reduce.c, src/state.h,
+       * src/symtab.c, src/symtab.h: Use token_number_t instead of shorts.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+       * src/output.h, src/output.c (get_lines_number): Remove.
+
+2002-04-19  Akim Demaille  <akim@epita.fr>
+
+       * doc/bison.texinfo (Actions): Make clear that `|' is not the same
+       as Lex/Flex'.
+       (Debugging): More details about enabling the debugging features.
+       (Table of Symbols): Describe $$, $n, @$, and @n.
+       Suggested by Tim Josling.
+
+2002-04-19  Akim Demaille  <akim@epita.fr>
+
+       * doc/bison.texinfo: Remove the uses of the obsolete @refill.
+
+2002-04-10  Akim Demaille  <akim@epita.fr>
+
+       * src/system.h: Rely on HAVE_LIMITS_H.
+       Suggested by Paul Eggert.
+
+2002-04-09  Akim Demaille  <akim@epita.fr>
+
+       * tests/calc.at (_AT_CHECK_CALC_ERROR): Receive as argument the
+       full stderr, and strip it according to the bison options, instead
+       of composing the error message from different bits.
+       This makes it easier to check for several error messages.
+       Adjust all the invocations.
+       Add an invocation exercising the error token.
+       Add an invocation demonstrating a stupid error message.
+       (_AT_DATA_CALC_Y): Follow the GCS: initial column is 1, not 0.
+       Adjust the tests.
+       Error message are for stderr, not stdout.
+
+2002-04-09  Akim Demaille  <akim@epita.fr>
+
+       * src/gram.h, src/gram.c (error_token_number): Remove, use
+       errtoken->number.
+       * src/reader.c (reader): Don't specify the user token number (2)
+       for $undefined, as it uselessly prevents using it.
+       * src/gram.h (token_number_t): Move to...
+       * src/symtab.h: here.
+       (state_t.number): Is a token_number_t.
+       * src/print.c, src/reader.c: Use undeftoken->number instead of
+       hard coded 2.
+       (Even though this 2 is not the same as above: the number of the
+       undeftoken remains being 2, it is its user token number which
+       might not be 2).
+       * src/output.c (prepare_tokens): Rename the `maxtok' muscle with
+       `user_token_number_max'.
+       Output `undef_token_number'.
+       * data/bison.simple, data/bison.c++: Use them.
+       Be sure to map invalid yylex return values to
+       `undef_token_number'.  This saves us from gratuitous SEGV.
+
+       * tests/conflicts.at (Solved SR Conflicts)
+       (Unresolved SR Conflicts): Adjust.
+       * tests/regression.at (Web2c Actions): Adjust.
+
+2002-04-08  Akim Demaille  <akim@epita.fr>
+
+       * data/bison.c++: s/b4_item_number_max/b4_rhs_number_max/.
+       Adding #line.
+       Remove the duplicate `typedefs'.
+       (RhsNumberType): Fix the declaration and various other typos.
+       Use __ofile__.
+       * data/bison.simple: Use __ofile__.
+       * src/scan-skel.l: Handle __ofile__.
+
+2002-04-08  Akim Demaille  <akim@epita.fr>
+
+       * src/gram.h (item_number_t): New, the type of item numbers in
+       RITEM.  Note that it must be able to code symbol numbers as
+       positive number, and the negation of rule numbers as negative
+       numbers.
+       Adjust all dependencies (pretty many).
+       * src/reduce.c (rule): Remove this `short *' pointer: use
+       item_number_t.
+       * src/system.h (MINSHORT, MAXSHORT): Remove.
+       Include `limits.h'.
+       Adjust dependencies to using SHRT_MAX and SHRT_MIN.
+       (shortcpy): Remove.
+       (MAXTABLE): Move to...
+       * src/output.c (MAXTABLE): here.
+       (prepare_rules): Use output_int_table to output rhs.
+       * data/bison.simple, data/bison.c++: Adjust.
+       * tests/torture.at (Big triangle): Move the limit from 254 to
+       500.
+       * tests/regression.at (Web2c Actions): Ajust.
+
+       Trying with bigger grammars shows various phenomena: at 3000 (28Mb
+       of grammar file) bison is killed by my system, at 2000 (12Mb) bison
+       passes, but produces negative #line number, once fixed, GCC is
+       killed while compiling 14Mb, at 1500 (6.7 Mb of grammar, 8.2Mb of
+       C), it passes.
+       * src/state.h (state_h): Code input lines on ints, not shorts.
+
+2002-04-08  Akim Demaille  <akim@epita.fr>
+
+       * src/reduce.c (reduce_grammar): First reduce the nonterminals,
+       and then the grammar.
+
+2002-04-08  Akim Demaille  <akim@epita.fr>
+
+       * src/system.h: No longer using strndup.
+
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
-       * src/gram.h, src/gram.c (rules_swap): New.
-       (ritem_longest_rhs): Use it.
-       * src/gram.h (rule_t): `number' is a new member.
-       * src/reader.c (packgram): Set it.
-       * src/reduce.c (reduce_grammar_tables): Move the useless rules at
-       the end of `rules', and count them out of `nrules'.
-       (reduce_output, dump_grammar): Adjust.
-       * src/print.c (print_grammar): It is no longer needed to check for
-       the usefulness of a rule, as useless rules are beyond `nrules + 1'.
-       * tests/reduce.at (Reduced Automaton): New test.
+       * src/muscle_tab.h (MUSCLE_INSERT_LONG_INT): New.
+       * src/output.c (output_table_data): Return the longest number.
+       (prepare_tokens): Output `token_number_max').
+       * data/bison.simple, data/bison.c++ (b4_sint_type, b4_uint_type):
+       New.
+       Use them to define yy_token_number_type/TokenNumberType.
+       Use this type for yytranslate.
+       * tests/torture.at (Big triangle): Push the limit from 124 to
+       253.
+       * tests/regression.at (Web2c Actions): Adjust.
 
-diff -ur -x*.po -x Makefile -x *.pot -x configure* -x TODO bison-1.49a/src/gram.c bison/src/gram.c
---- bison-1.49a/src/gram.c     Sun Apr  7 17:36:56 2002
-+++ bison/src/gram.c   Sun Apr  7 18:36:42 2002
-2input grammar variables for bison,
--   Copyright 1984, 1986, 1989, 2001 Free Software Foundation, Inc.
-+   Copyright 1984, 1986, 1989, 2001, 2002 Free Software Foundation, Inc.
-
-       This file is part of Bison, the GNU Compiler Compiler.
-
-1_number;
-
-
-+/*--------------------------------------.
-+| Return the number of symbols in RHS.  |
-+`--------------------------------------*/
-+
-+int
-+rule_rhs_length (rule_t *rule)
-+{
-+  int res = 0;
-+  short *rhsp;
-+  for (rhsp = rule->rhs; *rhsp >= 0; ++rhsp)
-+    ++res;
-+  return res;
-+}
-+
-+
-       /*------------------------.
-       | Dump RITEM for traces.  |
-       `------------------------*/
-6ngest_rhs (void)
-       {
--  int length;
--  int max;
-+  int max = 0;
-       int i;
-
--  length = 0;
--  max = 0;
--  for (i = 0; i < nritems; ++i)
--    if (ritem[i] >= 0)
--      {
--      length++;
--      }
--    else
--      {
--      if (length > max)
--        max = length;
--      length = 0;
--      }
-+  for (i = 1; i < nrules + 1; ++i)
-+    {
-+      int length = rule_rhs_length (&rules[i]);
-+      if (length > max)
-+      max = length;
-+    }
-
-       return max;
-       }
-diff -ur -x*.po -x Makefile -x *.pot -x configure* -x TODO bison-1.49a/src/gram.h bison/src/gram.h
---- bison-1.49a/src/gram.h     Sun Apr  7 17:55:00 2002
-+++ bison/src/gram.h   Sun Apr  7 18:36:42 2002
-0ule_s
-       {
-+  /* The number of the rule in the source.  It is usually the index in
-+     RULES too, except if there are useless rules.  */
-+  short number;
-+
-       short lhs;
-       short *rhs;
-       short prec;
-0r_token_number;
-
-+/* Report the length of the RHS. */
-+int rule_rhs_length PARAMS ((rule_t *rule));
-
-       /* Dump RITEM for traces. */
-       void ritem_print PARAMS ((FILE *out));
-diff -ur -x*.po -x Makefile -x *.pot -x configure* -x TODO bison-1.49a/src/print.c bison/src/print.c
---- bison-1.49a/src/print.c    Sun Apr  7 17:55:00 2002
-+++ bison/src/print.c  Sun Apr  7 18:19:39 2002
-17%s\n\n", _("Grammar"));
-       fprintf (out, "  %s\n", _("Number, Line, Rule"));
-       for (i = 1; i < nrules + 1; i++)
--    /* Don't print rules disabled in reduce_grammar_tables.  */
--    if (rules[i].useful)
--      {
--      fprintf (out, _("  %3d %3d %s ->"),
--               i - 1, rules[i].line, escape (symbols[rules[i].lhs]->tag));
--      rule = rules[i].rhs;
--      if (*rule >= 0)
--        while (*rule >= 0)
--          fprintf (out, " %s", escape (symbols[*rule++]->tag));
--      else
--        fprintf (out, " /* %s */", _("empty"));
--      fputc ('\n', out);
--      }
-+    {
-+      fprintf (out, _("  %3d %3d %s ->"),
-+             i - 1, rules[i].line, escape (symbols[rules[i].lhs]->tag));
-+      rule = rules[i].rhs;
-+      if (*rule >= 0)
-+      while (*rule >= 0)
-+        fprintf (out, " %s", escape (symbols[*rule++]->tag));
-+      else
-+      fprintf (out, " /* %s */", _("empty"));
-+      fputc ('\n', out);
-+    }
-       fputs ("\n\n", out);
-
-
-diff -ur -x*.po -x Makefile -x *.pot -x configure* -x TODO bison-1.49a/src/reader.c bison/src/reader.c
---- bison-1.49a/src/reader.c   Sun Apr  7 17:56:13 2002
-+++ bison/src/reader.c Sun Apr  7 18:19:39 2002
-@@ -1687,6 +1687,7 @@
-       while (p)
-       {
-       bucket *ruleprec = p->ruleprec;
-+      rules[ruleno].number = ruleno;
-       rules[ruleno].lhs = p->sym->number;
-       rules[ruleno].rhs = ritem + itemno;
-       rules[ruleno].line = p->line;
-diff -ur -x*.po -x Makefile -x *.pot -x configure* -x TODO bison-1.49a/src/reduce.c bison/src/reduce.c
---- bison-1.49a/src/reduce.c   Sun Apr  7 17:55:00 2002
-+++ bison/src/reduce.c Sun Apr  7 18:36:42 2002
-2V1, rules[i].precsym);
-       }
+2002-04-07  Akim Demaille  <akim@epita.fr>
 
-+
-+/*-------------------------------------------------------------------.
-+| Put the useless productions at the end of RULES, and adjust NRULES |
-+| accordingly.                                                       |
-+`-------------------------------------------------------------------*/
-+
-       static void
-       reduce_grammar_tables (void)
-       {
--  /* This is turned off because we would need to change the numbers in
--     the case statements in the actions file.
--
--     We don't disable it via CPP so that it is still checked with the
--     rest of the code, to avoid its becoming completely obsolete.
--
--     FIXME: I think the comment above demonstrates this code must be
--     turned off for *semantic* parser, not in the general case.  Try
--     to understand this better --akim.  */
--
--  if (0)
--    /* remove useless productions */
--    if (nuseless_productions > 0)
--      {
--      short np, pn, ni, pi;
--
--      np = 0;
--      ni = 0;
--      for (pn = 1; pn < nrules + 1; pn++)
--        if (bitset_test (P, pn))
--          {
--            np++;
--            if (pn != np)
--              {
--                rules[np].lhs   = rules[pn].lhs;
--                rules[np].line  = rules[pn].line;
--                rules[np].prec  = rules[pn].prec;
--                rules[np].assoc = rules[pn].assoc;
--                rules[np].rhs   = rules[pn].rhs;
--                if (rules[np].rhs - ritem != ni)
--                  {
--                    pi = rules[np].rhs - ritem;
--                    rules[np].rhs = ritem + ni;
--                    while (ritem[pi] >= 0)
--                      ritem[ni++] = ritem[pi++];
--                    ritem[ni++] = -np;
--                  }
--              }
--            else
--              {
--                while (ritem[ni++] >= 0)
--                  /* Nothing. */;
--              }
--          }
--
--      ritem[ni] = 0;
--      nrules -= nuseless_productions;
--      nitems = ni;
--      nritems = ni;
-+  /* Flag useless productions.  */
-+  {
-+    int pn;
-+    for (pn = 1; pn < nrules + 1; pn++)
-+      rules[pn].useful = bitset_test (P, pn);
-+  }
-
--      /* Is it worth it to reduce the amount of memory for the
--         grammar? Probably not.  */
--      }
-+  /* Map the nonterminals to their new index: useful first, useless
-+     afterwards.  Kept for later report.  */
-+  {
-+    int useful = 1;
-+    int useless = nrules + 1 - nuseless_productions;
-+    rule_t *rules_sorted = XMALLOC (rule_t, nrules + 1) - 1;
-+    int i;
-+    for (i = 1; i < nrules + 1; ++i)
-+      rules_sorted[rules[i].useful ? useful++ : useless++] = rules[i];
-+    free (rules + 1);
-+    rules = rules_sorted;
-
--  /* Disable useless productions. */
--  if (nuseless_productions > 0)
-+    /* Also reorder ritems. */
-       {
--      int pn;
--      for (pn = 1; pn < nrules + 1; pn++)
--      rules[pn].useful = bitset_test (P, pn);
-+      short *ritems_sorted = XCALLOC (short, nitems + 1);
-+      short *ritemsp = ritems_sorted;
-+      for (i = 1; i < nrules + 1; ++i)
-+      {
-+        short *rhsp = rules[i].rhs;
-+        rules[i].rhs = ritemsp;
-+        for (/* Nothing. */; *rhsp >= 0; ++rhsp)
-+          *ritemsp++ = *rhsp;
-+        *ritemsp++ = -i;
-+      }
-+      *ritemsp++ = 0;
-+      free (ritem);
-+      ritem = ritems_sorted;
-       }
-+    nrules -= nuseless_productions;
-+  }
-+
-+  /* Adjust NRITEMS and NITEMS.  */
-+  {
-+    int r;
-+    int length;
-+    for (r = nrules + 1; r < nrules + 1 + nuseless_productions; ++r)
-+      {
-+      length = rule_rhs_length (&rules[r]);
-+      nritems -= length + 1;
-+      nitems -= length + 1;
-+      }
-+  }
-       }
+       * tests/torture.at (Big triangle): New.
+       (GNU AWK Grammar, GNU Cim Grammar): Move to...
+       * tests/existing.at: here.
 
+2002-04-07  Akim Demaille  <akim@epita.fr>
 
-@@ -378,16 +372,15 @@
-       {
-       int i;
-       fprintf (out, "%s\n\n", _("Useless rules:"));
--      for (i = 1; i < nrules + 1; i++)
--      if (!rules[i].useful)
--        {
--          rule r;
--          fprintf (out, "#%-4d  ", i - 1);
--          fprintf (out, "%s:", symbols[rules[i].lhs]->tag);
--          for (r = rules[i].rhs; *r >= 0; r++)
--            fprintf (out, " %s", symbols[*r]->tag);
--          fputs (";\n", out);
--        }
-+      for (i = nrules + 1; i < nuseless_productions + nrules + 1; i++)
-+      {
-+        rule r;
-+        fprintf (out, "#%-4d  ", rules[i].number - 1);
-+        fprintf (out, "%s:", symbols[rules[i].lhs]->tag);
-+        for (r = rules[i].rhs; *r >= 0; r++)
-+          fprintf (out, " %s", symbols[*r]->tag);
-+        fputs (";\n", out);
-+      }
-       fputs ("\n\n", out);
-       }
-       }
-@@ -411,7 +404,7 @@
-       fprintf (out, "\n\n");
-       fprintf (out, "Rules\n-----\n\n");
-       fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
--  for (i = 1; i < nrules + 1; i++)
-+  for (i = 1; i < nrules + nuseless_productions + 1; i++)
-       {
-       int rhs_count = 0;
-       /* Find the last RHS index in ritems. */
-@@ -429,7 +422,7 @@
-       }
-       fprintf (out, "\n\n");
-       fprintf (out, "Rules interpreted\n-----------------\n\n");
--  for (i = 1; i < nrules + 1; i++)
-+  for (i = 1; i < nrules + nuseless_productions + 1; i++)
-       {
-       fprintf (out, "%-5d  %s :", i, symbols[rules[i].lhs]->tag);
-       for (r = rules[i].rhs; *r >= 0; r++)
-2art symbol %s does not derive any sentence"),
-       symbols[start_symbol]->tag);
-
--  reduce_grammar_tables ();
-+  if (nuseless_productions > 0)
-+    reduce_grammar_tables ();
-       if (nuseless_nonterminals > 0)
-       nonterminals_reduce ();
-
-diff -ur -x*.po -x Makefile -x *.pot -x configure* -x TODO bison-1.49a/tests/reduce.at bison/tests/reduce.at
---- bison-1.49a/tests/reduce.at        Sun Apr  7 17:36:56 2002
-+++ bison/tests/reduce.at      Sun Apr  7 18:19:39 2002
-0------- ##
-+## Reduced Automaton.  ##
-+## ------------------- ##
-+
-+# Check that the automaton is that as the for the grammar reduced by
-+# hand.
-+
-+AT_SETUP([Reduced Automaton])
-+
-+# The non reduced grammar.
-+# ------------------------
-+AT_DATA([[not-reduced.y]],
-+[[/* A useless token. */
-+%token useless_token
-+/* A useful one. */
-+%token useful
-+%verbose
-+%output="not-reduced.c"
-+
-+%%
-+
-+exp: useful            { /* A useful action. */ }
-+   | non_productive    { /* A non productive action. */ }
-+   ;
-+
-+not_reachable: useful  { /* A not reachable action. */ }
-+             ;
-+
-+non_productive: non_productive useless_token
-+                       { /* Another non productive action. */ }
-+              ;
-+]])
-+
-+AT_CHECK([[bison not-reduced.y]], 0, [],
-+[[not-reduced.y contains 2 useless nonterminals and 3 useless rules
-+]])
-+
-+AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' not-reduced.output]], 0,
-+[[Useless nonterminals:
-+   not_reachable
-+   non_productive
-+Terminals which are not used:
-+   useless_token
-+Useless rules:
-+#2     exp: non_productive;
-+#3     not_reachable: useful;
-+#4     non_productive: non_productive useless_token;
-+]])
-+
-+# The reduced grammar.
-+# --------------------
-+AT_DATA([[reduced.y]],
-+[[/* A useless token. */
-+%token useless_token
-+/* A useful one. */
-+%token useful
-+%verbose
-+%output="reduced.c"
-+
-+%%
-+
-+exp: useful            { /* A useful action. */ }
-+//   | non_productive    { /* A non productive action. */ } */
-+   ;
-+
-+//not_reachable: useful  { /* A not reachable action. */ }
-+//             ;
-+
-+//non_productive: non_productive useless_token
-+//                       { /* Another non productive action. */ }
-+//              ;
-+]])
-+
-+AT_CHECK([[bison reduced.y]])
-+
-+# Comparing the parsers.
-+cp reduced.c expout
-+AT_CHECK([sed 's/not-reduced/reduced/g' not-reduced.c], 0, [expout])
-+
-+AT_CLEANUP
-+
-+
-+
-+## ------------------- ##
-       ## Underivable Rules.  ##
-       ## ------------------- ##
+       * src/gram.h, src/gram.c (nitems): Remove, it is an alias of
+       nritems.
+       Adjust dependencies.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/reader.c: Normalize increments to prefix form.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/reader.c, symtab.c: Remove debugging code.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       Rename all the `bucket's as `symbol_t'.
+
+       * src/gram.c, src/gram.h, src/lex.c, src/lex.h, src/output.c,
+       * src/reader.c, src/reader.h, src/reduce.c, src/state.h,
+       * src/symtab.c, src/symtab.h (bucket): Rename as...
+       (symbol_t): this.
+       (symbol_list_new, bucket_check_defined, bucket_make_alias)
+       (bucket_check_alias_consistence, bucket_pack, bucket_translation)
+       (bucket_new, bucket_free, hash_compare_bucket, hash_bucket)
+       (buckets_new, buckets_free, buckets_do): Rename as...
+       (symbol_list_new, symbol_check_defined, symbol_make_alias)
+       (symbol_check_alias_consistence, symbol_pack, symbol_translation)
+       (symbol_new, symbol_free, hash_compare_symbol_t, hash_symbol_t)
+       (symbols_new, symbols_free, symbols_do): these.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       Use lib/hash for the symbol table.
+
+       * src/gram.c (ntokens): Initialize to 1, to reserve a slot for
+       EOF.
+       * src/lex.c (lex): Set the `number' member of new terminals.
+       * src/reader.c (bucket_check_defined, bucket_make_alias)
+       (bucket_check_alias_consistence, bucket_translation): New.
+       (reader, grammar_free, readgram, token_translations_init)
+       (packsymbols): Adjust.
+       (reader): Number the predefined tokens.
+       * src/reduce.c (inaccessable_symbols): Just use hard coded numbers
+       for predefined tokens.
+       * src/symtab.h (bucket): Remove all the hash table related
+       members.
+       * src/symtab.c (symtab): Replace by...
+       (bucket_table): this.
+       (bucket_new, bucket_free, hash_compare_bucket, hash_bucket)
+       (buckets_new, buckets_do): New.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/gram.c (nitems, nrules, nsyms, ntokens, nvars, nritems)
+       (start_symbol, max_user_token_number, semantic_parser)
+       (error_token_number): Initialize.
+       * src/reader.c (grammar, start_flag, startval, typed, lastprec):
+       Initialize.
+       (reader): Don't.
+       (errtoken, eoftoken, undeftoken, axiom): Extern.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/gram.h (rule_s): prec and precsym are now pointers
+       to the bucket giving the priority/associativity.
+       Member `associativity' removed: useless.
+       * src/reduce.c, src/conflicts.c: Adjust.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/lalr.c, src/LR0.c, src/closure.c, src/gram.c, src/reduce.c:
+       Properly escape the symbols' TAG when outputting them.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/lalr.h (LA): Is a bitsetv, not bitset*.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/lalr.h, src/lalr.c (LAruleno): Replace with...
+       (LArule): this, which is an array to rule_t*.
+       * src/print.c, src/conflicts.c: Adjust.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/gram.h (rule_t): Rename `number' as `user_number'.
+       `number' is a new member.
+       Adjust dependencies.
+       * src/reduce.c (reduce_grammar_tables): Renumber rule_t.number.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       As a result of the previous patch, it is no longer needed
+       to reorder ritem itself.
+
+       * src/reduce.c (reduce_grammar_tables): Don't sort RITEM.
 
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
-       * src/output.c (output_rule_data): Fix various range errors:
-       `rules' starts at 1, not 0.
+       Be sure never to walk through RITEMS, but use only data related to
+       the rules themselves. RITEMS should be banished.
+
+       * src/output.c (output_token_translations): Rename as...
+       (prepare_tokens): this.
+       In addition to `translate', prepare the muscles `tname' and
+       `toknum', which were handled by...
+       (output_rule_data): this.
+       Remove, and move the remainder of its outputs into...
+       (prepare_rules): this new routines, which also merges content from
+       (output_gram): this.
+       (prepare_rules): Be sure never to walk through RITEMS.
+       (output_stos): Rename as...
+       (prepare_stos): this.
+       (output): Always invoke prepare_states, after all, just don't use it
+       in the output if you don't need it.
 
-       
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
-       Remove the useless rules from the parser.
+       * src/LR0.c (new_state): Display `nstates' as the name of the
+       newly created state.
+       Adjust to initialize first_state and last_state if needed.
+       Be sure to distinguish the initial from the final state.
+       (new_states): Create the itemset of the initial state, and use
+       new_state.
+       * src/closure.c (closure): Now that the initial state has its
+       items properly set, there is no need for a special case when
+       creating `ruleset'.
+
+       As a result, now the rule 0, reducing to $axiom, is visible in the
+       outputs.  Adjust the test suite.
 
-       * src/gram.h, src/gram.c (rules_swap, rule_rhs_length): New.
-       (ritem_longest_rhs): Use the latter.
+       * tests/conflicts.at (Solved SR Conflicts)
+       (Unresolved SR Conflicts): Adjust.
+       * tests/regression.at (Web2c Report, Rule Line Numbers): Idem.
+       * tests/conflicts.at (S/R in initial): New.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/LR0.c (allocate_itemsets): Don't loop over ritem: loop over
+       the RHS of the rules.
+       * src/output.c (output_gram): Likewise.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/gram.h (rule_t): `lhs' is now a pointer to the symbol's
+       bucket.
+       Adjust all dependencies.
+       * src/reduce.c (nonterminals_reduce): Don't forget to renumber the
+       `number' of the buckets too.
+       * src/gram.h: Include `symtab.h'.
+       (associativity): Move to...
+       * src/symtab.h: here.
+       No longer include `gram.h'.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/gram.h, src/gram.c (rules_rhs_length): New.
+       (ritem_longest_rhs): Use it.
        * src/gram.h (rule_t): `number' is a new member.
        * src/reader.c (packgram): Set it.
        * src/reduce.c (reduce_grammar_tables): Move the useless rules at
@@ -421,470 +503,32 @@ diff -ur -x*.po -x Makefile -x *.pot -x configure* -x TODO bison-1.49a/tests/red
        the usefulness of a rule, as useless rules are beyond `nrules + 1'.
        * tests/reduce.at (Reduced Automaton): New test.
 
-diff -x *.po -ur -x testsuite bison-1.49a/NEWS bison/NEWS
---- bison-1.49a/NEWS   Sun Apr  7 17:36:56 2002
-+++ bison/NEWS Sun Apr  7 18:19:39 2002
-@@ -3,6 +3,10 @@
-
-       Changes in version 1.49a:
-
-+* Useless rules are actually removed.
-+  Before, Bison reported the useless rules, but, although not used,
-+  included them in the parsers.
-+
-       * False `Token not used' report fixed.
-       On a grammar such as
-
-diff -x *.po -ur -x testsuite bison-1.49a/src/gram.c bison/src/gram.c
---- bison-1.49a/src/gram.c     Sun Apr  7 17:36:56 2002
-+++ bison/src/gram.c   Sun Apr  7 18:19:39 2002
-@@ -1,5 +1,5 @@
-       /* Allocate input grammar variables for bison,
--   Copyright 1984, 1986, 1989, 2001 Free Software Foundation, Inc.
-+   Copyright 1984, 1986, 1989, 2001, 2002 Free Software Foundation, Inc.
-
-       This file is part of Bison, the GNU Compiler Compiler.
-
-@@ -51,6 +51,51 @@
-       int error_token_number;
-
-
-+/*----------------------------------.
-+| Swap the rules number R1 and R2.  |
-+`----------------------------------*/
-+
-+void
-+rules_swap (int r1, int r2)
-+{
-+  /* The easy part: swap the immediate contents of the structures. */
-+  {
-+    rule_t rule = rules[r1];
-+    rules[r1] = rules[r2];
-+    rules[r2] = rule;
-+  }
-+
-+  /* The first negative number in the RHS is the rule number.  */
-+  {
-+    short *rhsp;
-+    for (rhsp = rules[r1].rhs; *rhsp >= 0; ++rhsp)
-+      /* Nothing. */;
-+    assert (*rhsp == -r2);
-+    *rhsp = -r1;
-+
-+    for (rhsp = rules[r2].rhs; *rhsp >= 0; ++rhsp)
-+      /* Nothing. */;
-+    assert (*rhsp == -r1);
-+    *rhsp = -r2;
-+  }
-+}
-+
-+
-+/*--------------------------------------.
-+| Return the number of symbols in RHS.  |
-+`--------------------------------------*/
-+
-+int
-+rule_rhs_length (rule_t *rule)
-+{
-+  int res = 0;
-+  short *rhsp;
-+  for (rhsp = rule->rhs; *rhsp >= 0; ++rhsp)
-+    ++res;
-+  return res;
-+}
-+
-+
-       /*------------------------.
-       | Dump RITEM for traces.  |
-       `------------------------*/
-@@ -76,23 +121,15 @@
-       size_t
-       ritem_longest_rhs (void)
-       {
--  int length;
--  int max;
-+  int max = 0;
-       int i;
-
--  length = 0;
--  max = 0;
--  for (i = 0; i < nritems; ++i)
--    if (ritem[i] >= 0)
--      {
--      length++;
--      }
--    else
--      {
--      if (length > max)
--        max = length;
--      length = 0;
--      }
-+  for (i = 1; i < nrules + 1; ++i)
-+    {
-+      int length = rule_rhs_length (&rules[i]);
-+      if (length > max)
-+      max = length;
-+    }
-
-       return max;
-       }
-diff -x *.po -ur -x testsuite bison-1.49a/src/gram.h bison/src/gram.h
---- bison-1.49a/src/gram.h     Sun Apr  7 17:55:00 2002
-+++ bison/src/gram.h   Sun Apr  7 18:19:39 2002
-@@ -124,6 +124,10 @@
-
-       typedef struct rule_s
-       {
-+  /* The number of the rule in the source.  It is usually the index in
-+     RULES too, except if there are useless rules.  */
-+  short number;
-+
-       short lhs;
-       short *rhs;
-       short prec;
-@@ -166,6 +170,11 @@
-
-       extern int error_token_number;
-
-+/* Swap two rules. */
-+void rules_swap PARAMS ((int r1, int r2));
-+
-+/* Report the length of the RHS. */
-+int rule_rhs_length PARAMS ((rule_t *rule));
-
-       /* Dump RITEM for traces. */
-       void ritem_print PARAMS ((FILE *out));
-diff -x *.po -ur -x testsuite bison-1.49a/src/print.c bison/src/print.c
---- bison-1.49a/src/print.c    Sun Apr  7 17:55:00 2002
-+++ bison/src/print.c  Sun Apr  7 18:19:39 2002
-@@ -366,19 +366,17 @@
-       fprintf (out, "%s\n\n", _("Grammar"));
-       fprintf (out, "  %s\n", _("Number, Line, Rule"));
-       for (i = 1; i < nrules + 1; i++)
--    /* Don't print rules disabled in reduce_grammar_tables.  */
--    if (rules[i].useful)
--      {
--      fprintf (out, _("  %3d %3d %s ->"),
--               i - 1, rules[i].line, escape (symbols[rules[i].lhs]->tag));
--      rule = rules[i].rhs;
--      if (*rule >= 0)
--        while (*rule >= 0)
--          fprintf (out, " %s", escape (symbols[*rule++]->tag));
--      else
--        fprintf (out, " /* %s */", _("empty"));
--      fputc ('\n', out);
--      }
-+    {
-+      fprintf (out, _("  %3d %3d %s ->"),
-+             i - 1, rules[i].line, escape (symbols[rules[i].lhs]->tag));
-+      rule = rules[i].rhs;
-+      if (*rule >= 0)
-+      while (*rule >= 0)
-+        fprintf (out, " %s", escape (symbols[*rule++]->tag));
-+      else
-+      fprintf (out, " /* %s */", _("empty"));
-+      fputc ('\n', out);
-+    }
-       fputs ("\n\n", out);
-
-
-diff -x *.po -ur -x testsuite bison-1.49a/src/reader.c bison/src/reader.c
---- bison-1.49a/src/reader.c   Sun Apr  7 17:56:13 2002
-+++ bison/src/reader.c Sun Apr  7 18:19:39 2002
-@@ -1687,6 +1687,7 @@
-       while (p)
-       {
-       bucket *ruleprec = p->ruleprec;
-+      rules[ruleno].number = ruleno;
-       rules[ruleno].lhs = p->sym->number;
-       rules[ruleno].rhs = ritem + itemno;
-       rules[ruleno].line = p->line;
-diff -x *.po -ur -x testsuite bison-1.49a/src/reduce.c bison/src/reduce.c
---- bison-1.49a/src/reduce.c   Sun Apr  7 17:55:00 2002
-+++ bison/src/reduce.c Sun Apr  7 18:19:39 2002
-@@ -220,70 +220,59 @@
-       bitset_set (V1, rules[i].precsym);
-       }
-
-+
-+/*-------------------------------------------------------------------.
-+| Put the useless productions at the end of RULES, and adjust NRULES |
-+| accordingly.                                                       |
-+`-------------------------------------------------------------------*/
-+
-       static void
-       reduce_grammar_tables (void)
-       {
--  /* This is turned off because we would need to change the numbers in
--     the case statements in the actions file.
--
--     We don't disable it via CPP so that it is still checked with the
--     rest of the code, to avoid its becoming completely obsolete.
--
--     FIXME: I think the comment above demonstrates this code must be
--     turned off for *semantic* parser, not in the general case.  Try
--     to understand this better --akim.  */
--
--  if (0)
--    /* remove useless productions */
--    if (nuseless_productions > 0)
--      {
--      short np, pn, ni, pi;
--
--      np = 0;
--      ni = 0;
--      for (pn = 1; pn < nrules + 1; pn++)
--        if (bitset_test (P, pn))
--          {
--            np++;
--            if (pn != np)
--              {
--                rules[np].lhs   = rules[pn].lhs;
--                rules[np].line  = rules[pn].line;
--                rules[np].prec  = rules[pn].prec;
--                rules[np].assoc = rules[pn].assoc;
--                rules[np].rhs   = rules[pn].rhs;
--                if (rules[np].rhs - ritem != ni)
--                  {
--                    pi = rules[np].rhs - ritem;
--                    rules[np].rhs = ritem + ni;
--                    while (ritem[pi] >= 0)
--                      ritem[ni++] = ritem[pi++];
--                    ritem[ni++] = -np;
--                  }
--              }
--            else
--              {
--                while (ritem[ni++] >= 0)
--                  /* Nothing. */;
--              }
--          }
--
--      ritem[ni] = 0;
--      nrules -= nuseless_productions;
--      nitems = ni;
--      nritems = ni;
--
--      /* Is it worth it to reduce the amount of memory for the
--         grammar? Probably not.  */
--      }
--
--  /* Disable useless productions. */
-+  /* Flag useless productions.  */
-       if (nuseless_productions > 0)
-       {
-       int pn;
-       for (pn = 1; pn < nrules + 1; pn++)
-       rules[pn].useful = bitset_test (P, pn);
-       }
-+
-+  /* Map the nonterminals to their new index: useful first, useless
-+     afterwards.  Kept for later report.  */
-+  if (nuseless_productions > 0)
-+    {
-+      short *map = XCALLOC (short, nrules + 1) - 1;
-+      int useful = 1;
-+      int useless = nrules + 1 - nuseless_productions;
-+      int i;
-+      for (i = 1; i < nrules + 1; ++i)
-+      map[i] = rules[i].useful ? useful++ : useless++;
-+
-+      /* Shuffle elements of tables indexed by symbol number.  */
-+      for (i = 1; i < nrules + 1; ++i)
-+      if (i != map[i])
-+        {
-+          int j = map[i];
-+          rules_swap (i, map[i]);
-+          map[i] = map[j];
-+          map[j] = j;
-+        }
-+
-+      free (map + 1);
-+      nrules -= nuseless_productions;
-+    }
-+
-+  /* Adjust NRITEMS and NITEMS.  */
-+  {
-+    int r;
-+    int length;
-+    for (r = nrules + 1; r < nrules + 1 + nuseless_productions; ++r)
-+      {
-+      length = rule_rhs_length (&rules[r]);
-+      nritems -= length + 1;
-+      nitems -= length + 1;
-+      }
-+  }
-       }
-
-
-@@ -378,16 +367,15 @@
-       {
-       int i;
-       fprintf (out, "%s\n\n", _("Useless rules:"));
--      for (i = 1; i < nrules + 1; i++)
--      if (!rules[i].useful)
--        {
--          rule r;
--          fprintf (out, "#%-4d  ", i - 1);
--          fprintf (out, "%s:", symbols[rules[i].lhs]->tag);
--          for (r = rules[i].rhs; *r >= 0; r++)
--            fprintf (out, " %s", symbols[*r]->tag);
--          fputs (";\n", out);
--        }
-+      for (i = nrules + 1; i < nuseless_productions + nrules + 1; i++)
-+      {
-+        rule r;
-+        fprintf (out, "#%-4d  ", rules[i].number - 1);
-+        fprintf (out, "%s:", symbols[rules[i].lhs]->tag);
-+        for (r = rules[i].rhs; *r >= 0; r++)
-+          fprintf (out, " %s", symbols[*r]->tag);
-+        fputs (";\n", out);
-+      }
-       fputs ("\n\n", out);
-       }
-       }
-@@ -411,7 +399,7 @@
-       fprintf (out, "\n\n");
-       fprintf (out, "Rules\n-----\n\n");
-       fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
--  for (i = 1; i < nrules + 1; i++)
-+  for (i = 1; i < nrules + nuseless_productions + 1; i++)
-       {
-       int rhs_count = 0;
-       /* Find the last RHS index in ritems. */
-@@ -429,7 +417,7 @@
-       }
-       fprintf (out, "\n\n");
-       fprintf (out, "Rules interpreted\n-----------------\n\n");
--  for (i = 1; i < nrules + 1; i++)
-+  for (i = 1; i < nrules + nuseless_productions + 1; i++)
-       {
-       fprintf (out, "%-5d  %s :", i, symbols[rules[i].lhs]->tag);
-       for (r = rules[i].rhs; *r >= 0; r++)
-diff -x *.po -ur -x testsuite bison-1.49a/tests/reduce.at bison/tests/reduce.at
---- bison-1.49a/tests/reduce.at        Sun Apr  7 17:36:56 2002
-+++ bison/tests/reduce.at      Sun Apr  7 18:19:39 2002
-@@ -174,6 +174,89 @@
-
-
-       ## ------------------- ##
-+## Reduced Automaton.  ##
-+## ------------------- ##
-+
-+# Check that the automaton is that as the for the grammar reduced by
-+# hand.
-+
-+AT_SETUP([Reduced Automaton])
-+
-+# The non reduced grammar.
-+# ------------------------
-+AT_DATA([[not-reduced.y]],
-+[[/* A useless token. */
-+%token useless_token
-+/* A useful one. */
-+%token useful
-+%verbose
-+%output="not-reduced.c"
-+
-+%%
-+
-+exp: useful            { /* A useful action. */ }
-+   | non_productive    { /* A non productive action. */ }
-+   ;
-+
-+not_reachable: useful  { /* A not reachable action. */ }
-+             ;
-+
-+non_productive: non_productive useless_token
-+                       { /* Another non productive action. */ }
-+              ;
-+]])
-+
-+AT_CHECK([[bison not-reduced.y]], 0, [],
-+[[not-reduced.y contains 2 useless nonterminals and 3 useless rules
-+]])
-+
-+AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' not-reduced.output]], 0,
-+[[Useless nonterminals:
-+   not_reachable
-+   non_productive
-+Terminals which are not used:
-+   useless_token
-+Useless rules:
-+#2     exp: non_productive;
-+#3     not_reachable: useful;
-+#4     non_productive: non_productive useless_token;
-+]])
-+
-+# The reduced grammar.
-+# --------------------
-+AT_DATA([[reduced.y]],
-+[[/* A useless token. */
-+%token useless_token
-+/* A useful one. */
-+%token useful
-+%verbose
-+%output="reduced.c"
-+
-+%%
-+
-+exp: useful            { /* A useful action. */ }
-+//   | non_productive    { /* A non productive action. */ } */
-+   ;
-+
-+//not_reachable: useful  { /* A not reachable action. */ }
-+//             ;
-+
-+//non_productive: non_productive useless_token
-+//                       { /* Another non productive action. */ }
-+//              ;
-+]])
-+
-+AT_CHECK([[bison reduced.y]])
-+
-+# Comparing the parsers.
-+cp reduced.c expout
-+AT_CHECK([sed 's/not-reduced/reduced/g' not-reduced.c], 0, [expout])
-+
-+AT_CLEANUP
-+
-+
-+
-+## ------------------- ##
-       ## Underivable Rules.  ##
-       ## ------------------- ##
-
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
        * src/reduce.c (inaccessable_symbols): Fix a buglet: because of a
        lacking `+ 1' to nrules, Bison reported as useless a token if it
        was used solely to set the precedence of the last rule...
 
-       
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
        * data/bison.c++, data/bison.simple: Don't output the current file
        name in #line, to avoid useless diffs between two identical
        outputs under different names.
 
-       
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
        * src/closure.c, src/print.c, src/reader.c, src/reduce.c:
        Normalize loops to using `< nrules + 1', not `<= nrules'.
 
-       
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
        * TODO: Update.
 
-       
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
        * src/output.c, src/reader.c, src/symtab.c, src/symtab.h: Rename
        bucket.value as bucket.number.
 
-       
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
        * src/closure.c, src/derives.c, src/gram.h, src/lalr.c,
@@ -906,7 +550,7 @@ diff -x *.po -ur -x testsuite bison-1.49a/tests/reduce.at bison/tests/reduce.at
        YYERROR_VERBOSE is nonzero, not whether it is defined.
 
        Merge changes from bison-1_29-branch.
-       
+
 2002-03-20  Paul Eggert  <eggert@twinsun.com>
 
        Merge fixes from Debian bison_1.34-1.diff.
@@ -938,7 +582,6 @@ diff -x *.po -ur -x testsuite bison-1.49a/tests/reduce.at bison/tests/reduce.at
        * src/reader.c (parse_union_decl): Define the muscle stype_line.
        * data/bison.simple, data/bison.c++: Use it.
 
-
 2002-03-19  Akim Demaille  <akim@epita.fr>
 
        * tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts)
@@ -6745,3 +6388,23 @@ diff -x *.po -ur -x testsuite bison-1.49a/tests/reduce.at bison/tests/reduce.at
 1987-12-16  Richard Stallman  <rms@gnu.org>
 
        * REFERENCES: entered into RCS
+-----
+
+Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Autoconf.
+
+GNU Autoconf is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Autoconf is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with autoconf; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.