X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/588db0a892b11796cb2388b8bf44c1e990eadf5c..b87f8b2159820e022e3b726b8369f74d64712f8f:/ChangeLog diff --git a/ChangeLog b/ChangeLog index 9ceac057..b5391988 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,523 @@ +2002-05-04 Akim Demaille + + * src/symtab.h (SALIAS, SUNDEF): Rename as... + (USER_NUMBER_ALIAS, USER_NUMBER_UNDEFINED): these. + Adjust dependencies. + * src/output.c (token_definitions_output): Be sure not to output a + `#define 'a'' when fed with `%token 'a' "a"'. + * tests/regression.at (Token definitions): New. + +2002-05-03 Paul Eggert + + * data/bison.simple (b4_token_defines): Also define YYTOKENTYPE + for K&R C. + +2002-05-03 gettextize + + * Makefile.am (SUBDIRS): Remove intl. + (EXTRA_DIST): Add config/config.rpath. + +2002-05-03 Akim Demaille + + * data/bison.simple (m4_if): Don't output empty enums. + And actually, output valid enum definitions :(. + +2002-05-03 Akim Demaille + + * 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 + + * configure.in (GETTEXT_VERSION): New. + Suggested by Bruno Haible for the forthcoming Gettext 0.10.3. + +2002-05-03 Akim Demaille + + * 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 + + * data/m4sugar/m4sugar.m4: Update from CVS Autoconf. + +2002-05-02 Robert Anisko + + * 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 + + * 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 + + * src/reader.c (parse_braces): Merge into... + (parse_action): this. + +2002-05-02 Akim Demaille + + * configure.in (ALL_LINGUAS): Remove. + * po/LINGUAS, hr.po: New. + +2002-05-02 Akim Demaille + + 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 + + * 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 + + * configure.in (AC_INIT): Bump to 1.49b. + (AM_INIT_AUTOMAKE): Short invocation. + +2002-05-02 Akim Demaille + + Version 1.49a. + +2002-05-01 Akim Demaille + + * src/skeleton.h: Remove. + +2002-05-01 Akim Demaille + + * src/skeleton.h: Fix the #endif. + Reported by Magnus Fromreide. + +2002-04-26 Paul Eggert + + * 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 + + * 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 + + * tests/sets.at (AT_EXTRACT_SETS): Sed portability issue: no space + between `!' and the command. + Reported by Paul Eggert. + +2002-04-24 Robert Anisko + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * src/output.h, src/output.c (get_lines_number): Remove. + +2002-04-19 Akim Demaille + + * 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 + + * doc/bison.texinfo: Remove the uses of the obsolete @refill. + +2002-04-10 Akim Demaille + + * src/system.h: Rely on HAVE_LIMITS_H. + Suggested by Paul Eggert. + +2002-04-09 Akim Demaille + + * 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 + + * 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 + + * 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 + + * 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 + + * src/reduce.c (reduce_grammar): First reduce the nonterminals, + and then the grammar. + +2002-04-08 Akim Demaille + + * src/system.h: No longer using strndup. + +2002-04-07 Akim Demaille + + * 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. + 2002-04-07 Akim Demaille - Remove the useless rules from the parser. + * tests/torture.at (Big triangle): New. + (GNU AWK Grammar, GNU Cim Grammar): Move to... + * tests/existing.at: here. + +2002-04-07 Akim Demaille + + * src/gram.h, src/gram.c (nitems): Remove, it is an alias of + nritems. + Adjust dependencies. - * src/gram.h, src/gram.c (rules_swap, rule_rhs_length): New. - (ritem_longest_rhs): Use the latter. +2002-04-07 Akim Demaille + + * src/reader.c: Normalize increments to prefix form. + +2002-04-07 Akim Demaille + + * src/reader.c, symtab.c: Remove debugging code. + +2002-04-07 Akim Demaille + + 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 + + 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 + + * 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 + + * 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 + + * 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 + + * src/lalr.h (LA): Is a bitsetv, not bitset*. + +2002-04-07 Akim Demaille + + * 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 + + * 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 + + 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 + + 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 + + * 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. + + * 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 + + * 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 + + * 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 + + * 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 @@ -13,470 +527,32 @@ 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 * 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 * 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 * 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 * TODO: Update. - 2002-04-07 Akim Demaille * src/output.c, src/reader.c, src/symtab.c, src/symtab.h: Rename bucket.value as bucket.number. - 2002-04-07 Akim Demaille * src/closure.c, src/derives.c, src/gram.h, src/lalr.c, @@ -498,7 +574,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 Merge fixes from Debian bison_1.34-1.diff. @@ -530,7 +606,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 * tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts) @@ -6337,3 +6412,23 @@ diff -x *.po -ur -x testsuite bison-1.49a/tests/reduce.at bison/tests/reduce.at 1987-12-16 Richard Stallman * 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.