Compare commits

...
248 Commits
Author SHA1 Message Date
Akim Demaille 12de352a6f Bump to 1.31. 2002-01-14 10:28:31 +00:00
Akim Demaille 6fc75bfd3a * tests/regression.at (Invalid CPP headers): Remove. 2002-01-14 10:16:49 +00:00
Akim Demaille 96df91407c Bump to 1.30m. 2002-01-14 10:16:41 +00:00
Akim Demaille b30efba0d0 . 2002-01-12 11:45:03 +00:00
Akim Demaille fd2d280114 Version 1.30l. 2002-01-12 11:41:45 +00:00
Akim Demaille 68e202f30f * lib/Makefile.am (EXTRA_DIST): Add strnlen.c: Automake is still
not using Autoconf traces and does not see Autoconf's AC_LIBOBJ.
2002-01-12 11:39:54 +00:00
Akim Demaille d7848b138c . 2002-01-11 13:46:33 +00:00
Akim Demaille 40c6b975e9 Update. 2002-01-11 13:42:16 +00:00
Akim Demaille a5fb3dead0 Version 1.30k. 2002-01-11 13:37:00 +00:00
Akim Demaille ac5ff6a908 * configure.in: Use AC_FUNC_STRNLEN. 2002-01-11 13:31:33 +00:00
Akim Demaille 0b1cb33137 . 2002-01-09 15:17:22 +00:00
Akim Demaille 9f3c97f74f Version 1.30j. 2002-01-09 15:12:39 +00:00
Akim Demaille a99566be67 * configure.in (WERROR_CFLAGS): Compute it.
* src/Makefile.am (CFLAGS): Pass it.
* tests/atlocal.in (CFLAGS): Idem.
2002-01-09 15:06:25 +00:00
Akim Demaille ca66b45a86 Update. 2002-01-09 14:56:07 +00:00
Akim Demaille 55601256c2 * lib/Makefile.am (libbison_a_SOURCES): Add xstrndup.c.
* src/getargs.c (AS_FILE_NAME): New.
(getargs): Use it to convert DOSish file names.
* src/files.c (base_name): Rename as full_base_name to avoid
clashes with `base_name ()'.
(get_extension_index): Remove.
(filename_split): New.
(compute_base_names): N-th rewrite, using filename_split.
2002-01-08 17:41:38 +00:00
Akim Demaille 43cc2463d2 * lib/basename.c, lib/dirname.h, lib/dirname.c, lib/memrchr.c,
* lib/xstrndup.c, lib/strchr.c:
New, stolen from the Fileutils 4.1.
* lib/Makefile.am (libbison_a_SOURCES): Adjust.
* configure.in: Check for the presence of memrchr, strchr,
strnlen, and of their prototypes.
Don't check for strndup: we no longer use it.
* src/system.h: Adjust the prototypes.
2002-01-08 17:30:53 +00:00
Akim Demaille 25a46077de * src/conflicts.c (count_rr_conflicts): The previous RR conflicts
patch was improperly applied: fix it.
2002-01-07 08:42:59 +00:00
Akim Demaille 62d3162c4c Revert the previous patch which was meant for the trunk only. 2002-01-07 08:40:29 +00:00
Akim Demaille 3f2f7848cc * src/reader.c (parse_braces): Don't fetch the next char, the
convention is to fetch on entry.
* tests/torture.at (GNU Cim Grammar): Reintroduce their weird
'switch' without a following semicolon.
* tests/regression.at (braces parsing): New.
2002-01-06 20:59:30 +00:00
Akim Demaille c4267a3d35 Bison is dead wrong in its RR conflict reports.
* tests/torture.at (GNU Cim Grammar): New.
* src/conflicts.c (count_rr_conflicts): Fix.
2002-01-06 20:59:12 +00:00
Akim Demaille ae774286e8 Creating package.m4 from configure.ac causes too many problems.
* tests/Makefile.am (package.m4): Create it by hand,
AC_CONFIG_TESTDIR no longer does in the most recent CVS Autoconf.
2002-01-06 20:57:20 +00:00
Akim Demaille 43f8a3245a Regen. 2002-01-06 20:56:42 +00:00
Paul Eggert a22d7bd8d6 * doc/bison.texinfo (Debugging):
Remove YYSTDERR; it's no longer defined or used.
Also, s/cstdio.h/cstdio/.
2002-01-05 01:20:57 +00:00
Paul Eggert f36280e16e (Debugging): Remove YYSTDERR; it's no longer defined or used.
Also, s/cstdio.h/cstdio/.
2002-01-05 01:18:26 +00:00
Akim Demaille 38612b10a3 * src/files.h: Add it prototype. 2002-01-03 13:55:09 +00:00
Akim Demaille ffc03584ad * src/files.c, src/files.h (strsuffix): Not static.
* src/conflicts.c (conflicts_print): Don't consider it is an error
to have a %expectation violation on a file ending by `plural.y'.
Eek.
2002-01-03 13:39:20 +00:00
Akim Demaille dd3c3f3006 * tests/bison.in: Adjust to CVS Autoconf.
* tests/calc.at (exp): We no longer need to special case GCC as
the warning flags are passed by configure.
* tests/atlocal.in: Adjust.
* configure.in: Bump to 1.30j.
2002-01-03 11:10:50 +00:00
Akim Demaille f1d93aa21c Regen. 2002-01-03 11:09:47 +00:00
Akim Demaille a4f0747a2a . 2002-01-03 10:45:14 +00:00
Akim Demaille ca69f83c53 Version 1.30i. 2002-01-03 10:42:17 +00:00
Akim Demaille b06c1dfb75 Update. 2002-01-03 10:40:03 +00:00
Akim Demaille 7525f95ed5 * src/bison.simple (YYSTDERR): Remove, replace `stderr'.
The ISO C++ standard is extremely clear about it: stderr is
considered a macro, not a regular symbol (see table 94 `Header
<cstdio> synopsis', [lib.c.files] 27.8.2 C Library files).
Therefore std:: does not apply to it.  It still does with fprintf.
Also, s/cstdio.h/cstdio/.
2002-01-03 09:48:08 +00:00
Akim Demaille 1daed0de8a * lib/quotearg.c: Use #include "..."' instead of #include <...>'
for non system headers.
2002-01-03 09:27:34 +00:00
Akim Demaille 32e175835b Regen. 2002-01-03 09:24:59 +00:00
Akim Demaille ea04a14c5c * src/bison.simple (YYSTACK_ALLOC, YYSIZE_T): Remove special
cases for non-GNU systems like AIX, HP-UX, SGI, Sun, and
Sparc, as they were causing more porting problems than the
(minor) performance improvement was worth.
2001-12-27 18:30:40 +00:00
Akim Demaille d6b12c2d8b * src/output.c (output_short_table, output_short_or_char_table):
Change the prototype to use `int' for array ranges: some
invocations do pass an int, not a short.
Reported by Wayne Green.
2001-12-27 18:28:23 +00:00
Akim Demaille f4ffa313a2 Regen. 2001-12-22 15:13:48 +00:00
Akim Demaille 1214dfb03b Some actions of web2c.y are improperly triggered.
Reported by Mike Castle.
* src/lalr.c (traverse): s/F (i)[k] = F (j)[k]/F (j)[k] = F (i)[k]/.
* tests/regression.at (Web2c): Rename as...
(Web2c Report): this.
(Web2c Actions): New.
2001-12-22 14:44:25 +00:00
Akim Demaille 55b4181996 Reductions in web2c.y are improperly reported.
Reported by Mike Castle.
* src/conflicts.c (print_reductions): Fix.
* tests/regression.at (Web2c): New.
2001-12-22 14:41:15 +00:00
Akim Demaille 12a04365ce Bump to 1.30i 2001-12-22 14:39:44 +00:00
Akim Demaille 6929a4a0e8 Adjust. 2001-12-18 09:58:07 +00:00
Akim Demaille 07cccc8bc6 . 2001-12-18 09:51:33 +00:00
Akim Demaille 36791b5576 Version 1.30h. 2001-12-18 09:46:36 +00:00
Akim Demaille dba44a1367 Update. 2001-12-18 09:42:58 +00:00
Akim Demaille d4593e87be Some host fail on `assert (!"foo")', which expands to
((!"foo") ? (void)0 : __assert("!"foo."", __FILE__, __LINE__))
Reported by Nelson Beebee.
* src/output.c, src/vcg.c: Replace `assert (!"it succeeded")' with
`#define it_succeeded 0' and `assert (it_succeeded)'.
2001-12-18 09:33:23 +00:00
Paul Eggert 6b1ec1fb33 * src/bison.simple (YYSTD): New macro.
(YYSIZE_T, YYSTACK_ALLOC, YYSTACK_FREE, YYFPRINTF, YYSTDERR): Use
it to simplify macros, and fix some C++ porting problems reported
by Hans Aberg.
2001-12-17 23:51:46 +00:00
Paul Eggert bfb74f79b8 (YYSTD): New macro.
(YYSIZE_T, YYSTACK_ALLOC, YYSTACK_FREE, YYFPRINTF, YYSTDERR): Use it to
simplify macros, and fix some C++ porting problems reported by Hans Aberg.
2001-12-17 23:50:16 +00:00
Paul Eggert c520f816b1 * src/output.c (output): Define YYDEBUG to 0 if it is not defined
and if we are not debugging.  POSIX requires this.
* NEWS, doc/bison.texinfo, doc/bison.1, doc/bison.rnh: Document this.

* src/output.c (output_gram, output_rule_data): Do not assume that
the user defines YYDEBUG to a properly parenthesized expression.
2001-12-17 18:49:14 +00:00
Paul Eggert cc6ed5f7f1 Define YYDEBUG to 0 if it is not defined and if we are not debugging.
POSIX requires this.
2001-12-17 18:48:43 +00:00
Paul Eggert ac28f67c0b (output): Define YYDEBUG to 0 if it is not defined and if we are not
debugging.  POSIX requires this.

(output_gram, output_rule_data): Do not assume that
the user defines YYDEBUG to a properly parenthesized expression.
2001-12-17 18:45:59 +00:00
Akim Demaille f30e1ab65c * src/nullable.c (set_nullable): Useless rules must be skipped,
otherwise, since we range over their symbols, we might look at a
nonterminal which no longer ``exists'', i.e., it is not counted in
`nvars', hence we overflow our arrays.
2001-12-15 16:22:13 +00:00
Akim Demaille 52e9776027 * src/reader.c (copy_action): When --yacc, don't append a `;'
to the user action: let it fail if lacking.
Suggested by Aharon Robbins and Tom Tromey.
2001-12-15 11:07:56 +00:00
Akim Demaille 21292982fe Regen. 2001-12-15 10:59:00 +00:00
Akim Demaille 9f0938ad32 Bump to 1.30h. 2001-12-13 12:07:48 +00:00
Akim Demaille cb948818d0 . 2001-12-13 11:18:19 +00:00
Akim Demaille c0760f18e0 Version 1.30g. 2001-12-13 11:14:19 +00:00
Akim Demaille c884affb0b Update. 2001-12-13 11:06:18 +00:00
Akim Demaille f7e7f57941 The computation of nullable is broken: it doesn't handle empty
RHS's properly.
* tests/torture.at (GNU AWK Grammar): New.
* tests/sets.at (Nullable): New.
* src/nullable.c (set_nullable): Instead of blindly looping over
`ritems', loop over the rules, and then over their rhs's.
Work around Autotest bugs.
* src/warshall.c (bitmatrix_print): Don't use `+--+' as table
frame, because Autotest understand lines starting with a `+' as
traces from the shell.  Then, they are not processed properly.
Admittedly an Autotest bug, but we don't have time to wait for
Autotest to catch up.
* tests/regression.at (Broken Closure): Adjust to the new table
frames.
Move to...
* tests/sets.at: here.
2001-12-13 10:59:37 +00:00
Paul Eggert d1210d1d6e Document YYPRINTF, YYSTDERR. 2001-12-13 02:45:14 +00:00
Paul Eggert d5c2eff246 * src/bison.simple (YYSIZE_T, YYSTACK_ALLOC, YYSTACK_FREE):
Do not infringe on the global user namespace when using C++.
	(YYFPRINTF, YYSTDERR): New macros, needed for the above.
	All uses of `fprintf' and `stderr' changed.

	* src/output.c (output): Do not output "#include <stdio.h>"; that
	is bison.simple's job.  stdio.h should be included only if
	necessary, to avoid infringing on the user name space when
	possible.
2001-12-13 02:22:05 +00:00
Paul Eggert b59b91bb6e (output): Do not output "#include <stdio.h>"; that is bison.simple's
job.  stdio.h should be included only if necessary, to avoid
infringing on the user name space when possible.
2001-12-13 02:21:12 +00:00
Paul Eggert 63e75f2e38 (YYSIZE_T, YYSTACK_ALLOC, YYSTACK_FREE):
Do not infringe on the global user namespace when using C++.
(YYFPRINTF, YYSTDERR): New macros, needed for the above.
All uses of `fprintf' and `stderr' changed.
2001-12-13 02:20:28 +00:00
Akim Demaille 69dc1147ba * src/complain.h, src/complain.c: Remove error_one_per_line, rely
on that of lib/error.c.
2001-12-12 15:21:59 +00:00
Akim Demaille 3d9d5d34ff Regen. 2001-12-12 15:19:25 +00:00
Akim Demaille 701d80ffa0 Regen. 2001-12-12 12:01:09 +00:00
Akim Demaille 88f06d2beb Some hosts don't like `/' in includes.
* src/system.h: Include libgettext.h without qualifying the path.
* src/Makefile.am (INCLUDES): Add $(top_srcdir)/intl, remove
$(top_srcdir).
2001-12-12 11:55:56 +00:00
Akim Demaille daa938e7f0 Regen. 2001-12-12 11:55:29 +00:00
Akim Demaille ed45e93ed8 Bison dumps core on bash.y.
Reported by Pascal Bart.
* src/warshall.c (bitmatrix_print): New.
(TC): Use it.
When performing a transitive closure R(i, j) && R(j, k) => R(i,	k),
j must be the outer loop.
* tests/regression.at (Broken Closure): New.
2001-12-10 08:43:38 +00:00
Akim Demaille 74d757ab92 Fix an es.po problem. 2001-12-06 14:24:41 +00:00
Akim Demaille 4be25f1591 Version 1.30g. 2001-12-05 15:24:53 +00:00
Akim Demaille b7008317cf . 2001-12-05 12:01:24 +00:00
Akim Demaille 3f66ed1c8b Update. 2001-12-05 11:57:46 +00:00
Akim Demaille 58dce15432 Version 1.30f. 2001-12-05 11:46:05 +00:00
Akim Demaille e6970f2ed0 * tests/atlocal.in (CPPFLAGS): Do not leave a space between -I and
its argument.
Reported by Peter Hámorský.
2001-12-05 10:58:44 +00:00
Akim Demaille b9866ce4da Regen. 2001-12-05 09:30:34 +00:00
Akim Demaille b32ba448c8 * src/conflicts.c (err_table): Remove.
(resolve_sr_conflict): Adjust.
* src/lalr.h (state_t.reduction_table, state_t.shift_table):
Rename as...
(state_t.reductions, state_t.shifts): this.
2001-12-05 09:24:54 +00:00
Akim Demaille 5844cd0cfa * src/reduce.c (reduce_grammar_tables): No longer disable the
removal of useless rules via CPP but via `if (0)', so that the
compiler still check the code is valid.
For instance, it should have noticed `rline' no longer exists: use
the `line' member of rule_t.
* src/gram.c (dummy, rline): Remove, unused.
2001-12-05 09:24:35 +00:00
Akim Demaille 0fc1a97d9f * src/output.c (pack_vector): Use assert, not berror.
* src/main.c (berror): Remove, unused.
2001-12-05 09:24:21 +00:00
Akim Demaille 84b6f48351 New experimental feature: if --verbose --trace output all the
items of a state, not only its kernel.
* src/print.c (print_core): If `trace_flag', then invoke closure
before outputting the items of the state (print_core is no longer
a correct name them).
(print_results): Invoke new_closure/free_closure if needed.
2001-12-05 09:24:06 +00:00
Akim Demaille b6a70d99a6 * src/LR0.c (new_itemsets): Use nshifts only, not shiftcount.
* src/closure.c, src/closure.h (itemsetsize): Rename as...
(nitemset): for consistency with the rest of the project.
2001-12-05 09:23:52 +00:00
Akim Demaille 66d35de779 * src/closure.c (print_closure): Improve.
(closure): Use it for printing input and output.
2001-12-05 09:23:38 +00:00
Akim Demaille 5e5b240715 * src/closure.c (FIRSTS, FDERIVES): Adjust to reality: they are
indexed by nonterminals.
2001-12-05 09:23:24 +00:00
Akim Demaille aaf7be2c4b * src/warshall.c (TC, RTC): De-obsfucate (source reduced to 22% of
what it was!).
* src/warshall.h: Remove accidental duplication of the content.
2001-12-05 09:23:10 +00:00
Akim Demaille 0ea80316a9 * src/closure.c (set_fderives): De-obfuscate. 2001-12-05 09:22:55 +00:00
Akim Demaille 09b2117db7 * src/closure.c (print_firsts, print_fderives): De-obfuscate. 2001-12-05 09:22:40 +00:00
Akim Demaille 78fc5ce865 * src/closure.c (set_firsts): De-obfuscate. 2001-12-05 09:22:27 +00:00
Akim Demaille 766ffc1523 * src/output.c (action_row): De-obfuscate
using the good o' techniques: arrays not pointers, variable
locality, BITISSET, RESETBIT etc.
2001-12-05 09:22:14 +00:00
Akim Demaille 06a2f464b1 Pessimize the code to simplify it: from now on, all the states
have a valid SHIFTS, which NSHIFTS is possibly 0.
* src/LR0.c (shifts_new): Be global and move to..
* src/state.c, src/state.h: here.
* src/conflicts, src/lalr.c, src/output.c, src/print.c,
* src/print_graph: Adjust.
2001-12-05 09:21:55 +00:00
Akim Demaille 15ab9127f5 * src/state.h (SHIFT_DISABLE, SHIFT_IS_DISABLED): New.
* src/conflicts.c: Use it.
Restore a few missing `if (!SHIFT_IS_DISABLED)' which were
incorrectly ``simplified''.
2001-12-05 09:21:15 +00:00
Akim Demaille 32f18df511 * src/conflicts.c (flush_shift, resolve_sr_conflict): De-obfuscate
using the good o' techniques: arrays not pointers, variable
locality, BITISSET, RESETBIT etc.
2001-12-05 09:20:55 +00:00
Akim Demaille 19f8d30b9c * src/state.h (SHIFT_SYMBOL): New.
* src/conflicts.c: Use it to deobfuscate.
2001-12-05 09:20:41 +00:00
Akim Demaille 7b106ce5f0 * src/conflicts.c (count_sr_conflicts, count_rr_conflicts)
(print_reductions): De-obfuscate using the good o' techniques:
arrays not pointers, variable locality, BITISSET.
2001-12-05 09:20:22 +00:00
Akim Demaille b5c15946a1 * src/conflicts.c (print_reductions): Arrays, not pointers.
Use BITISSET.
2001-12-05 09:20:07 +00:00
Akim Demaille 980929ba0b * src/conflicts.c (print_reductions): Pessimize, but clarify. 2001-12-05 09:19:53 +00:00
Akim Demaille 4c3791f08d * src/conflicts.c (print_reductions): Improve variable locality. 2001-12-05 09:19:41 +00:00
Akim Demaille a8355549a5 * src/conflicts.c (print_reductions): Pessimize, but clarify. 2001-12-05 09:19:27 +00:00
Akim Demaille 2883204382 * src/conflicts.c (print_reductions): Improve variable locality. 2001-12-05 09:19:13 +00:00
Akim Demaille 825b9e4ef4 * src/state.h (SHIFT_IS_ERROR, SHIFT_IS_GOTO, SHIFT_IS_SHIFT): New.
* src/lalr.c: Use them.
2001-12-05 09:18:57 +00:00
Akim Demaille 57339f0421 * src/LR0.c (augment_automaton): Formatting changes.
Better variable locality.
2001-12-05 09:18:39 +00:00
Akim Demaille 963c0cf62f * src/lalr.c (matrix_print): New.
(transpose): Use it.
Use arrays instead of pointers.
2001-12-05 09:18:25 +00:00
Akim Demaille 6a1e01f060 * src/lalr.c (maxrhs): Move to...
* src/gram.c, src/gram.h (ritem_longest_rhs): here.
* src/lalr.c (build_relations): Adjust.
2001-12-05 09:18:12 +00:00
Akim Demaille 4cecb5a248 * src/lalr.c (transpose): Free the memory allocated to the
argument, as it is replaced by the results by the unique caller.
(build_relations): Merely invoke transpose: it handles the memory
deallocation.
Improve variable locality.
Avoid variables used as mere abbreviations.
(compute_lookaheads): Use arrays instead of pointers.
2001-12-05 09:17:50 +00:00
Akim Demaille 76c97f6a39 * src/lalr.c (initialize_F): Improve variable locality.
Avoid variables used as mere abbreviations.
2001-12-05 09:17:34 +00:00
Akim Demaille e4ef7aa1c9 * src/derives.c (print_derives): Display the ruleno.
* src/lalr.c (initialize_F, transpose): Better variable locality
to improve readability.
Avoid variables used as mere abbreviations.
2001-12-05 09:17:20 +00:00
Akim Demaille 3557477440 * src/lalr.c (traverse): Use arrays instead of pointers. 2001-12-05 09:17:05 +00:00
Akim Demaille 4b412c9eca * src/nullable.c (set_nullable): Use a for loop to de-obfuscate
the handling of squeue.
`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
2001-12-05 09:16:51 +00:00
Akim Demaille fa7f94f217 Because useless nonterminals are now kept alive (instead of being
`destroyed'), we now sometimes examine them, and store information
related to them.  Hence we need to know their number, and adjust
memory allocations.
* src/reduce.c, src/reduce.h (nuseless_nonterminals): No longer
static.
* src/LR0.c (allocate_itemsets): The memory allocated to
`symbol_count' was used for two different purpose: once to count
the number of occurrences of each symbol, and later reassigned to
`shift_symbol', containing the symbol that can be shifted from a
given state.
Deobfuscate, i.e., allocate, use and free `symbol_count' here
only, and...
(new_itemsets): Allocate `shift_symbol' here.
(allocate_itemsets): symbol_count includes useless nonterminals.
Make room for them.
(free_storage): Use `free', not `XFREE', for pointers that cannot
be null.
2001-12-05 09:16:37 +00:00
Akim Demaille d854cc9e5a * src/nullable.c (set_nullable): Deobfuscate the handling of
ritem.
`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
2001-12-05 09:16:22 +00:00
Akim Demaille 2dfb4daf9b * src/gram.c, src/gram.h (ritem_print): New.
* src/gram.c (dummy): Remove, now there is actual code in gram.c.
(This useless function was defined only to work around VMS linkers
that can't handle compilation units with variables only).
* src/reduce.c (dump_grammar): Use it to trace the construction of
ritem.
2001-12-05 09:16:07 +00:00
Paul Eggert cc904af579 * src/bison.simple (union yyalloc): Change member names
to be the same as the stack names.
(yyparse): yyptr is now union yyalloc *, not char *.
(YYSTACK_RELOCATE): Likewise.  This avoids a GCC warning,
and may generate better code on some machines.
2001-12-04 14:06:43 +00:00
Paul Eggert 716c50b877 * src/bison.simple (union yyalloc): Change member names
to be the same as the stack names.
(YYPOINTER): Remove.
(yyparse): yyptr is now union yyalloc *, not char *.
(YYSTACK_RELOCATE): Likewise.  This avoids a GCC warning,
and may generate better code on some machines.
2001-12-04 14:06:06 +00:00
Paul Eggert 9f41bcaae8 * src/bison.simple (YYPOINTER): New macro.
(YYSTACK_RELOCATE): Use it to avoid a GCC warning.
(yystpcpy): Use prototype if __STDC__ is defined, not just
if __cplusplus is defined.
2001-12-04 13:28:51 +00:00
Paul Eggert 1ccbf4bb8b (YYPOINTER): New macro.
(YYSTACK_RELOCATE): Use it to avoid a GCC warning.
(yystpcpy): Use prototype if __STDC__ is defined, not just
if __cplusplus is defined.
2001-12-04 13:28:18 +00:00
Akim Demaille a69f6fa569 * configure.in (WARNING_CFLAGS): Add -Werror when possible.
(CFLAGS): Do not include the WARNING_CFLAGS here, since GNU
Gettext doesn't compile cleanly, and dies with -Werror.
* src/Makefile.am, lib/Makefile.am, tests/atlocal.in (CFLAGS):
Include WARNING_CFLAGS here.
* lib/xstrdup.c: Include xalloc.h, so that xstrdup be declared
before being defined.
2001-11-30 14:23:47 +00:00
Akim Demaille 3757d84e90 * lib/quotearg.h (quotearg_n, quotearg_n_style):
First arg is int, not unsigned.
* lib/quotearg.c (quotearg_n, quotearg_n_style): Likewise.
(SIZE_MAX, UINT_MAX): New macros.
(quotearg_n_options): Abort if N is negative.
Avoid overflow check on hosts where size_t is 64 bits and int
is 32 bits, as overflow is impossible there.
Fix off-by-one typo that caused unnecessary reallocation.
2001-11-30 14:04:22 +00:00
Akim Demaille cac4f75e15 Add the missing ChangeLog of the previous checkin. 2001-11-30 13:15:39 +00:00
Akim Demaille fc7ddd2818 * src/bison.simple (YYSTACK_FREE): Use `do {;} while (0)' as empty
if body instead of `;' to pacify GCC's warnings.
2001-11-30 13:14:10 +00:00
Akim Demaille 0ffdf37212 Regen. 2001-11-30 13:10:01 +00:00
Akim Demaille 9e55edfc29 * src/bison.simple (YYSTACK_FREE): Use `do {;} while (0)' as empty
if body instead of `;' to pacify GCC's warnings.
2001-11-30 11:11:08 +00:00
Akim Demaille d39a6b7ca9 Instead of mapping the LHS of unused rules to -1, keep the LHS
valid, but flag the rules as invalid.
* src/gram.h (rule_t): `useful' is a new member.
* src/print.c (print_grammar): Adjust.
* src/derives.c (set_derives): Likewise.
* src/reader.c (packgram, reduce_output): Likewise.
* src/reduce.c (reduce_grammar_tables): Likewise.
* tests/reduce.at (Underivable Rules, Useless Rules): New.
2001-11-30 10:46:08 +00:00
Akim Demaille d287d66a69 * src/reduce.c (reduce_output): Formatting changes.
* src/print.c (print_results, print_grammar): Likewise.
* tests/regression.at (Rule Line Numbers)
(Solved SR Conflicts, Unresolved SR Conflicts): Adjust.
2001-11-30 10:45:45 +00:00
Akim Demaille ea451a17d7 * src/reduce.c (nonterminals_reduce): Instead of throwing away
useless nonterminals, move them at the end of the symbol arrays.
(reduce_output): Adjust.
* tests/reduce.at (Useless Nonterminals): Adjust.
2001-11-30 10:45:28 +00:00
Akim Demaille 24b1e65f04 * src/reduce.c: Various comment/formatting changes.
(nonterminals_reduce): New, extracted from...
(reduce_grammar_tables): here.
(reduce_grammar): Call nonterminals_reduce.
2001-11-30 10:45:14 +00:00
Paul Eggert 7ad28769d6 (YYSTACK_REALLOC): Remove.
(YYSTACK_ALLOC): Resurrect this macro, with its old meaning.
(YYSTACK_FREE, YYSTACK_GAP_MAX, YYSTACK_BYTES, YYSTACK_RELOCATE):
New macros.
(union yyalloc): New type.
(__yy_memcpy): Last arg is size_t, not unsigned int, to remove
an arbitrary restriction on hosts where size_t is wider than int.

(yyparse): Don't dump core if alloca or malloc fails; instead, report
a parser stack overflow.  Allocate just one block of memory for all
three stacks, instead of allocating three blocks; this typically is
faster and reduces fragmentation.

Do not limit the number of items in the stack to a value that fits
in 'int', as this is an arbitrary limit on hosts with 64-bit
size_t and 32-bit int.
2001-11-30 02:47:56 +00:00
Paul Eggert 57d4ee2b82 * src/bison.simple (YYSTACK_REALLOC): Remove.
(YYSTACK_ALLOC): Resurrect this macro, with its old meaning.
(YYSTACK_FREE, YYSTACK_GAP_MAX, YYSTACK_BYTES, YYSTACK_RELOCATE):
New macros.
(union yyalloc): New type.
(__yy_memcpy): Last arg is size_t, not unsigned int, to remove
an arbitrary restriction on hosts where size_t is wider than int.

(yyparse): Don't dump core if alloca or malloc fails; instead, report
a parser stack overflow.  Allocate just one block of memory for all
three stacks, instead of allocating three blocks; this typically is
faster and reduces fragmentation.

Do not limit the number of items in the stack to a value that fits
in 'int', as this is an arbitrary limit on hosts with 64-bit
size_t and 32-bit int.
2001-11-30 02:45:34 +00:00
Akim Demaille d8a9ec00b8 Regen. 2001-11-28 14:59:32 +00:00
Akim Demaille 872e1b86c4 Typo. 2001-11-28 14:58:05 +00:00
Akim Demaille ad4c2c7a57 * src/LR0.c (shifts_new): New.
(save_shifts, insert_start_shift, augment_automaton): Use it.
2001-11-28 14:57:44 +00:00
Akim Demaille 0785dec2c8 * src/closure.c (closure): b' and ruleno' denote the same value:
keep ruleno only.
2001-11-28 14:57:30 +00:00
Akim Demaille e1828f4f07 * src/closure.c (closure): Instead of looping over word in array
then bits in words, loop over bits in array.
2001-11-28 14:57:16 +00:00
Akim Demaille a816bf3eac * src/closure.c (closure): No longer optimize the special case
where all the bits of `ruleset[r]' are set to 0, to make the code
clearer.
2001-11-28 14:57:02 +00:00
Akim Demaille 2ce6476804 * src/closure.c (closure): r' and c' are new variables, used to
de-obfuscate accesses to RULESET and CORE.
2001-11-28 14:55:38 +00:00
Akim Demaille 457b6d1e72 * src/reduce.c (reduce_print): Use ngettext.
(dump_grammar): Improve the trace accuracy.
2001-11-28 13:38:15 +00:00
Akim Demaille 79ebbdb36a * src/reduce.c (dump_grammar): Don't translate trace messages. 2001-11-28 11:58:00 +00:00
Akim Demaille 0aa2ac9063 * tests/reduce.at (Useless Terminals, Useless Nonterminals): New.
* src/reduce.c (reduce_grammar_tables): Do not free useless tags,
as all tags are free'ed afterwards.
From Enrico Scholz.
2001-11-28 11:42:56 +00:00
Akim Demaille e7d79012ae * src/system.h: Use intl/libgettext.h.
* src/Makefile.am (INCLUDES): Add -I $(top_srcdir).
2001-11-28 10:32:48 +00:00
Paul Eggert eb4a4d73bc * src/bison.simple (YYSTACK_REALLOC): Fix typo that caused us to
use alloca when we didn't want to, and vice versa.
2001-11-27 23:31:47 +00:00
Akim Demaille dee96b5a07 * tests/torture.at (Exploding the Stack Size with Malloc):
s/YYSTACK_USE_ALLOCA_ALLOCA/YYSTACK_USE_ALLOCA/.
2001-11-27 18:57:02 +00:00
Akim Demaille 4bfeeafb00 * src/files.c: Include error.h.
From Hans Aberg.
2001-11-27 18:42:32 +00:00
Marc Autret c18cf8cb26 Revert doc patch. 2001-11-26 19:19:21 +00:00
Akim Demaille 54b982ae70 Bump to 1.30f. 2001-11-26 17:13:05 +00:00
Akim Demaille cf2e198269 Version 1.30e. 2001-11-26 16:47:53 +00:00
Akim Demaille af4483a0ab Typo. 2001-11-26 15:25:10 +00:00
Akim Demaille 674fd9acbc * src/reader.c (readgram): Make sure rules for mid-rule actions
have a lineno equal to that of their host rule.
Reported by Hans Aberg.
* tests/regression.at (Rule Line Numbers): New.
2001-11-26 15:24:06 +00:00
Akim Demaille 6fedd4d1d6 * src/LR0.c (allocate_itemsets): kernel_size contains ints, not
size_ts.
Reported by Hans Aberg.
2001-11-26 13:01:10 +00:00
Akim Demaille abe1baa044 * src/complain.c, src/complain.h (error): Remove, provided by
lib/error.[ch].
2001-11-26 11:26:35 +00:00
Akim Demaille 33285af04d * src/reader.c (read_declarations): Don't abort on tok_illegal,
issue an error message.
* tests/regression.at (Invalid %directive): New.
Reported by Hans Aberg.
2001-11-26 09:49:58 +00:00
Akim Demaille cd7f95831e * configure.in: Invoke AC_FUNC_OBSTACK and AC_FUNC_ERROR_AT_LINE.
* lib/Makefile.am (libbison_a_SOURCES): Adjust.
2001-11-26 09:19:56 +00:00
Akim Demaille 1b9a8440cd * src/conflicts.c (conflicts_print): Don't complain at all when
there are no reduce/reduce conflicts, and as many shift/reduce
conflicts as expected.
* tests/regression.at (%expect right): Adjust.
2001-11-26 09:18:40 +00:00
Marc Autret aead559e00 * doc/bison.texinfo (Mystery Conflicts): Hint '-v' use.
From Golubev I. N.
2001-11-25 12:57:33 +00:00
Akim Demaille 92b69b7f09 * lib/alloca.c: Update, from fileutils. 2001-11-23 14:55:36 +00:00
Akim Demaille 6e303f08d6 * lib/Makefile.am (libbison_a_LIBADD): Add @ALLOCA@. 2001-11-23 14:18:36 +00:00
Akim Demaille 3dfc01e247 Regen. 2001-11-23 14:17:53 +00:00
Akim Demaille 1503820f54 1.30e. 2001-11-23 14:15:42 +00:00
Akim Demaille bc9bb28004 Update. 2001-11-23 14:15:08 +00:00
Akim Demaille 16c4a35041 * src/system.h: Include alloca.h.
* src/main.c (main) [C_ALLOCA]: Call alloca (0).
2001-11-23 14:13:19 +00:00
Akim Demaille f0451dba71 * src/print_graph.c (print_actions): Remove `rule', unused.
* src/LR0.c (kernel_size): Contain `int' instead of `size_t' to
pacify GCC's signed < unsigned warnings.
* src/closure.c (itemsetsize): Likewise.
* src/reader.c (symbol_list_new): Static.
2001-11-23 14:04:08 +00:00
Akim Demaille a9f37dee0c Attaching lineno to buckets is stupid, since only one copy of each
symbol is kept, only the line of the first occurrence is kept too.
* src/symtab.h, src/symtab.c (bucket): Remove the line member.
* src/reader.c (rline_allocated): Remove, unused.
(symbol_list): Have a `line' member.
(symbol_list_new): New.
(readgram): Use it.
* src/print.c (print_grammar): Output the rule line numbers.
* tests/regression.at (Solved SR Conflicts)
(Unresolved SR Conflicts): Adjust.
Reported by Hans Aberg.
2001-11-23 14:03:43 +00:00
Akim Demaille 4b0979fcf3 Englishoes reported by Jim. 2001-11-21 11:45:51 +00:00
Akim Demaille cc35239e1b Remove all po/ generated files from repository. 2001-11-20 13:30:31 +00:00
Akim Demaille 2e2cbb3fad Remove doc/ generated files from the repository. 2001-11-20 13:29:40 +00:00
Akim Demaille adb4edee47 Version 1.30d. 2001-11-20 13:26:58 +00:00
Akim Demaille 65490badba . 2001-11-20 13:21:23 +00:00
Akim Demaille 8b044b8540 Adjust. 2001-11-20 13:14:13 +00:00
Akim Demaille 0704bc9b8e * po/sv.po: New.
* configure.in (ALL_LINGUAS): Adjust.
* po/POTFILE.in: Remove `nullable.c' and `derives.c' which no
longer contains strings to translate.
2001-11-20 13:10:12 +00:00
Akim Demaille 2b7c2ef124 * src/conflicts.c (conflicts_print): Add a missing n. 2001-11-19 11:07:50 +00:00
Akim Demaille 48e38d301e Formatting changes. 2001-11-19 10:28:25 +00:00
Akim Demaille 560757768c * src/nullable.c (nullable_print): New.
(set_nullable): Call it when tracing.
Better locality of variables.
2001-11-19 09:27:37 +00:00
Akim Demaille 238b8134ec * src/print.c (print_actions): Better locality of variables. 2001-11-19 09:27:24 +00:00
Akim Demaille 483642486d * src/derives.c (print_derives): Fix and enrich.
* src/closure.c (print_fderives): Likewise.
2001-11-19 09:27:11 +00:00
Akim Demaille 146ad4c8d0 * src/closure.c (itemsetend): Remove, replaced with...
(itemsetsize): new.
2001-11-19 09:26:57 +00:00
Akim Demaille f2a4c94506 * src/LR0.c (kernel_end): Remove, replaced with...
(kernel_size): new.
2001-11-19 09:26:43 +00:00
Akim Demaille 65fae038b9 * src/conflicts.c (set_conflicts): Use arrays instead of pointers
to clarify.
2001-11-19 09:26:30 +00:00
Akim Demaille e1cb5fb523 * src/closure.c (closure): Use arrays instead of pointers to clarify. 2001-11-19 09:26:17 +00:00
Akim Demaille 64fabbb49f * src/closure.c, src/derives.c, src/nullable.c: Adjust various
trace messages.
* src/LR0.c: Likewise.
(allocate_itemsets): Use arrays instead of pointers to clarify.
2001-11-19 09:25:36 +00:00
Akim Demaille 3b2925a060 * src/getargs.c (statistics_flag): Replace with...
(trace_flag): New.
(longopts): Accept --trace instead of --statistics.
* src/getargs.h: Adjust.
* src/LR0.c, src/closure.c, src/derives.c, src/nullable.c,
* src/reduce.c: Use trace_flags instead of the CPP conditional TRACE.
2001-11-19 09:21:26 +00:00
Akim Demaille 83bcf86639 * src/LR0.c (new_itemsets, get_state): Use more arrays and less
pointers to clarify the code.
(save_reductions, save_shifts): Factor common parts of alternatives.
2001-11-19 09:17:53 +00:00
Akim Demaille 8639df64a6 * src/LR0.c (new_state, get_state): Complete TRACE code.
* src/closure.c: Include `reader.h' to get `tags', needed by the
trace code.
Rename the conditional DEBUG as TRACE.
Output consistently TRACEs to stderr, not stdout.
* src/derives.c: Likewise.
* src/reduce.c: (inaccessable_symbols): Using if is better style
than goto.
Use `#if TRACE' instead of `#if 0' for tracing code.
2001-11-19 09:16:24 +00:00
Akim Demaille 377bd7c9a2 * src/system.h (LIST_FREE, shortcpy): New.
* src/LR0.c: Use them.
* src/output.c (free_itemsets, free_reductions, free_shifts):
Remove, replaced by LIST_FREE.
2001-11-19 09:14:54 +00:00
Akim Demaille b4a7a230f1 * src/state.h (CORE_ALLOC, SHIFTS_ALLOC, ERRS_ALLOC)
(REDUCTIONS_ALLOC):  New.
* src/LR0.c, src/conflicts.c: Use them to de-obfuscate memory
allocation.
2001-11-19 09:14:26 +00:00
Akim Demaille c1586e58fe * src/LR0.c (new_state): Complete trace code.
* src/nullable.c (set_nullable): Don't translate traces.
2001-11-19 09:14:07 +00:00
Akim Demaille 50766eee39 * src/print_graph.c (print_core): Better locality of variables.
* src/print.c (print_core): Likewise.
2001-11-19 09:13:53 +00:00
Akim Demaille dc3b81cd67 * src/vcg.c: You do the output, so you are responsible of the
handling of VCG syntax, in particular: use quotearg.
* src/print_graph.c: Don't.
(print_actions): Don't output the actions as part of the nodes,
since that's the job of the edges.
(print_state): Don't output by hand: fill the node description,
and ask for its output.
2001-11-19 09:13:40 +00:00
Akim Demaille c555896775 * src/bison.simple (yyparse): When reporting verbosely an error,
no longer issue additional quotes around token names.
* tests/calc.at: Adjust.
2001-11-19 09:13:26 +00:00
Akim Demaille 35f61cb998 * src/symtab.h, src/symtab.c: line' is a new member of bucket'.
* src/reader.c (record_rule_lines, rline, rline_allocated): Remove.
* src/output.c: Adjust.
2001-11-19 09:13:12 +00:00
Akim Demaille 9291f914de * src/gram.h (rprec, rprecsym, rassoc): Remove, now part of...
(rule_t): this.
* src/conflicts.c, src/reader.c, src/reduce.c: Adjust.
2001-11-19 09:12:49 +00:00
Akim Demaille ff1581dddb * src/gram.h (rule_t): New.
(rule_table): New.
(rrhs, rlhs): Remove, part of state_t.
* src/print_graph.c, src/closure.c, src/conflicts.c, src/derives.c,
* src/lalr.c, src/nullable.c, src/output.c, src/print.c,
* src/reader.c, src/reduce.c: Adjust.
2001-11-19 09:12:25 +00:00
Akim Demaille 4b9170b2c0 * src/reader.c (symbols_output): New, extracted from...
(packsymbols): Here.
(reader): Call it.
2001-11-19 09:12:02 +00:00
Akim Demaille 523a9eafdc * src/lalr.c (set_maxrhs, maxrhs): Remove, replaced with...
(maxrhs): this new function.
2001-11-19 09:11:47 +00:00
Akim Demaille bcdf932ed9 * src/lalr.c (F): New macro to access to the variable F.
Adjust.
2001-11-19 09:11:34 +00:00
Akim Demaille e2aabb3dc6 * src/lalr.h (LA): New macro to access to the variable LA.
* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
* src/lalr.c: Adjust.
2001-11-19 09:11:21 +00:00
Akim Demaille e8ebe4b0c7 * src/lalr.c (initialize_LA): Only initialize LA. Let...
(set_state_table): handle the `lookaheads' members.
2001-11-19 09:11:03 +00:00
Akim Demaille 9043475828 * src/lalr.h (lookaheads): Removed array, which contents is now
member of...
(state_t): this structure.
* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
Adjust.
2001-11-19 09:10:47 +00:00
Akim Demaille d80a86e0b5 * src/lalr.h (consistent): Removed array, which contents is now
member of...
(state_t): this structure.
* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
Adjust.
2001-11-19 09:10:30 +00:00
Akim Demaille cfc3acf242 * src/lalr.h (reduction_table, shift_table): Removed arrays, which
contents is now members of...
(state_t): this structure.
* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
Adjust.
2001-11-19 09:10:12 +00:00
Akim Demaille 93337ac41c * src/lalr.h (state_t): New.
(state_table): Be a state_t * instead of a core **.
(accessing_symbol): Remove, part of state_t.
* src/lalr.c: Adjust.
(set_accessing_symbol): Merge into...
(set_state_table): this.
* src/print_graph.c, src/conflicts.c: Adjust.
2001-11-19 09:08:44 +00:00
Akim Demaille 0d7803637b Bump to 1.30d. 2001-11-14 17:52:37 +00:00
Akim Demaille a62c863ec3 . 2001-11-14 15:35:09 +00:00
Akim Demaille 1e883de90c Version 1.30c. 2001-11-14 15:25:51 +00:00
Akim Demaille efcff8cd5c * tests/calc.at, tests/output.at, tests/regression.at,
* tests/testsuite.at, tests/torture.at: Rely on Autotest 2.52g:
now the tests are run in private dirs, therefore AC_CLEANUP and
family can be simplified to 0-ary.
* tests/atlocal.in: Now that we run `elsewhere' than in tests/,
use abs. path to find config.h.
2001-11-14 15:16:40 +00:00
Akim Demaille 3e85a00236 * src/bison.simple (yyparse): Let yyls1, yyss1 and yyvs1 be
defined only if yyoverflow is defined, to avoid `warning: unused
variable `yyvs1''.
Reported by The Test Suite.
2001-11-14 14:57:06 +00:00
Akim Demaille f85c981ac1 * src/print.c: Include reduce.h.
Reported by Hans Aberg.
2001-11-14 14:43:29 +00:00
Akim Demaille 5cb10dae3c * src/lex.c, src/lex.h (token_buffer, unlexed_token_buffer):
Revert a previous patch:  these are really const.
* src/conflicts.c (conflict_report): Additional useless pair of
braces to pacify GCC's warnings for `if () if () {} else {}'.
* src/lex.c (parse_percent_token): Replace equal_offset with
arg_offset.
arg is const.
Be sure to strdup `arg' when used, since there is no reason for
token_buffer not to change.
2001-11-14 14:42:14 +00:00
Akim Demaille 26e1ca45ba * src/system.h (EXIT_SUCCESS, EXIT_FAILURE): Ensure a proper
definition.
* src/main.c (main): Use them.
Suggested by Hans Aberg.
2001-11-14 14:14:48 +00:00
Akim Demaille 8888e43b2c Bump to 1.30c. 2001-11-12 10:31:00 +00:00
Akim Demaille d9ca2df2aa . 2001-11-12 10:21:45 +00:00
Akim Demaille e8def3ff6e Version 1.30b. 2001-11-12 10:16:50 +00:00
Akim Demaille 76e734e5ed Adjust ngettext default. 2001-11-12 10:11:49 +00:00
Akim Demaille b8b4a730a0 Typo. 2001-11-12 09:58:30 +00:00
Akim Demaille b9d2d2a881 Version 1.30b.
* config/config.guess, config/config.sub, po/*.po: Update.
* src/system.h (ngettext): Now that we use ngettext, be sure to
provide a default definition when NLS are not used.
2001-11-12 09:56:20 +00:00
Akim Demaille 78986eff74 Version 1.30b.
* config/config.guess, config/config.sub, po/*.po: Update.
2001-11-12 09:42:14 +00:00
Akim Demaille 1393a78454 Typos. 2001-11-12 09:36:17 +00:00
Akim Demaille de11686376 * doc/bison.texinfo: Use $' as shell prompt, not %'.
Use @kbd to denote user input.
(Language and Grammar): ANSIfy the example.
Adjust its layout for info/notinfo.
(Location Tracking Calc): Output error messages to stderr.
Output locations in a more GNUtically correct way.
Fix a couple of Englishos.
Adjust @group/@end group pairs.
2001-11-12 09:20:35 +00:00
Akim Demaille badfc69c26 %expext was not functioning at all.
* src/conflicts.c (expected_conflicts): Set to -1.
(conflict_report): Use ngettext.
(conflicts_print): Check %expect and make its violation an error.
* doc/bison.texinfo (Expect Decl): Adjust.
* configure.in (AM_GNU_GETTEXT): Ask for ngettext.
* tests/regression.at (%expect not enough, %expect right)
(%expect too much): New.
2001-11-12 09:19:48 +00:00
Akim Demaille fb28699f95 * tests/regression.at (Conflicts): Rename as...
(Unresolved SR Conflicts): this.
(Solved SR Conflicts): New.
2001-11-12 09:16:10 +00:00
Akim Demaille 6b307af66c * src/reduce.c (print_results): Rename as...
(reduce_output): This.
Output to OUT, passed as argument, instead of output_obstack.
(dump_grammar): Likewise.
(reduce_free): New.
Also free V1.
(reduce_grammar): No longer call reduce_output, since...
* src/print.c (print_results): do it.
* src/main.c (main): Call reduce_free;
2001-11-12 09:15:57 +00:00
Akim Demaille dad56b10d3 * src/conflicts.c (print_reductions): Accept OUT as argument.
Output to it, not to output_obstack.
* src/print.c (print_actions): Adjust.
2001-11-12 09:15:43 +00:00
Akim Demaille 5f1ff7cd74 * src/conflicts.c (count_sr_conflicts, count_rr_conflicts): Return
the result instead of using...
(src_total, rrc_total, src_count, rrc_count): Remove.
(any_conflicts): Remove.
(print_conflicts): Split into...
(conflicts_print, conflicts_output): New.
* src/conflicts.h: Adjust.
* src/main.c (main): Invoke both conflicts_output and conflicts_print.
* src/print.c (print_grammar): Issue `n' between to rule outputs.
* tests/regression.at (Conflicts): New.
Reported by Tom Lane.
2001-11-12 09:15:25 +00:00
Akim Demaille b6cac93afa * tests/regression.at (Invalid input): Remove, duplicate with
``Invalid input: 1''.
2001-11-12 09:15:03 +00:00
Akim Demaille 86d5a1ed5c * tests/torture.at (AT_DATA_STACK_TORTURE)
(Exploding the Stack Size with Alloca)
(Exploding the Stack Size with Malloc): New.
2001-11-12 09:14:50 +00:00
Akim Demaille 97e9ee3ad5 * src/bison.simple (YYSTACK_REALLOC): New.
(yyparse) [!yyoverflow]: Use it and free the old stack.
Reported by FIXME: Who.
2001-11-12 09:14:35 +00:00
Akim Demaille d81e5db73f Bump to 1.30b. 2001-11-05 15:15:47 +00:00
Akim Demaille 029806c785 . 2001-11-05 10:15:57 +00:00
Akim Demaille a2874a4e5d Regen. 2001-11-05 10:12:42 +00:00
Akim Demaille d54387b4bc Version 1.30a.
* src/lex.c (parse_percent_token): s/quotearg/quote/.
2001-11-05 10:06:27 +00:00
Akim Demaille a4c22fa4bf Version 1.30a. 2001-11-05 09:55:38 +00:00
Akim Demaille 0d214b93b0 Regen. 2001-11-05 09:29:10 +00:00
Akim Demaille 3c5d71ca8b * tests/regression.at (AT_TEST_CPP_GUARD_H): Adjust the clean up
pattern.
2001-11-05 09:18:31 +00:00
Akim Demaille d61c57b70c * src/reader.c (parse_union_decl): Output yystype/YYSTYPE as we do
with yyltype/YYLTYPE.  This allows inclusion of the generated
header within the parser if the compiler, such as GGC, accepts
multiple equivalent #defines.
2001-11-05 09:12:38 +00:00
Akim Demaille ea57e0a3c4 * src/getargs.c (longopts): Support `--output'. getopt is now
able to understand that `--out' is OK: the two racing long options
are aliases.
(usage): Adjust.
* src/lex.h (tok_setopt): Remove, replaced with...
(tok_intopt, tok_stropt): these new guys.
* src/lex.c (getopt.h): Not needed.
(token_buffer, unlexed_token_buffer): Not const.
(percent_table): Promote `-' over `_' in directive names.
Active `%name-prefix', `file-prefix', and `output'.
(parse_percent_token): Accept possible arguments to directives.
Promote `-' over `_' in directive names.
* doc/bison.texinfo (Decl Summary): Split the list into
`directives for grammars' and `directives for bison'.
Sort'em.
Add description of `%name-prefix', `file-prefix', and `output'.
Promote `-' over `_' in directive names.
(Bison Options): s/%locactions/%locations/.  Nice Freudian slip.
Simplify the description of `--name-prefix'.
Promote `-' over `_' in directive names.
Promote `--output' over `--output-file'.
Fix the description of `--defines'.
* tests/output.at: Exercise %file-prefix and %output.
2001-11-04 16:26:59 +00:00
Akim Demaille 57c429f305 * doc/refcard.tex: Update. 2001-11-02 17:18:52 +00:00
Akim Demaille 239e5c1a9a * src/symtab.h (SUNDEF): New.
* src/symtab.c (bucket_new): Init user_token_number to SUNDEF to
stand for `uninitialized', instead of 0.
* src/reader.c (packsymbols, parse_thong_decl): Adjust.
* src/lex.c (lex): Adjust.
* tests/calc.at (_AT_DATA_CALC_Y): Declare a token for EOF.
Number it 0.
Let yylex return it instead of a plain 0.
Reported by Dick Streefland.
2001-11-02 15:26:33 +00:00
Akim Demaille ae9b5e5a4f * tests/regression.at (Mixing %token styles): New test. 2001-11-02 14:12:42 +00:00
Akim Demaille 7ae1c5929e * src/reader.c (parse_thong_decl): Formatting changes.
(token_translations_init): New, extracted from...
(packsymbols): Here.
Adjust.
2001-11-02 14:02:31 +00:00
Akim Demaille 1d708336d4 * tests/regression.at (AT_TEST_CPP_GUARD_H): New.
Check that `9foo.y' produces correct cpp guards.
* src/files.c (compute_header_macro): Prepend `BISON_' to CPP
guards.
Reported by Wwp.
2001-11-01 18:29:36 +00:00
Akim Demaille 705131d1de * tests/regression.at (Invalid input: 2): New.
* src/lex.c (unlexed_token_buffer): New.
(lex, unlex): Adjust: when unlexing, be sure to save token_buffer
too.
Reported by Wwp.
2001-11-01 18:03:46 +00:00
Akim Demaille 5c2a5a8970 Update. 2001-11-01 14:35:28 +00:00
Akim Demaille 6b784f8552 * configure.in: Bump to 1.30a.
Adjust to newer Autotest.
2001-11-01 14:27:42 +00:00
Akim Demaille 32a1edfccd . 2001-10-29 09:01:49 +00:00
Akim Demaille 63cf44e7ac Update and Regen. 2001-10-29 08:51:57 +00:00
Akim Demaille 9507085cf3 Regen. 2001-10-26 14:33:02 +00:00
Akim Demaille 8d3c8c3643 Version 1.30. 2001-10-26 13:43:20 +00:00
Akim Demaille 16c9da79ef Update. 2001-10-26 13:29:29 +00:00
Akim Demaille d0132d6bec Regen. 2001-10-26 13:10:17 +00:00
Paul Eggert 1306676ce3 Sync with fileutils 4.1.1. 2001-10-26 07:04:29 +00:00
Akim Demaille e18cda8b5e . 2001-10-18 16:21:33 +00:00
Akim Demaille ddf896eb8e Version 1.29f.
* tests/calc.at (_AT_CHECK_CALC_ERROR): Don't use `foo && bar', to
avoid spurious failures.
2001-10-18 16:18:54 +00:00
Akim Demaille 9aadbdf371 . 2001-10-18 15:29:38 +00:00
129 changed files with 12833 additions and 13464 deletions
+1205
View File
File diff suppressed because it is too large Load Diff
+15
View File
@@ -1,3 +1,18 @@
## 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
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## This program 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 this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
## 02111-1307 USA
## Process this file with automake to produce Makefile.in -*-Makefile-*- ## Process this file with automake to produce Makefile.in -*-Makefile-*-
AUTOMAKE_OPTIONS = 1.5 check-news readme-alpha dist-bzip2 AUTOMAKE_OPTIONS = 1.5 check-news readme-alpha dist-bzip2
+54 -51
View File
@@ -1,4 +1,5 @@
# Makefile.in generated automatically by automake 1.5a from Makefile.am. # Makefile.in generated by automake 1.5c from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
@@ -12,7 +13,6 @@
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@ @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
@@ -47,6 +47,7 @@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA) INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@ transform = @program_transform_name@
@@ -83,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@ INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@ INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LIB = @LIB@
LIBICONV = @LIBICONV@ LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@ MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@ MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
@@ -96,6 +97,7 @@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@ USE_NLS = @USE_NLS@
VERSION = @VERSION@ VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CFLAGS = @WARNING_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
am__include = @am__include@ am__include = @am__include@
am__quote = @am__quote@ am__quote = @am__quote@
install_sh = @install_sh@ install_sh = @install_sh@
@@ -136,9 +138,9 @@ RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
uninstall-info-recursive all-recursive install-data-recursive \ uninstall-info-recursive all-recursive install-data-recursive \
install-exec-recursive installdirs-recursive install-recursive \ install-exec-recursive installdirs-recursive install-recursive \
uninstall-recursive check-recursive installcheck-recursive uninstall-recursive check-recursive installcheck-recursive
DIST_COMMON = README ./stamp-h.in ABOUT-NLS AUTHORS COPYING ChangeLog \ DIST_COMMON = README ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL \
INSTALL Makefile.am Makefile.in NEWS README-alpha THANKS \ Makefile.am Makefile.in NEWS THANKS aclocal.m4 config.hin \
aclocal.m4 config.hin configure configure.in configure configure.in
DIST_SUBDIRS = $(SUBDIRS) DIST_SUBDIRS = $(SUBDIRS)
all: config.h all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive $(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -148,9 +150,7 @@ $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \ cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile $(AUTOMAKE) --gnu Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \ cd $(top_builddir) && $(SHELL) ./config.status $@
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$@ $(SHELL) ./config.status
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck $(SHELL) ./config.status --recheck
@@ -159,33 +159,25 @@ $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENC
$(ACLOCAL_M4): configure.in m4/c-bs-a.m4 m4/codeset.m4 m4/dmalloc.m4 m4/error.m4 m4/gettext.m4 m4/glibc21.m4 m4/iconv.m4 m4/isc-posix.m4 m4/lcmessage.m4 m4/malloc.m4 m4/mbrtowc.m4 m4/mbstate_t.m4 m4/prereq.m4 m4/progtest.m4 m4/realloc.m4 m4/strerror_r.m4 m4/warning.m4 $(ACLOCAL_M4): configure.in m4/c-bs-a.m4 m4/codeset.m4 m4/dmalloc.m4 m4/error.m4 m4/gettext.m4 m4/glibc21.m4 m4/iconv.m4 m4/isc-posix.m4 m4/lcmessage.m4 m4/malloc.m4 m4/mbrtowc.m4 m4/mbstate_t.m4 m4/prereq.m4 m4/progtest.m4 m4/realloc.m4 m4/strerror_r.m4 m4/warning.m4
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.h: stamp-h
config.h: stamp-h1
@if test ! -f $@; then \ @if test ! -f $@; then \
rm -f stamp-h; \ rm -f stamp-h1; \
$(MAKE) stamp-h; \ $(MAKE) stamp-h1; \
else :; fi else :; fi
stamp-h: $(srcdir)/config.hin $(top_builddir)/config.status
@rm -f stamp-h stamp-hT stamp-h1: $(srcdir)/config.hin $(top_builddir)/config.status
@echo timestamp > stamp-hT 2> /dev/null @rm -f stamp-h1
cd $(top_builddir) \ cd $(top_builddir) && $(SHELL) ./config.status config.h
&& CONFIG_FILES= CONFIG_HEADERS=config.h:config.hin \
$(SHELL) ./config.status $(srcdir)/config.hin: $(top_srcdir)/configure.in $(ACLOCAL_M4)
@mv stamp-hT stamp-h
$(srcdir)/config.hin: $(srcdir)/./stamp-h.in
@if test ! -f $@; then \
rm -f $(srcdir)/./stamp-h.in; \
$(MAKE) $(srcdir)/./stamp-h.in; \
else :; fi
$(srcdir)/./stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4)
@rm -f $(srcdir)/./stamp-h.in $(srcdir)/./stamp-h.inT
@echo timestamp > $(srcdir)/./stamp-h.inT 2> /dev/null
cd $(top_srcdir) && $(AUTOHEADER) cd $(top_srcdir) && $(AUTOHEADER)
@mv $(srcdir)/./stamp-h.inT $(srcdir)/./stamp-h.in touch $(srcdir)/config.hin
distclean-hdr: distclean-hdr:
-rm -f config.h -rm -f config.h
intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status cd $(top_builddir) && $(SHELL) ./config.status $@
uninstall-info-am: uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd # This directory's subdirectories are mostly independent; you can cd
@@ -246,13 +238,13 @@ tags-recursive:
tags: TAGS tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) ' { files[$$0] = 1; } \ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
mkid -fID $$unique $(LISP) mkid -fID $$unique
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
@@ -263,14 +255,14 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
fi; \ fi; \
done; \ done; \
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) ' { files[$$0] = 1; } \ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)config.hin$$unique$(LISP)$$tags" \ test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| etags $(ETAGS_ARGS) $$tags config.hin $$unique $(LISP) || etags $(ETAGS_ARGS) $$tags $$unique
GTAGS: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \ here=`$(am__cd) $(top_builddir) && pwd` \
@@ -279,14 +271,18 @@ GTAGS:
distclean-tags: distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = . top_distdir = .
# Avoid unsightly `./'.
distdir = $(PACKAGE)-$(VERSION) distdir = $(PACKAGE)-$(VERSION)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
GZIP_ENV = --best GZIP_ENV = --best
distcleancheck_listfiles = find . -type f -print
distdir: $(DISTFILES) distdir: $(DISTFILES)
@if sed 15q $(srcdir)/NEWS | fgrep -e "$(VERSION)" >/dev/null; \ @if sed 15q $(srcdir)/NEWS | fgrep -e "$(VERSION)" >/dev/null; \
@@ -294,11 +290,11 @@ distdir: $(DISTFILES)
echo "NEWS not updated; not releasing" 1>&2; \ echo "NEWS not updated; not releasing" 1>&2; \
exit 1; \ exit 1; \
fi fi
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir) $(am__remove_distdir)
mkdir $(distdir) mkdir $(distdir)
$(mkinstalldirs) $(distdir)/intl $(distdir)/po $(distdir)/tests $(mkinstalldirs) $(distdir)/intl $(distdir)/po $(distdir)/tests
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
$(mkinstalldirs) "$(distdir)/$$dir"; \ $(mkinstalldirs) "$(distdir)/$$dir"; \
@@ -332,22 +328,22 @@ distdir: $(DISTFILES)
|| chmod -R a+r $(distdir) || chmod -R a+r $(distdir)
dist-gzip: distdir dist-gzip: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir) $(am__remove_distdir)
dist-bzip2: distdir dist-bzip2: distdir
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2 $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir) $(am__remove_distdir)
dist dist-all: distdir dist dist-all: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2 $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir) $(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then # This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another # it guarantees that the distribution is self-contained by making another
# tarfile. # tarfile.
distcheck: dist distcheck: dist
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir) $(am__remove_distdir)
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
chmod -R a-w $(distdir); chmod a+w $(distdir) chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/=build mkdir $(distdir)/=build
@@ -357,6 +353,7 @@ distcheck: dist
&& cd $(distdir)/=build \ && cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \ && ../configure --srcdir=.. --prefix=$$dc_install_base \
--with-included-gettext \ --with-included-gettext \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -368,15 +365,20 @@ distcheck: dist
find $$dc_install_base -type f -print ; \ find $$dc_install_base -type f -print ; \
exit 1; } >&2 ) \ exit 1; } >&2 ) \
&& $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
&& $(MAKE) $(AM_MAKEFLAGS) distclean \
&& rm -f $(distdir).tar.gz \ && rm -f $(distdir).tar.gz \
&& (test `find . -type f -print | wc -l` -eq 0 \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|| { echo "ERROR: files left after distclean:" ; \ $(am__remove_distdir)
find . -type f -print ; \
exit 1; } >&2 )
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
@echo "$(distdir).tar.gz is ready for distribution" | \ @echo "$(distdir).tar.gz is ready for distribution" | \
sed 'h;s/./=/g;p;x;p;x' sed 'h;s/./=/g;p;x;p;x'
distcleancheck: distclean
if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am check-am: all-am
check: check-recursive check: check-recursive
all-am: Makefile config.h all-am: Makefile config.h
@@ -394,6 +396,7 @@ install-am: all-am
installcheck: installcheck-recursive installcheck: installcheck-recursive
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \ `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
@@ -448,9 +451,9 @@ uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \ .PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
clean-generic clean-recursive dist dist-all dist-bzip2 \ clean-generic clean-recursive dist dist-all dist-bzip2 \
dist-gzip distcheck distclean distclean-generic distclean-hdr \ dist-gzip distcheck distclean distclean-generic distclean-hdr \
distclean-recursive distclean-tags distdir dvi dvi-am \ distclean-recursive distclean-tags distcleancheck distdir dvi \
dvi-recursive info info-am info-recursive install install-am \ dvi-am dvi-recursive info info-am info-recursive install \
install-data install-data-am install-data-recursive \ install-am install-data install-data-am install-data-recursive \
install-exec install-exec-am install-exec-recursive \ install-exec install-exec-am install-exec-recursive \
install-info install-info-am install-info-recursive install-man \ install-info install-info-am install-info-recursive install-man \
install-recursive install-strip installcheck installcheck-am \ install-recursive install-strip installcheck installcheck-am \
+97 -8
View File
@@ -1,7 +1,91 @@
Bison News Bison News
---------- ----------
Changes in version 1.29e: Changes in version 1.31, 2002-01-14:
* Many Bug Fixes
* GNU Gettext and %expect
GNU Gettext asserts 10 s/r conflicts, but there are 7. Now that
Bison dies on incorrect %expectations, we fear there will be
too many bug reports for Gettext, so _for the time being_, %expect
does not trigger an error when the input file is named `plural.y'.
* Use of alloca in parsers
If YYSTACK_USE_ALLOCA is defined to 0, then the parsers will use
malloc exclusively. Since 1.29, but was not NEWS'ed.
alloca is used only when compiled with GCC, to avoid portability
problems as on AIX.
* When the generated parser lacks debugging code, YYDEBUG is now 0
(as POSIX requires) instead of being undefined.
* User Actions
Bison has always permitted actions such as { $$ = $1 }: it adds the
ending semicolon. Now if in Yacc compatibility mode, the semicolon
is no longer output: one has to write { $$ = $1; }.
* Better C++ compliance
The output parsers try to respect C++ namespaces.
* Reduced Grammars
Fixed bugs when reporting useless nonterminals.
* 64 bit hosts
The parsers work properly on 64 bit hosts.
* Error messages
Some calls to strerror resulted in scrambled or missing error messages.
* %expect
When the number of shift/reduce conflicts is correct, don't issue
any warning.
* The verbose report includes the rule line numbers.
* Rule line numbers are fixed in traces.
* Swedish translation
* Parse errors
Verbose parse error messages from the parsers are better looking.
Before: parse error: unexpected `'/'', expecting `"number"' or `'-'' or `'(''
Now: parse error: unexpected '/', expecting "number" or '-' or '('
* Fixed parser memory leaks.
When the generated parser was using malloc to extend its stacks, the
previous allocations were not freed.
* Fixed verbose output file.
Some newlines were missing.
Some conflicts in state descriptions were missing.
* Fixed conflict report.
Option -v was needed to get the result.
* %expect
Was not used.
Mismatches are errors, not warnings.
* Fixed incorrect processing of some invalid input.
* Fixed CPP guards: 9foo.h uses BISON_9FOO_H instead of 9FOO_H.
* Fixed some typos in the documentation.
* %token MY_EOF 0 is supported.
Before, MY_EOF was silently renumbered as 257.
* doc/refcard.tex is updated.
* %output, %file-prefix, %name-prefix.
New.
* --output
New, aliasing `--output-file'.
Changes in version 1.30, 2001-10-26:
* `--defines' and `--graph' have now an optionnal argument which is the * `--defines' and `--graph' have now an optionnal argument which is the
output file name. `-d' and `-g' do not change, they do not take any output file name. `-d' and `-g' do not change, they do not take any
@@ -10,11 +94,9 @@ Changes in version 1.29e:
* `%source_extension' and `%header_extension' are removed, failed * `%source_extension' and `%header_extension' are removed, failed
experiment. experiment.
* The test suite is more portable. * Portability fixes.
* Better portability. Changes in version 1.29, 2001-09-07:
Changes in version 1.29:
* The output file does not define const, as this caused problems when used * The output file does not define const, as this caused problems when used
with common autoconfiguration schemes. If you still use ancient compilers with common autoconfiguration schemes. If you still use ancient compilers
@@ -45,8 +127,11 @@ Changes in version 1.29:
* New directives. * New directives.
`%yacc', `%fixed_output_files', `%defines', `%no_parser', `%verbose', `%yacc', `%fixed_output_files', `%defines', `%no_parser', `%verbose',
`%debug', `%source_extension' and `%header_extension'. `%debug', `%source_extension' and `%header_extension'.
* @$
Automatic location tracking.
Changes in version 1.28: Changes in version 1.28, 1999-07-06:
* Should compile better now with K&R compilers. * Should compile better now with K&R compilers.
@@ -78,7 +163,7 @@ Changes in version 1.26:
* Generated parsers should now work even on operating systems which do * Generated parsers should now work even on operating systems which do
not provide alloca(). not provide alloca().
Changes in version 1.25: Changes in version 1.25, 1995-10-16:
* Errors in the input grammar are not fatal; Bison keeps reading * Errors in the input grammar are not fatal; Bison keeps reading
the grammar file, and reports all the errors found in it. the grammar file, and reports all the errors found in it.
@@ -119,3 +204,7 @@ Changes in version 1.22:
Changes in version 1.20: Changes in version 1.20:
Output file does not redefine const for C++. Output file does not redefine const for C++.
Local Variables:
mode: outline
End:
+14 -1
View File
@@ -2,12 +2,16 @@ Bison was originally written by Robert Corbett. It would not be what
it is today without the invaluable help of these people: it is today without the invaluable help of these people:
Airy Andre [email protected] Airy Andre [email protected]
Akim Demaille akim@epita.fr Akim Demaille akim@freefriends.org
Albert Chin-A-Young [email protected] Albert Chin-A-Young [email protected]
Alexander Belopolsky [email protected] Alexander Belopolsky [email protected]
Arnold Robbins [email protected]
Daniel Hagerty [email protected] Daniel Hagerty [email protected]
David J. MacKenzie [email protected] David J. MacKenzie [email protected]
Dick Streefland [email protected]
Enrico Scholz [email protected]
Fabrice Bauzac [email protected] Fabrice Bauzac [email protected]
H. Merijn Brand [email protected]
Hans Aberg [email protected] Hans Aberg [email protected]
Jesse Thilo [email protected] Jesse Thilo [email protected]
Jim Meyering [email protected] Jim Meyering [email protected]
@@ -15,14 +19,23 @@ Juan Manuel Guerrero [email protected]
Keith Browne [email protected] Keith Browne [email protected]
Laurent Mascherpa [email protected] Laurent Mascherpa [email protected]
Marc Autret [email protected] Marc Autret [email protected]
Mike Castle [email protected]
Neil Booth [email protected] Neil Booth [email protected]
Nelson H. F. Beebe [email protected]
Noah Friedman [email protected] Noah Friedman [email protected]
Pascal Bart [email protected] Pascal Bart [email protected]
Paul Eggert [email protected] Paul Eggert [email protected]
Per Allansson [email protected]
Peter Hámorský [email protected]
Piotr Gackiewicz [email protected] Piotr Gackiewicz [email protected]
Richard Stallman [email protected] Richard Stallman [email protected]
Robert Anisko [email protected] Robert Anisko [email protected]
Shura [email protected] Shura [email protected]
Tom Lane [email protected]
Tom Tromey [email protected]
Wayne Green [email protected]
Wolfram Wagner [email protected]
Wwp [email protected]
Many people are not named here because we lost track of them. We Many people are not named here because we lost track of them. We
thank them! Please, help us keeping this list up to date. thank them! Please, help us keeping this list up to date.
Vendored
+174 -143
View File
@@ -1,4 +1,4 @@
# aclocal.m4 generated automatically by aclocal 1.5a # aclocal.m4 generated automatically by aclocal 1.5c -*- Autoconf -*-
# Copyright 1996, 1997, 1998, 1999, 2000, 2001 # Copyright 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
@@ -33,7 +33,7 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA. # 02111-1307, USA.
# serial 6 # serial 7
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4, # written in clear, in which case automake, when reading aclocal.m4,
@@ -55,7 +55,7 @@ AC_DEFUN([AM_INIT_AUTOMAKE],
# test to see if srcdir already configured # test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" && if test "`cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first]) AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi fi
# Define the identity of the package. # Define the identity of the package.
@@ -157,6 +157,8 @@ Check your system clock])
fi fi
AC_MSG_RESULT(yes)]) AC_MSG_RESULT(yes)])
# -*- Autoconf -*-
# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. # Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
@@ -175,7 +177,7 @@ AC_MSG_RESULT(yes)])
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA. # 02111-1307, USA.
# serial 2 # serial 3
# AM_MISSING_PROG(NAME, PROGRAM) # AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------ # ------------------------------
@@ -197,8 +199,7 @@ if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run " am_missing_run="$MISSING --run "
else else
am_missing_run= am_missing_run=
am_backtick='`' AC_MSG_WARN([`missing' script is too old or missing])
AC_MSG_WARN([${am_backtick}missing' script is too old or missing])
fi fi
]) ])
@@ -353,7 +354,7 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
# _AM_DEPENDENCIES(NAME) # _AM_DEPENDENCIES(NAME)
# --------------------- # ----------------------
# See how the compiler implements dependency checking. # See how the compiler implements dependency checking.
# NAME is "CC", "CXX" or "OBJC". # NAME is "CC", "CXX" or "OBJC".
# We try a few techniques and use that to set a single cache variable. # We try a few techniques and use that to set a single cache variable.
@@ -432,8 +433,7 @@ else
am_cv_$1_dependencies_compiler_type=none am_cv_$1_dependencies_compiler_type=none
fi fi
]) ])
$1DEPMODE="depmode=$am_cv_$1_dependencies_compiler_type" AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
AC_SUBST([$1DEPMODE])
]) ])
@@ -451,7 +451,7 @@ else
DEPDIR=_deps DEPDIR=_deps
fi fi
rmdir .deps 2>/dev/null rmdir .deps 2>/dev/null
AC_SUBST(DEPDIR) AC_SUBST([DEPDIR])
]) ])
@@ -466,12 +466,10 @@ if test "x$enable_dependency_tracking" != xno; then
AMDEPBACKSLASH='\' AMDEPBACKSLASH='\'
fi fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
pushdef([subst], defn([AC_SUBST])) AC_SUBST([AMDEPBACKSLASH])
subst(AMDEPBACKSLASH)
popdef([subst])
]) ])
# Generate code to set up dependency tracking. # Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright 1999, 2000, 2001 Free Software Foundation, Inc. # Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
@@ -490,24 +488,20 @@ popdef([subst])
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA. # 02111-1307, USA.
# This macro should only be invoked once -- use via AC_REQUIRE. #serial 2
# Usage:
# AM_OUTPUT_DEPENDENCY_COMMANDS
# # _AM_OUTPUT_DEPENDENCY_COMMANDS
# This code is only required when automatic dependency tracking # ------------------------------
# is enabled. FIXME. This creates each `.P' file that we will AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# need in order to bootstrap the dependency handling code. [for mf in $CONFIG_FILES; do
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],[ # Strip MF so we end up with the name of the file.
AC_OUTPUT_COMMANDS([ mf=`echo "$mf" | sed -e 's/:.*$//'`
test x"$AMDEP_TRUE" != x"" || if (head -1 $mf | fgrep 'generated by automake') > /dev/null 2>&1; then
for mf in $CONFIG_FILES; do dirpart=`AS_DIRNAME("$mf")`
case "$mf" in else
Makefile) dirpart=.;; dirpart=
*/Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;; fi
*) continue;; grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
esac
grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
# Extract the definition of DEP_FILES from the Makefile without # Extract the definition of DEP_FILES from the Makefile without
# running `make'. # running `make'.
DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
@@ -531,20 +525,29 @@ for mf in $CONFIG_FILES; do
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists. # Make sure the directory exists.
test -f "$dirpart/$file" && continue test -f "$dirpart/$file" && continue
fdir=`echo "$file" | sed -e 's|/[^/]*$||'` fdir=`AS_DIRNAME(["$file"])`
$ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1 AS_MKDIR_P([$dirpart/$fdir])
# echo "creating $dirpart/$file" # echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file" echo '# dummy' > "$dirpart/$file"
done done
done done
], [AMDEP_TRUE="$AMDEP_TRUE" ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
ac_aux_dir="$ac_aux_dir"])])
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
# Copyright 2001 Free Software Foundation, Inc. # AM_OUTPUT_DEPENDENCY_COMMANDS
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
# is enabled. FIXME. This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Copyright 2001 Free Software Foundation, Inc. -*- Autoconf -*-
# 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
@@ -561,6 +564,11 @@ ac_aux_dir="$ac_aux_dir"])])
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA. # 02111-1307, USA.
# serial 2
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE], AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make} [am_make=${MAKE-make}
cat > confinc << 'END' cat > confinc << 'END'
@@ -569,7 +577,7 @@ doit:
END END
# If we don't find an include directive, just comment out the code. # If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make]) AC_MSG_CHECKING([for style of include used by $am_make])
am__include='#' am__include="#"
am__quote= am__quote=
_am_result=none _am_result=none
# First try GNU make style include. # First try GNU make style include.
@@ -589,7 +597,7 @@ if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
am__include=.include am__include=.include
am__quote='"' am__quote="\""
_am_result=BSD _am_result=BSD
fi fi
fi fi
@@ -636,7 +644,12 @@ if $2; then
else else
$1_TRUE='#' $1_TRUE='#'
$1_FALSE= $1_FALSE=
fi]) fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
AC_MSG_ERROR([conditional \"$1\" was never defined.
Usually this means the macro was only invoked conditionally.])
fi])])
# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
@@ -657,32 +670,15 @@ fi])
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA. # 02111-1307, USA.
# serial 4 AC_PREREQ([2.52])
# serial 6
# When config.status generates a header, we must update the stamp-h file. # When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header # This file resides in the same directory as the config header
# that is generated. We must strip everything past the first ":", # that is generated. We must strip everything past the first ":",
# and everything past the last "/". # and everything past the last "/".
AC_PREREQ([2.52])
AC_DEFUN([AM_CONFIG_HEADER],
[dnl init our file count if it isn't already
m4_ifndef([_AM_Config_Header_Index], m4_define([_AM_Config_Header_Index], [0]))
dnl prepare to store our destination file list for use in config.status
AC_FOREACH([_AM_File], [$1],
[m4_pushdef([_AM_Dest], m4_patsubst(_AM_File, [:.*]))
m4_define([_AM_Config_Header_Index],
m4_incr(_AM_Config_Header_Index))
dnl and add it to the list of files AC keeps track of, along
dnl with our hook
AC_CONFIG_HEADERS(_AM_File,
[# update the timestamp
echo timestamp >"AS_ESCAPE(_AM_DIRNAME(]_AM_Dest[))/stamp-h]_AM_Config_Header_Index["
][$2]m4_ifval([$3], [, [$3]]))
m4_popdef([_AM_Dest])])
]) # AM_CONFIG_HEADER
# _AM_DIRNAME(PATH) # _AM_DIRNAME(PATH)
# ----------------- # -----------------
# Like AS_DIRNAME, only do it during macro expansion # Like AS_DIRNAME, only do it during macro expansion
@@ -694,7 +690,44 @@ AC_DEFUN([_AM_DIRNAME],
patsubst([$1], [^\(/\).*], [\1])), patsubst([$1], [^\(/\).*], [\1])),
patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])), patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])),
patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl
]) # _AM_DIRNAME ])# _AM_DIRNAME
# The stamp files are numbered to have different names.
# We could number them on a directory basis, but that's additional
# complications, let's have a unique counter.
m4_define([_AM_STAMP_Count], [0])
# _AM_STAMP(HEADER)
# -----------------
# The name of the stamp file for HEADER.
AC_DEFUN([_AM_STAMP],
[m4_define([_AM_STAMP_Count], m4_incr(_AM_STAMP_Count))dnl
AS_ESCAPE(_AM_DIRNAME(patsubst([$1],
[:.*])))/stamp-h[]_AM_STAMP_Count])
# _AM_CONFIG_HEADER(HEADER[:SOURCES], COMMANDS, INIT-COMMANDS)
# ------------------------------------------------------------
# We used to try to get a real timestamp in stamp-h. But the fear is that
# that will cause unnecessary cvs conflicts.
AC_DEFUN([_AM_CONFIG_HEADER],
[# Add the stamp file to the list of files AC keeps track of,
# along with our hook.
AC_CONFIG_HEADERS([$1],
[# update the timestamp
echo 'timestamp for $1' >"_AM_STAMP([$1])"
$2],
[$3])
])# _AM_CONFIG_HEADER
# AM_CONFIG_HEADER(HEADER[:SOURCES]..., COMMANDS, INIT-COMMANDS)
# --------------------------------------------------------------
AC_DEFUN([AM_CONFIG_HEADER],
[AC_FOREACH([_AM_File], [$1], [_AM_CONFIG_HEADER(_AM_File, [$2], [$3])])
])# AM_CONFIG_HEADER
#serial 1 #serial 1
# This test replaces the one in autoconf. # This test replaces the one in autoconf.
@@ -871,19 +904,19 @@ AC_SUBST(U)dnl
AC_SUBST(ANSI2KNR)dnl AC_SUBST(ANSI2KNR)dnl
]) ])
#serial 3 #serial 5
dnl From Jim Meyering. dnl From Jim Meyering.
dnl Determine whether malloc accepts 0 as its argument. dnl Determine whether malloc accepts 0 as its argument.
dnl If it doesn't, arrange to use the replacement function. dnl If it doesn't, arrange to use the replacement function.
dnl dnl
AC_DEFUN(jm_FUNC_MALLOC, AC_DEFUN([jm_FUNC_MALLOC],
[ [
dnl xmalloc.c requires that this symbol be defined so it doesn't dnl xmalloc.c requires that this symbol be defined so it doesn't
dnl mistakenly use a broken malloc -- as it might if this test were omitted. dnl mistakenly use a broken malloc -- as it might if this test were omitted.
AC_DEFINE_UNQUOTED(HAVE_DONE_WORKING_MALLOC_CHECK, 1, AC_DEFINE(HAVE_DONE_WORKING_MALLOC_CHECK, 1,
[Define if the malloc check has been performed. ]) [Define if the malloc check has been performed. ])
AC_CACHE_CHECK([for working malloc], jm_cv_func_working_malloc, AC_CACHE_CHECK([for working malloc], jm_cv_func_working_malloc,
[AC_TRY_RUN([ [AC_TRY_RUN([
@@ -900,26 +933,25 @@ AC_DEFUN(jm_FUNC_MALLOC,
jm_cv_func_working_malloc=no) jm_cv_func_working_malloc=no)
]) ])
if test $jm_cv_func_working_malloc = no; then if test $jm_cv_func_working_malloc = no; then
AC_SUBST(LIBOBJS) AC_LIBOBJ(malloc)
LIBOBJS="$LIBOBJS malloc.$ac_objext" AC_DEFINE(malloc, rpl_malloc,
AC_DEFINE_UNQUOTED(malloc, rpl_malloc,
[Define to rpl_malloc if the replacement function should be used.]) [Define to rpl_malloc if the replacement function should be used.])
fi fi
]) ])
#serial 3 #serial 5
dnl From Jim Meyering. dnl From Jim Meyering.
dnl Determine whether realloc works when both arguments are 0. dnl Determine whether realloc works when both arguments are 0.
dnl If it doesn't, arrange to use the replacement function. dnl If it doesn't, arrange to use the replacement function.
dnl dnl
AC_DEFUN(jm_FUNC_REALLOC, AC_DEFUN([jm_FUNC_REALLOC],
[ [
dnl xmalloc.c requires that this symbol be defined so it doesn't dnl xmalloc.c requires that this symbol be defined so it doesn't
dnl mistakenly use a broken realloc -- as it might if this test were omitted. dnl mistakenly use a broken realloc -- as it might if this test were omitted.
AC_DEFINE_UNQUOTED(HAVE_DONE_WORKING_REALLOC_CHECK, 1, AC_DEFINE(HAVE_DONE_WORKING_REALLOC_CHECK, 1,
[Define if the realloc check has been performed. ]) [Define if the realloc check has been performed. ])
AC_CACHE_CHECK([for working realloc], jm_cv_func_working_realloc, AC_CACHE_CHECK([for working realloc], jm_cv_func_working_realloc,
[AC_TRY_RUN([ [AC_TRY_RUN([
@@ -936,9 +968,8 @@ AC_DEFUN(jm_FUNC_REALLOC,
jm_cv_func_working_realloc=no) jm_cv_func_working_realloc=no)
]) ])
if test $jm_cv_func_working_realloc = no; then if test $jm_cv_func_working_realloc = no; then
AC_SUBST(LIBOBJS) AC_LIBOBJ(realloc)
LIBOBJS="$LIBOBJS realloc.$ac_objext" AC_DEFINE(realloc, rpl_realloc,
AC_DEFINE_UNQUOTED(realloc, rpl_realloc,
[Define to rpl_realloc if the replacement function should be used.]) [Define to rpl_realloc if the replacement function should be used.])
fi fi
]) ])
@@ -978,11 +1009,11 @@ AC_DEFUN([jm_FUNC_MBRTOWC],
fi fi
]) ])
#serial 3 #serial 4
dnl From Paul Eggert. dnl From Paul Eggert.
AC_DEFUN(AC_C_BACKSLASH_A, AC_DEFUN([AC_C_BACKSLASH_A],
[ [
AC_CACHE_CHECK([whether backslash-a works in strings], ac_cv_c_backslash_a, AC_CACHE_CHECK([whether backslash-a works in strings], ac_cv_c_backslash_a,
[AC_TRY_COMPILE([], [AC_TRY_COMPILE([],
@@ -1002,7 +1033,7 @@ AC_DEFUN(AC_C_BACKSLASH_A,
fi fi
]) ])
# serial 8 # serial 9
# From Paul Eggert. # From Paul Eggert.
@@ -1014,7 +1045,7 @@ AC_DEFUN(AC_C_BACKSLASH_A,
# (at least glibc-2.1.3) because the "_XOPEN_SOURCE 500" definition elicits # (at least glibc-2.1.3) because the "_XOPEN_SOURCE 500" definition elicits
# a syntax error in wchar.h due to the use of undefined __int32_t. # a syntax error in wchar.h due to the use of undefined __int32_t.
AC_DEFUN(AC_MBSTATE_T, AC_DEFUN([AC_MBSTATE_T],
[ [
AC_CHECK_HEADERS(stdlib.h) AC_CHECK_HEADERS(stdlib.h)
@@ -1032,25 +1063,40 @@ AC_DEFUN(AC_MBSTATE_T,
[Define to a type if <wchar.h> does not define.]) [Define to a type if <wchar.h> does not define.])
fi]) fi])
#serial 1 #serial 4
dnl FIXME: put these prerequisite-only *.m4 files in a separate dnl FIXME: put these prerequisite-only *.m4 files in a separate
dnl directory -- otherwise, they'll conflict with existing files. dnl directory -- otherwise, they'll conflict with existing files.
dnl These are the prerequisite macros for GNU's error.c file. dnl These are the prerequisite macros for GNU's error.c file.
AC_DEFUN(jm_PREREQ_ERROR, AC_DEFUN([jm_PREREQ_ERROR],
[ [
AC_CHECK_FUNCS(strerror strerror_r vprintf doprnt) AC_CHECK_FUNCS(strerror vprintf doprnt)
AC_HEADER_STDC AC_CHECK_DECLS([strerror])
AC_FUNC_STRERROR_R AC_FUNC_STRERROR_R
AC_HEADER_STDC
]) ])
#serial 1002 #serial 1003
# Experimental replacement for the function in the latest CVS autoconf. # Experimental replacement for the function in the latest CVS autoconf.
# If the compile-test says strerror_r doesn't work, then resort to a
# `run'-test that works on BeOS and segfaults on DEC Unix.
# Use with the error.c file in ../lib. # Use with the error.c file in ../lib.
# Copyright 2001 Free Software Foundation, Inc.
# 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
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program 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 this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
undefine([AC_FUNC_STRERROR_R]) undefine([AC_FUNC_STRERROR_R])
# AC_FUNC_STRERROR_R # AC_FUNC_STRERROR_R
@@ -1058,57 +1104,36 @@ undefine([AC_FUNC_STRERROR_R])
AC_DEFUN([AC_FUNC_STRERROR_R], AC_DEFUN([AC_FUNC_STRERROR_R],
[AC_CHECK_DECLS([strerror_r]) [AC_CHECK_DECLS([strerror_r])
AC_CHECK_FUNCS([strerror_r]) AC_CHECK_FUNCS([strerror_r])
if test $ac_cv_func_strerror_r = yes; then AC_CACHE_CHECK([whether strerror_r returns char *],
AC_CHECK_HEADERS(string.h) ac_cv_func_strerror_r_char_p,
AC_CACHE_CHECK([for working strerror_r],
ac_cv_func_strerror_r_works,
[ [
AC_TRY_COMPILE( ac_cv_func_strerror_r_char_p=no
[ if test $ac_cv_have_decl_strerror_r = yes; then
# include <stdio.h> AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
# if HAVE_STRING_H [[
# include <string.h> char buf[100];
# endif char x = *strerror_r (0, buf, sizeof buf);
], char *p = strerror_r (0, buf, sizeof buf);
[ ]])],
char buf[100]; ac_cv_func_strerror_r_char_p=yes)
char x = *strerror_r (0, buf, sizeof buf); else
], # strerror_r is not declared. Choose between
ac_cv_func_strerror_r_works=yes,
ac_cv_func_strerror_r_works=no
)
if test $ac_cv_func_strerror_r_works = no; then
# strerror_r seems not to work, but now we have to choose between
# systems that have relatively inaccessible declarations for the # systems that have relatively inaccessible declarations for the
# function. BeOS and DEC UNIX 4.0 fall in this category, but the # function. BeOS and DEC UNIX 4.0 fall in this category, but the
# former has a strerror_r that returns char*, while the latter # former has a strerror_r that returns char*, while the latter
# has a strerror_r that returns `int'. # has a strerror_r that returns `int'.
# This test should segfault on the DEC system. # This test should segfault on the DEC system.
AC_TRY_RUN( AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
[ extern char *strerror_r ();],
# include <stdio.h> [[char buf[100];
# include <string.h>
# include <ctype.h>
extern char *strerror_r ();
int
main ()
{
char buf[100];
char x = *strerror_r (0, buf, sizeof buf); char x = *strerror_r (0, buf, sizeof buf);
exit (!isalpha (x)); exit (!isalpha (x));]])],
} ac_cv_func_strerror_r_char_p=yes, , :)
],
ac_cv_func_strerror_r_works=yes,
ac_cv_func_strerror_r_works=no,
ac_cv_func_strerror_r_works=no)
fi fi
]) ])
if test $ac_cv_func_strerror_r_works = yes; then if test $ac_cv_func_strerror_r_char_p = yes; then
AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1, AC_DEFINE([STRERROR_R_CHAR_P], 1,
[Define to 1 if `strerror_r' returns a string.]) [Define to 1 if strerror_r returns char *.])
fi
fi fi
])# AC_FUNC_STRERROR_R ])# AC_FUNC_STRERROR_R
@@ -1136,10 +1161,12 @@ fi], [AC_MSG_RESULT(no)])
# #
# This file can be copied and used freely without restrictions. It can # This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public # be used in projects which are not available under the GNU General Public
# License but which still want to provide support for the GNU gettext # License or the GNU Library General Public License but which still want
# functionality. # to provide support for the GNU gettext functionality.
# Please note that the actual code of GNU gettext is covered by the GNU # Please note that the actual code of the GNU gettext library is covered
# General Public License and is *not* in the public domain. # by the GNU Library General Public License, and the rest of the GNU
# gettext package package is covered by the GNU General Public License.
# They are *not* in the public domain.
# serial 10 # serial 10
@@ -1374,7 +1401,7 @@ return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", ""
dnl Found it, now check the version. dnl Found it, now check the version.
AC_MSG_CHECKING([version of bison]) AC_MSG_CHECKING([version of bison])
changequote(<<,>>)dnl changequote(<<,>>)dnl
ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison .* \([0-9]*\.[0-9.]*\).*$/\1/p'` ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
@@ -1505,10 +1532,12 @@ strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
# #
# This file can be copied and used freely without restrictions. It can # This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public # be used in projects which are not available under the GNU General Public
# License but which still want to provide support for the GNU gettext # License or the GNU Library General Public License but which still want
# functionality. # to provide support for the GNU gettext functionality.
# Please note that the actual code of GNU gettext is covered by the GNU # Please note that the actual code of the GNU gettext library is covered
# General Public License and is *not* in the public domain. # by the GNU Library General Public License, and the rest of the GNU
# gettext package package is covered by the GNU General Public License.
# They are *not* in the public domain.
# serial 2 # serial 2
@@ -1670,10 +1699,12 @@ AC_DEFUN([AM_LANGINFO_CODESET],
# #
# This file can be copied and used freely without restrictions. It can # This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public # be used in projects which are not available under the GNU General Public
# License but which still want to provide support for the GNU gettext # License or the GNU Library General Public License but which still want
# functionality. # to provide support for the GNU gettext functionality.
# Please note that the actual code of GNU gettext is covered by the GNU # Please note that the actual code of the GNU gettext library is covered
# General Public License and is *not* in the public domain. # by the GNU Library General Public License, and the rest of the GNU
# gettext package package is covered by the GNU General Public License.
# They are *not* in the public domain.
# serial 2 # serial 2
+102 -74
View File
@@ -5,97 +5,110 @@
*/ */
#undef CRAY_STACKSEG_END #undef CRAY_STACKSEG_END
/* Define if using `alloca.c'. */ /* Define to 1 if using `alloca.c'. */
#undef C_ALLOCA #undef C_ALLOCA
/* Define to 1 if translation of program messages to the user's native /* Define to 1 if translation of program messages to the user's native
language is requested. */ language is requested. */
#undef ENABLE_NLS #undef ENABLE_NLS
/* Define if you have `alloca', as a function or macro. */ /* Define to 1 if you have `alloca', as a function or macro. */
#undef HAVE_ALLOCA #undef HAVE_ALLOCA
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */ /* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
*/
#undef HAVE_ALLOCA_H #undef HAVE_ALLOCA_H
/* Define if you have the <argz.h> header file. */ /* Define to 1 if you have the <argz.h> header file. */
#undef HAVE_ARGZ_H #undef HAVE_ARGZ_H
/* Define if you have the <ctype.h> header file. */ /* Define to 1 if you have the <ctype.h> header file. */
#undef HAVE_CTYPE_H #undef HAVE_CTYPE_H
/* Define if backslash-a works in C strings. */ /* Define if backslash-a works in C strings. */
#undef HAVE_C_BACKSLASH_A #undef HAVE_C_BACKSLASH_A
/* Define if you have the `dcgettext' function. */ /* Define to 1 if you have the `dcgettext' function. */
#undef HAVE_DCGETTEXT #undef HAVE_DCGETTEXT
/* Define to 1 if you have the declaration of `memchr', and to 0 if you don't. /* Define to 1 if you have the declaration of `memchr', and to 0 if you don't.
*/ */
#undef HAVE_DECL_MEMCHR #undef HAVE_DECL_MEMCHR
/* Define to 1 if you have the declaration of `memrchr', and to 0 if you
don't. */
#undef HAVE_DECL_MEMRCHR
/* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't. /* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't.
*/ */
#undef HAVE_DECL_STPCPY #undef HAVE_DECL_STPCPY
/* Define to 1 if you have the declaration of `strchr', and to 0 if you don't.
*/
#undef HAVE_DECL_STRCHR
/* Define to 1 if you have the declaration of `strerror', and to 0 if you
don't. */
#undef HAVE_DECL_STRERROR
/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
don't. */ don't. */
#undef HAVE_DECL_STRERROR_R #undef HAVE_DECL_STRERROR_R
/* Define to 1 if you have the declaration of `strndup', and to 0 if you
don't. */
#undef HAVE_DECL_STRNDUP
/* Define to 1 if you have the declaration of `strnlen', and to 0 if you /* Define to 1 if you have the declaration of `strnlen', and to 0 if you
don't. */ don't. */
#undef HAVE_DECL_STRNLEN #undef HAVE_DECL_STRNLEN
/* Define to 1 if you have the declaration of `strspn', and to 0 if you don't.
*/
#undef HAVE_DECL_STRSPN
/* Define if the malloc check has been performed. */ /* Define if the malloc check has been performed. */
#undef HAVE_DONE_WORKING_MALLOC_CHECK #undef HAVE_DONE_WORKING_MALLOC_CHECK
/* Define if the realloc check has been performed. */ /* Define if the realloc check has been performed. */
#undef HAVE_DONE_WORKING_REALLOC_CHECK #undef HAVE_DONE_WORKING_REALLOC_CHECK
/* Define if you have the `doprnt' function. */ /* Define to 1 if you have the `doprnt' function. */
#undef HAVE_DOPRNT #undef HAVE_DOPRNT
/* Define if you have the `feof_unlocked' function. */ /* Define to 1 if you have the `feof_unlocked' function. */
#undef HAVE_FEOF_UNLOCKED #undef HAVE_FEOF_UNLOCKED
/* Define if you have the `fgets_unlocked' function. */ /* Define to 1 if you have the `fgets_unlocked' function. */
#undef HAVE_FGETS_UNLOCKED #undef HAVE_FGETS_UNLOCKED
/* Define if you have the `getcwd' function. */ /* Define to 1 if you have the `getcwd' function. */
#undef HAVE_GETCWD #undef HAVE_GETCWD
/* Define if you have the `getegid' function. */ /* Define to 1 if you have the `getegid' function. */
#undef HAVE_GETEGID #undef HAVE_GETEGID
/* Define if you have the `geteuid' function. */ /* Define to 1 if you have the `geteuid' function. */
#undef HAVE_GETEUID #undef HAVE_GETEUID
/* Define if you have the `getgid' function. */ /* Define to 1 if you have the `getgid' function. */
#undef HAVE_GETGID #undef HAVE_GETGID
/* Define if you have the `getpagesize' function. */ /* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE #undef HAVE_GETPAGESIZE
/* Define if the GNU gettext() function is already present or preinstalled. */ /* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT #undef HAVE_GETTEXT
/* Define if you have the `getuid' function. */ /* Define to 1 if you have the `getuid' function. */
#undef HAVE_GETUID #undef HAVE_GETUID
/* Define if you have the iconv() function. */ /* Define if you have the iconv() function. */
#undef HAVE_ICONV #undef HAVE_ICONV
/* Define if you have the <inttypes.h> header file. */ /* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H #undef HAVE_INTTYPES_H
/* Define if you have the `isascii' function. */ /* Define to 1 if you have the `isascii' function. */
#undef HAVE_ISASCII #undef HAVE_ISASCII
/* Define if you have the `iswprint' function. */ /* Define to 1 if you have the `iswprint' function. */
#undef HAVE_ISWPRINT #undef HAVE_ISWPRINT
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
@@ -104,130 +117,127 @@
/* Define if your <locale.h> file defines LC_MESSAGES. */ /* Define if your <locale.h> file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES #undef HAVE_LC_MESSAGES
/* Define if you have the <limits.h> header file. */ /* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H #undef HAVE_LIMITS_H
/* Define if you have the <locale.h> header file. */ /* Define to 1 if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H #undef HAVE_LOCALE_H
/* Define if you have the <malloc.h> header file. */ /* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H #undef HAVE_MALLOC_H
/* Define to 1 if mbrtowc and mbstate_t are properly declared. */ /* Define to 1 if mbrtowc and mbstate_t are properly declared. */
#undef HAVE_MBRTOWC #undef HAVE_MBRTOWC
/* Define if you have the `mbsinit' function. */ /* Define to 1 if you have the `mbsinit' function. */
#undef HAVE_MBSINIT #undef HAVE_MBSINIT
/* Define if you have the `memchr' function. */ /* Define to 1 if you have the `memchr' function. */
#undef HAVE_MEMCHR #undef HAVE_MEMCHR
/* Define if you have the <memory.h> header file. */ /* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H #undef HAVE_MEMORY_H
/* Define if you have the `mempcpy' function. */ /* Define to 1 if you have the `mempcpy' function. */
#undef HAVE_MEMPCPY #undef HAVE_MEMPCPY
/* Define if you have the `mkstemp' function. */ /* Define to 1 if you have the `memrchr' function. */
#undef HAVE_MEMRCHR
/* Define to 1 if you have the `mkstemp' function. */
#undef HAVE_MKSTEMP #undef HAVE_MKSTEMP
/* Define if you have a working `mmap' system call. */ /* Define to 1 if you have a working `mmap' system call. */
#undef HAVE_MMAP #undef HAVE_MMAP
/* Define if you have the `munmap' function. */ /* Define to 1 if you have the `munmap' function. */
#undef HAVE_MUNMAP #undef HAVE_MUNMAP
/* Define if you have the <nl_types.h> header file. */ /* Define to 1 if you have the <nl_types.h> header file. */
#undef HAVE_NL_TYPES_H #undef HAVE_NL_TYPES_H
/* Define if you have the `putenv' function. */ /* Define to 1 if libc includes obstacks. */
#undef HAVE_OBSTACK
/* Define to 1 if you have the `putenv' function. */
#undef HAVE_PUTENV #undef HAVE_PUTENV
/* Define if you have the `setenv' function. */ /* Define to 1 if you have the `setenv' function. */
#undef HAVE_SETENV #undef HAVE_SETENV
/* Define if you have the `setlocale' function. */ /* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE #undef HAVE_SETLOCALE
/* Define if you have the <stddef.h> header file. */ /* Define to 1 if you have the <stddef.h> header file. */
#undef HAVE_STDDEF_H #undef HAVE_STDDEF_H
/* Define if you have the <stdint.h> header file. */ /* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H #undef HAVE_STDINT_H
/* Define if you have the <stdlib.h> header file. */ /* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H #undef HAVE_STDLIB_H
/* Define if you have the `stpcpy' function. */ /* Define to 1 if you have the `stpcpy' function. */
#undef HAVE_STPCPY #undef HAVE_STPCPY
/* Define if you have the `strcasecmp' function. */ /* Define to 1 if you have the `strcasecmp' function. */
#undef HAVE_STRCASECMP #undef HAVE_STRCASECMP
/* Define if you have the `strchr' function. */ /* Define to 1 if you have the `strchr' function. */
#undef HAVE_STRCHR #undef HAVE_STRCHR
/* Define if you have the `strdup' function. */ /* Define to 1 if you have the `strdup' function. */
#undef HAVE_STRDUP #undef HAVE_STRDUP
/* Define if you have the `strerror' function. */ /* Define to 1 if you have the `strerror' function. */
#undef HAVE_STRERROR #undef HAVE_STRERROR
/* Define if you have the `strerror_r' function. */ /* Define to 1 if you have the `strerror_r' function. */
#undef HAVE_STRERROR_R #undef HAVE_STRERROR_R
/* Define if you have the <strings.h> header file. */ /* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H #undef HAVE_STRINGS_H
/* Define if you have the <string.h> header file. */ /* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H #undef HAVE_STRING_H
/* Define if you have the `strndup' function. */ /* Define to 1 if you have the `strspn' function. */
#undef HAVE_STRNDUP
/* Define if you have the `strnlen' function. */
#undef HAVE_STRNLEN
/* Define if you have the `strspn' function. */
#undef HAVE_STRSPN #undef HAVE_STRSPN
/* Define if you have the `strtoul' function. */ /* Define to 1 if you have the `strtoul' function. */
#undef HAVE_STRTOUL #undef HAVE_STRTOUL
/* Define if you have the <sys/param.h> header file. */ /* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H #undef HAVE_SYS_PARAM_H
/* Define if you have the <sys/stat.h> header file. */ /* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H #undef HAVE_SYS_STAT_H
/* Define if you have the <sys/types.h> header file. */ /* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H #undef HAVE_SYS_TYPES_H
/* Define if you have the `tsearch' function. */ /* Define to 1 if you have the `tsearch' function. */
#undef HAVE_TSEARCH #undef HAVE_TSEARCH
/* Define if you have the <unistd.h> header file. */ /* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H #undef HAVE_UNISTD_H
/* Define if you have the `vprintf' function. */ /* Define to 1 if you have the `vprintf' function. */
#undef HAVE_VPRINTF #undef HAVE_VPRINTF
/* Define if you have the <wchar.h> header file. */ /* Define to 1 if you have the <wchar.h> header file. */
#undef HAVE_WCHAR_H #undef HAVE_WCHAR_H
/* Define if you have the <wctype.h> header file. */ /* Define to 1 if you have the <wctype.h> header file. */
#undef HAVE_WCTYPE_H #undef HAVE_WCTYPE_H
/* Define to 1 if `strerror_r' returns a string. */ /* Define to 1 if you have the `__argz_count' function. */
#undef HAVE_WORKING_STRERROR_R
/* Define if you have the `__argz_count' function. */
#undef HAVE___ARGZ_COUNT #undef HAVE___ARGZ_COUNT
/* Define if you have the `__argz_next' function. */ /* Define to 1 if you have the `__argz_next' function. */
#undef HAVE___ARGZ_NEXT #undef HAVE___ARGZ_NEXT
/* Define if you have the `__argz_stringify' function. */ /* Define to 1 if you have the `__argz_stringify' function. */
#undef HAVE___ARGZ_STRINGIFY #undef HAVE___ARGZ_STRINGIFY
/* Define as const if the declaration of iconv() needs const. */ /* Define as const if the declaration of iconv() needs const. */
@@ -236,6 +246,21 @@
/* Name of package */ /* Name of package */
#undef PACKAGE #undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define if compiler has function prototypes */ /* Define if compiler has function prototypes */
#undef PROTOTYPES #undef PROTOTYPES
@@ -247,9 +272,12 @@
STACK_DIRECTION = 0 => direction of growth unknown */ STACK_DIRECTION = 0 => direction of growth unknown */
#undef STACK_DIRECTION #undef STACK_DIRECTION
/* Define if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS #undef STDC_HEADERS
/* Define to 1 if strerror_r returns char *. */
#undef STRERROR_R_CHAR_P
/* Version number of package */ /* Version number of package */
#undef VERSION #undef VERSION
@@ -259,14 +287,14 @@
/* Define to 1 for GNU C library extensions. */ /* Define to 1 for GNU C library extensions. */
#undef _GNU_SOURCE #undef _GNU_SOURCE
/* Define if on MINIX. */ /* Define to 1 if on MINIX. */
#undef _MINIX #undef _MINIX
/* Define if the system does not provide POSIX.1 features except with this /* Define to 2 if the system does not provide POSIX.1 features except with
defined. */ this defined. */
#undef _POSIX_1_SOURCE #undef _POSIX_1_SOURCE
/* Define if you need to in order for `stat' and other things to work. */ /* Define to 1 if you need to in order for `stat' and other things to work. */
#undef _POSIX_SOURCE #undef _POSIX_SOURCE
/* Define to empty if `const' does not conform to ANSI C. */ /* Define to empty if `const' does not conform to ANSI C. */
+8 -9
View File
@@ -1,4 +1,5 @@
# Makefile.in generated automatically by automake 1.5a from Makefile.am. # Makefile.in generated by automake 1.5c from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
@@ -12,7 +13,6 @@
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@ @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
@@ -47,6 +47,7 @@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA) INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@ transform = @program_transform_name@
@@ -83,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@ INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@ INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LIB = @LIB@
LIBICONV = @LIBICONV@ LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@ MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@ MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
@@ -96,10 +97,10 @@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@ USE_NLS = @USE_NLS@
VERSION = @VERSION@ VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CFLAGS = @WARNING_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
am__include = @am__include@ am__include = @am__include@
am__quote = @am__quote@ am__quote = @am__quote@
install_sh = @install_sh@ install_sh = @install_sh@
EXTRA_DIST = move-if-change prev-version.txt EXTRA_DIST = move-if-change prev-version.txt
subdir = config subdir = config
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
@@ -115,14 +116,11 @@ $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \ cd $(top_srcdir) && \
$(AUTOMAKE) --gnu config/Makefile $(AUTOMAKE) --gnu config/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
uninstall-info-am: uninstall-info-am:
tags: TAGS tags: TAGS
TAGS: TAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .. top_distdir = ..
@@ -130,7 +128,7 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES) distdir: $(DISTFILES)
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
$(mkinstalldirs) "$(distdir)/$$dir"; \ $(mkinstalldirs) "$(distdir)/$$dir"; \
@@ -161,6 +159,7 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \ `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
+59 -48
View File
@@ -1,9 +1,9 @@
#! /bin/sh #! /bin/sh
# Attempt to guess a canonical system name. # Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# Free Software Foundation, Inc. # 2000, 2001, 2002 Free Software Foundation, Inc.
timestamp='2001-10-05' timestamp='2002-01-02'
# This file is free software; you can redistribute it and/or modify it # This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by # under the terms of the GNU General Public License as published by
@@ -135,23 +135,21 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# object file format. This provides both forward # object file format. This provides both forward
# compatibility and a consistent mechanism for selecting the # compatibility and a consistent mechanism for selecting the
# object file format. # object file format.
# Determine the machine/vendor (is the vendor relevant). #
case "${UNAME_MACHINE}" in # Note: NetBSD doesn't particularly care about the vendor
amiga) machine=m68k-unknown ;; # portion of the name. We always set it to "unknown".
arm32) machine=arm-unknown ;; UNAME_MACHINE_ARCH=`(uname -p) 2>/dev/null` || \
atari*) machine=m68k-atari ;; UNAME_MACHINE_ARCH=unknown
sun3*) machine=m68k-sun ;; case "${UNAME_MACHINE_ARCH}" in
mac68k) machine=m68k-apple ;; arm*) machine=arm-unknown ;;
macppc) machine=powerpc-apple ;; sh3el) machine=shl-unknown ;;
hp3[0-9][05]) machine=m68k-hp ;; sh3eb) machine=sh-unknown ;;
ibmrt|romp-ibm) machine=romp-ibm ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
sparc*) machine=`uname -p`-unknown ;;
*) machine=${UNAME_MACHINE}-unknown ;;
esac esac
# The Operating System including object format, if it has switched # The Operating System including object format, if it has switched
# to ELF recently, or will in the future. # to ELF recently, or will in the future.
case "${UNAME_MACHINE}" in case "${UNAME_MACHINE_ARCH}" in
i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) arm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep __ELF__ >/dev/null | grep __ELF__ >/dev/null
@@ -291,6 +289,9 @@ EOF
*:[Aa]miga[Oo][Ss]:*:*) *:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos echo ${UNAME_MACHINE}-unknown-amigaos
exit 0 ;; exit 0 ;;
*:[Mm]orph[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-morphos
exit 0 ;;
*:OS/390:*:*) *:OS/390:*:*)
echo i370-ibm-openedition echo i370-ibm-openedition
exit 0 ;; exit 0 ;;
@@ -736,6 +737,9 @@ EOF
i*:PW*:*) i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32 echo ${UNAME_MACHINE}-pc-pw32
exit 0 ;; exit 0 ;;
x86:Interix*:3*)
echo i386-pc-interix3
exit 0 ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*) i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem? # How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -767,10 +771,24 @@ EOF
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-gnu
exit 0 ;; exit 0 ;;
mips:Linux:*:*) mips:Linux:*:*)
case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in eval $set_cc_for_build
big) echo mips-unknown-linux-gnu && exit 0 ;; sed 's/^ //' << EOF >$dummy.c
little) echo mipsel-unknown-linux-gnu && exit 0 ;; #undef CPU
esac #undef mips
#undef mipsel
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
CPU=mipsel
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
CPU=mips
#else
CPU=
#endif
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
rm -f $dummy.c
test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
;; ;;
ppc:Linux:*:*) ppc:Linux:*:*)
echo powerpc-unknown-linux-gnu echo powerpc-unknown-linux-gnu
@@ -843,32 +861,25 @@ EOF
esac esac
# Determine whether the default compiler is a.out or elf # Determine whether the default compiler is a.out or elf
eval $set_cc_for_build eval $set_cc_for_build
cat >$dummy.c <<EOF sed 's/^ //' << EOF >$dummy.c
#include <features.h> #include <features.h>
#ifdef __cplusplus #ifdef __ELF__
#include <stdio.h> /* for printf() prototype */ # ifdef __GLIBC__
int main (int argc, char *argv[]) { # if __GLIBC__ >= 2
#else LIBC=gnu
int main (argc, argv) int argc; char *argv[]; { # else
#endif LIBC=gnulibc1
#ifdef __ELF__ # endif
# ifdef __GLIBC__ # else
# if __GLIBC__ >= 2 LIBC=gnulibc1
printf ("%s-pc-linux-gnu\n", argv[1]); # endif
# else #else
printf ("%s-pc-linux-gnulibc1\n", argv[1]); LIBC=gnuaout
# endif #endif
# else
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
# endif
#else
printf ("%s-pc-linux-gnuaout\n", argv[1]);
#endif
return 0;
}
EOF EOF
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
rm -f $dummy.c $dummy rm -f $dummy.c
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
;; ;;
i*86:DYNIX/ptx:4*:*) i*86:DYNIX/ptx:4*:*)
@@ -947,7 +958,7 @@ EOF
exit 0 ;; exit 0 ;;
M68*:*:R3V[567]*:*) M68*:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
OS_REL='' OS_REL=''
test -r /etc/.relid \ test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -1056,7 +1067,7 @@ EOF
*:QNX:*:4*) *:QNX:*:4*)
echo i386-pc-qnx echo i386-pc-qnx
exit 0 ;; exit 0 ;;
NSR-[KW]:NONSTOP_KERNEL:*:*) NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE} echo nsr-tandem-nsk${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
*:NonStop-UX:*:*) *:NonStop-UX:*:*)
+40 -13
View File
@@ -1,9 +1,9 @@
#! /bin/sh #! /bin/sh
# Configuration validation subroutine script. # Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# Free Software Foundation, Inc. # 2000, 2001, 2002 Free Software Foundation, Inc.
timestamp='2001-10-05' timestamp='2002-01-02'
# This file is (in principle) common to ALL GNU software. # This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software # The presence of a machine in this file suggests that SOME GNU software
@@ -227,6 +227,7 @@ case $basic_machine in
1750a | 580 \ 1750a | 580 \
| a29k \ | a29k \
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
| c4x | clipper \ | c4x | clipper \
| d10v | d30v | dsp16xx \ | d10v | d30v | dsp16xx \
@@ -245,14 +246,13 @@ case $basic_machine in
| pdp10 | pdp11 | pj | pjl \ | pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
| pyramid \ | pyramid \
| s390 | s390x \
| sh | sh[34] | sh[34]eb | shbe | shle \ | sh | sh[34] | sh[34]eb | shbe | shle \
| sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
| stormy16 | strongarm \ | strongarm \
| tahoe | thumb | tic80 | tron \ | tahoe | thumb | tic80 | tron \
| v850 \ | v850 | v850e \
| we32k \ | we32k \
| x86 | xscale \ | x86 | xscale | xstormy16 | xtensa \
| z8k) | z8k)
basic_machine=$basic_machine-unknown basic_machine=$basic_machine-unknown
;; ;;
@@ -279,7 +279,8 @@ case $basic_machine in
580-* \ 580-* \
| a29k-* \ | a29k-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alphapca5[67]-* | arc-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armv*-* \ | arm-* | armbe-* | armle-* | armv*-* \
| avr-* \ | avr-* \
| bs2000-* \ | bs2000-* \
@@ -304,14 +305,14 @@ case $basic_machine in
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
| pyramid-* \ | pyramid-* \
| romp-* | rs6000-* \ | romp-* | rs6000-* \
| s390-* | s390x-* \
| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \ | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
| sparc-* | sparc64-* | sparc86x-* | sparclite-* \ | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
| sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* \
| t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
| v850-* | vax-* \ | v850-* | v850e-* | vax-* \
| we32k-* \ | we32k-* \
| x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \ | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* | xstormy16-* \
| xtensa-* \
| ymp-* \ | ymp-* \
| z8k-*) | z8k-*)
;; ;;
@@ -420,6 +421,14 @@ case $basic_machine in
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
basic_machine=mips-dec basic_machine=mips-dec
;; ;;
decsystem10* | dec10*)
basic_machine=pdp10-dec
os=-tops10
;;
decsystem20* | dec20*)
basic_machine=pdp10-dec
os=-tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \ delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola) | 3300-motorola | delta-motorola)
basic_machine=m68k-motorola basic_machine=m68k-motorola
@@ -622,6 +631,10 @@ case $basic_machine in
basic_machine=m68k-rom68k basic_machine=m68k-rom68k
os=-coff os=-coff
;; ;;
morphos)
basic_machine=powerpc-unknown
os=-morphos
;;
msdos) msdos)
basic_machine=i386-pc basic_machine=i386-pc
os=-msdos os=-msdos
@@ -786,6 +799,12 @@ case $basic_machine in
rtpc | rtpc-*) rtpc | rtpc-*)
basic_machine=romp-ibm basic_machine=romp-ibm
;; ;;
s390 | s390-*)
basic_machine=s390-ibm
;;
s390x | s390x-*)
basic_machine=s390x-ibm
;;
sa29200) sa29200)
basic_machine=a29k-amd basic_machine=a29k-amd
os=-udi os=-udi
@@ -877,6 +896,10 @@ case $basic_machine in
tx39el) tx39el)
basic_machine=mipstx39el-unknown basic_machine=mipstx39el-unknown
;; ;;
toad1)
basic_machine=pdp10-xkl
os=-tops20
;;
tower | tower-32) tower | tower-32)
basic_machine=m68k-ncr basic_machine=m68k-ncr
;; ;;
@@ -1070,7 +1093,7 @@ case $os in
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos*) | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* | -morphos*)
# Remember, each alternative MUST END IN *, to match a version number. # Remember, each alternative MUST END IN *, to match a version number.
;; ;;
-qnx*) -qnx*)
@@ -1122,6 +1145,9 @@ case $os in
-acis*) -acis*)
os=-aos os=-aos
;; ;;
-atheos*)
os=-atheos
;;
-386bsd) -386bsd)
os=-bsd os=-bsd
;; ;;
@@ -1202,6 +1228,7 @@ case $basic_machine in
arm*-semi) arm*-semi)
os=-aout os=-aout
;; ;;
# This must come before the *-dec entry.
pdp10-*) pdp10-*)
os=-tops20 os=-tops20
;; ;;
+1 -1
View File
@@ -1 +1 @@
1.29d 1.30
+51 -34
View File
@@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex. % Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
% %
\def\texinfoversion{2001-07-25.07} \def\texinfoversion{2002-01-04.07}
% %
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
% 2000, 01 Free Software Foundation, Inc. % 2000, 01 Free Software Foundation, Inc.
@@ -30,14 +30,17 @@
% Please try the latest version of texinfo.tex before submitting bug % Please try the latest version of texinfo.tex before submitting bug
% reports; you can get the latest version from: % reports; you can get the latest version from:
% ftp://ftp.gnu.org/gnu/texinfo.tex % ftp://ftp.gnu.org/gnu/texinfo.tex
% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) % (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
% ftp://texinfo.org/tex/texinfo.tex % ftp://texinfo.org/texinfo/texinfo.tex
% ftp://us.ctan.org/macros/texinfo/texinfo.tex % ftp://tug.org/tex/texinfo.tex
% (and all CTAN mirrors, finger [email protected] for a list). % (and all CTAN mirrors, see http://www.ctan.org),
% /home/gd/gnu/doc/texinfo.tex on the GNU machines. % and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
%
% The texinfo.tex in any given Texinfo distribution could well be out % The texinfo.tex in any given Texinfo distribution could well be out
% of date, so if that's what you're using, please check. % of date, so if that's what you're using, please check.
% Texinfo has a small home page at http://texinfo.org/. %
% Texinfo has a small home page at http://texinfo.org/ and also
% http://www.gnu.org/software/texinfo.
% %
% Send bug reports to [email protected]. Please include including a % Send bug reports to [email protected]. Please include including a
% complete document in each bug report with which we can reproduce the % complete document in each bug report with which we can reproduce the
@@ -927,10 +930,12 @@ where each line of input produces a line of output.}
\def\dopdfimage#1#2#3{% \def\dopdfimage#1#2#3{%
\def\imagewidth{#2}% \def\imagewidth{#2}%
\def\imageheight{#3}% \def\imageheight{#3}%
% without \immediate, pdftex seg faults when the same image is
% included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
\ifnum\pdftexversion < 14 \ifnum\pdftexversion < 14
\pdfimage \immediate\pdfimage
\else \else
\pdfximage \immediate\pdfximage
\fi \fi
\ifx\empty\imagewidth\else width \imagewidth \fi \ifx\empty\imagewidth\else width \imagewidth \fi
\ifx\empty\imageheight\else height \imageheight \fi \ifx\empty\imageheight\else height \imageheight \fi
@@ -943,7 +948,7 @@ where each line of input produces a line of output.}
\pdfrefximage \pdflastximage \pdfrefximage \pdflastximage
\fi} \fi}
\def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}} \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
\def\pdfmkpgn#1{#1@} \def\pdfmkpgn#1{#1}
\let\linkcolor = \Blue % was Cyan, but that seems light? \let\linkcolor = \Blue % was Cyan, but that seems light?
\def\endlink{\Black\pdfendlink} \def\endlink{\Black\pdfendlink}
% Adding outlines to PDF; macros for calculating structure of outlines % Adding outlines to PDF; macros for calculating structure of outlines
@@ -5799,8 +5804,15 @@ width0pt\relax} \fi
% %
\smallfonts \rm \smallfonts \rm
% %
% Hang the footnote text off the number. % Because we use hanging indentation in footnotes, a @noindent appears
\hang % to exdent this text, so make it be a no-op. makeinfo does not use
% hanging indentation so @noindent can still be needed within footnote
% text after an @example or the like (not that this is good style).
\let\noindent = \relax
%
% Hang the footnote text off the number. Use \everypar in case the
% footnote extends for more than one paragraph.
\everypar = {\hang}%
\textindent{\thisfootno}% \textindent{\thisfootno}%
% %
% Don't crash into the line above the footnote text. Since this % Don't crash into the line above the footnote text. Since this
@@ -5881,7 +5893,7 @@ width0pt\relax} \fi
\global\warnednoepsftrue \global\warnednoepsftrue
\fi \fi
\else \else
\imagexxx #1,,,\finish \imagexxx #1,,,,,\finish
\fi \fi
} }
% %
@@ -5891,33 +5903,34 @@ width0pt\relax} \fi
% #4 is (ignored optional) html alt text. % #4 is (ignored optional) html alt text.
% #5 is (ignored optional) extension. % #5 is (ignored optional) extension.
% #6 is just the usual extra ignored arg for parsing this stuff. % #6 is just the usual extra ignored arg for parsing this stuff.
\def\imagexxx#1,#2,#3,#4,#5,#6\finish{% \newif\ifimagevmode
\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \loggingall
\catcode`\^^M = 5 % in case we're inside an example
\normalturnoffactive % allow _ et al. in names
% If the image is by itself, center it.
\ifvmode
\imagevmodetrue
\nobreak\bigskip
% Usually we'll have text after the image which will insert
% \parskip glue, so insert it here too to equalize the space
% above and below.
\nobreak\vskip\parskip
\nobreak
\line\bgroup\hss
\fi
%
% Output the image.
\ifpdf \ifpdf
\centerline{\dopdfimage{#1}{#2}{#3}}% \dopdfimage{#1}{#2}{#3}%
\else \else
% \epsfbox itself resets \epsf?size at each figure. % \epsfbox itself resets \epsf?size at each figure.
\setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
\setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
\begingroup \epsfbox{#1.eps}%
\catcode`\^^M = 5 % in case we're inside an example
\normalturnoffactive % allow _ et al. in names
% If the image is by itself, center it.
\ifvmode
\nobreak\bigskip
% Usually we'll have text after the image which will insert
% \parskip glue, so insert it here too to equalize the space
% above and below.
\nobreak\vskip\parskip
\nobreak
\centerline{\epsfbox{#1.eps}}%
\bigbreak
\else
% In the middle of a paragraph, no extra space.
\epsfbox{#1.eps}%
\fi
\endgroup
\fi \fi
} %
\ifimagevmode \hss \egroup \bigbreak \fi % space after the image
\endgroup}
\message{localization,} \message{localization,}
@@ -6087,6 +6100,10 @@ should work if nowhere else does.}
% %
\afourpaper \afourpaper
\internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
%
% Must explicitly reset to 0 because we call \afourpaper, apparently,
% although this does not entirely make sense.
\globaldefs = 0
}} }}
% Use @afourwide to print on European A4 paper in wide format. % Use @afourwide to print on European A4 paper in wide format.
Vendored
+1296 -623
View File
File diff suppressed because it is too large Load Diff
+19 -12
View File
@@ -1,5 +1,7 @@
# Configure template for GNU Bison. -*-Autoconf-*- # Configure template for GNU Bison. -*-Autoconf-*-
# #
# Copyright 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
# the Free Software Foundation; either version 2 of the License, or # the Free Software Foundation; either version 2 of the License, or
@@ -16,17 +18,18 @@
# 02111-1307 USA # 02111-1307 USA
# We need a recent Autoconf to run a recent Autotest. # We need a recent Autoconf to run a recent Autotest.
AC_PREREQ(2.52e) AC_PREREQ(2.52g)
AC_INIT([GNU Bison], [1.29e], [[email protected]]) AC_INIT([GNU Bison], [1.31], [[email protected]])
AC_CONFIG_AUX_DIR(config) AC_CONFIG_AUX_DIR(config)
AM_INIT_AUTOMAKE([bison], [1.29e]) AM_INIT_AUTOMAKE([bison], [1.31])
AM_CONFIG_HEADER(config.h:config.hin) AM_CONFIG_HEADER(config.h:config.hin)
# Initialize the test suite. # Initialize the test suite.
AC_CONFIG_TESTDIR(tests) AC_CONFIG_TESTDIR(tests)
AC_CONFIG_FILES([tests/bison], [chmod +x tests/bison]) AC_CONFIG_FILES([tests/bison], [chmod +x tests/bison])
AC_CONFIG_FILES([tests/Makefile tests/atlocal])
# Needed by tests/atlocal.in. # Needed by tests/atlocal.in.
AC_SUBST([GCC]) AC_SUBST([GCC])
@@ -46,6 +49,9 @@ AC_ARG_ENABLE(gcc-warnings,
esac], esac],
[enableval=no]) [enableval=no])
if test "${enableval}" = yes; then if test "${enableval}" = yes; then
BISON_WARNING(-Werror)
AC_SUBST([WERROR_CFLAGS], [$WARNING_CFLAGS])
WARNING_CFLAGS=
BISON_WARNING(-Wall) BISON_WARNING(-Wall)
BISON_WARNING(-W) BISON_WARNING(-W)
BISON_WARNING(-Wbad-function-cast) BISON_WARNING(-Wbad-function-cast)
@@ -58,7 +64,6 @@ if test "${enableval}" = yes; then
BISON_WARNING(-Wshadow) BISON_WARNING(-Wshadow)
BISON_WARNING(-Wstrict-prototypes) BISON_WARNING(-Wstrict-prototypes)
BISON_WARNING(-Wwrite-strings) BISON_WARNING(-Wwrite-strings)
CFLAGS="$CFLAGS $WARNING_CFLAGS"
fi fi
# Checks for libraries. # Checks for libraries.
@@ -79,26 +84,28 @@ AM_C_PROTOTYPES
# Checks for library functions. # Checks for library functions.
AC_FUNC_ALLOCA AC_FUNC_ALLOCA
AC_FUNC_OBSTACK
AC_FUNC_ERROR_AT_LINE
AC_FUNC_STRNLEN
AC_CHECK_FUNCS(mkstemp setlocale) AC_CHECK_FUNCS(mkstemp setlocale)
AC_CHECK_DECLS([stpcpy, strndup, strnlen, memchr]) AC_CHECK_DECLS([stpcpy, strchr, strspn, strnlen, memchr, memrchr])
AC_REPLACE_FUNCS(stpcpy strndup strnlen strspn memchr) AC_REPLACE_FUNCS(stpcpy strchr strspn memchr memrchr)
jm_FUNC_MALLOC jm_FUNC_MALLOC
jm_FUNC_REALLOC jm_FUNC_REALLOC
jm_PREREQ_QUOTEARG jm_PREREQ_QUOTEARG
jm_PREREQ_ERROR jm_PREREQ_ERROR
AM_WITH_DMALLOC AM_WITH_DMALLOC
ALL_LINGUAS="de es et fr ja nl tr ru" ALL_LINGUAS="de es et fr ja nl ru sv tr"
AM_GNU_GETTEXT AM_GNU_GETTEXT(, need-ngettext)
# This is necessary so that .o files in LIBOBJS are also built via # This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules. # the ANSI2KNR-filtering rules.
LIBOBJS=`echo $LIBOBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'` LIB@&t@OBJS=`echo $LIB@&t@OBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
AC_SUBST(LIBOBJS) AC_SUBST(LIB@&t@OBJS)
AC_OUTPUT([Makefile AC_OUTPUT([Makefile
config/Makefile config/Makefile
intl/Makefile po/Makefile.in intl/Makefile po/Makefile.in
lib/Makefile src/Makefile doc/Makefile lib/Makefile src/Makefile doc/Makefile
m4/Makefile m4/Makefile])
tests/Makefile])
+3 -8
View File
@@ -1,16 +1,11 @@
Makefile Makefile Makefile.in
bison.aux *.aux *.dvi *.log *.info* *.pdf *.ps
stamp-*
bison.cp bison.cp
bison.cps bison.cps
bison.dvi
bison.fn bison.fn
bison.ky bison.ky
bison.log
bison.pg bison.pg
bison.ps
bison.toc bison.toc
bison.tp bison.tp
bison.vr bison.vr
refcard.dvi
refcard.log
refcard.ps
-404
View File
@@ -1,404 +0,0 @@
# Makefile.in generated automatically by automake 1.5a from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
AMTAR = @AMTAR@
AUTOM4TE = @AUTOM4TE@
AWK = @AWK@
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CPP = @CPP@
DATADIRNAME = @DATADIRNAME@
DEPDIR = @DEPDIR@
GCC = @GCC@
GENCAT = @GENCAT@
GLIBC21 = @GLIBC21@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
U = @U@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
AUTOMAKE_OPTIONS = 1.4
info_TEXINFOS = bison.texinfo
man_MANS = bison.1
bison_TEXINFOS = gpl.texi fdl.texi
EXTRA_DIST = FAQ bison.1 bison.rnh refcard.tex
CLEANFILES = refcard.dvi refcard.log refcard.ps
subdir = doc
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
DIST_SOURCES =
TEXINFO_TEX = $(top_srcdir)/config/texinfo.tex
INFO_DEPS = bison.info
DVIS = bison.dvi
TEXINFOS = bison.texinfo
NROFF = nroff
MANS = $(man_MANS)
DIST_COMMON = $(bison_TEXINFOS) Makefile.am Makefile.in stamp-vti \
version.texi
all: all-am
.SUFFIXES:
.SUFFIXES: .dvi .info .ps .texinfo
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
$(srcdir)/version.texi: $(srcdir)/stamp-vti
@:
$(srcdir)/stamp-vti: bison.texinfo $(top_srcdir)/configure.in
@(set `$(SHELL) $(top_srcdir)/config/mdate-sh $(srcdir)/bison.texinfo`; \
echo "@set UPDATED $$1 $$2 $$3"; \
echo "@set UPDATED-MONTH $$2 $$3"; \
echo "@set EDITION $(VERSION)"; \
echo "@set VERSION $(VERSION)") > vti.tmp
@cmp -s vti.tmp $(srcdir)/version.texi \
|| (echo "Updating $(srcdir)/version.texi"; \
cp vti.tmp $(srcdir)/version.texi)
-@rm -f vti.tmp
@cp $(srcdir)/version.texi $@
mostlyclean-vti:
-rm -f vti.tmp
maintainer-clean-vti:
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
bison.info: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
bison.dvi: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
.texinfo.info:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
`echo $< | sed 's,.*/,,'`
.texinfo.dvi:
TEXINPUTS="$(top_srcdir)/config$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) $<
.texinfo:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
`echo $< | sed 's,.*/,,'`
MAKEINFO = @MAKEINFO@
TEXI2DVI = texi2dvi
DVIPS = dvips
.dvi.ps:
$(DVIPS) $< -o $@
uninstall-info-am:
$(PRE_UNINSTALL)
@if (install-info --version && \
install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \
install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
@list='$(INFO_DEPS)'; \
for file in $$list; do \
(if cd $(DESTDIR)$(infodir); then \
echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \
rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \
else :; fi); \
done
dist-info: $(INFO_DEPS)
list='$(INFO_DEPS)'; \
for base in $$list; do \
d=$(srcdir); \
for file in $$d/$$base*; do \
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
test -f $(distdir)/$$relfile || \
cp -p $$file $(distdir)/$$relfile; \
done; \
done
mostlyclean-aminfo:
-rm -f bison.aux bison.cp bison.cps bison.dvi bison.fn bison.ky bison.log \
bison.pg bison.ps bison.toc bison.tp bison.vr
maintainer-clean-aminfo:
cd $(srcdir) && \
for i in $(INFO_DEPS); do \
rm -f $$i; \
if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \
rm -f $$i-[0-9]*; \
fi; \
done
man1dir = $(mandir)/man1
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man1dir)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
done
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
rm -f $(DESTDIR)$(man1dir)/$$inst; \
done
tags: TAGS
TAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
$(mkinstalldirs) "$(distdir)/$$dir"; \
fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="${top_distdir}" distdir="$(distdir)" \
dist-info
check-am: all-am
check: check-am
all-am: Makefile $(INFO_DEPS) $(MANS)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir)
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am: $(DVIS)
info: info-am
info-am: $(INFO_DEPS)
install-data-am: install-info-am install-man
install-exec-am:
install-info: install-info-am
install-info-am: $(INFO_DEPS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(infodir)
@list='$(INFO_DEPS)'; \
for file in $$list; do \
d=$(srcdir); \
for ifile in echo $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9]; do \
if test -f $$ifile; then \
relfile=`expr "$$ifile" : "$$d/\(.*\)"`; \
echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \
$(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \
else : ; fi; \
done; \
done
@$(POST_INSTALL)
@if (install-info --version && \
install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\
done; \
else : ; fi
install-man: install-man1
installcheck-am:
maintainer-clean: maintainer-clean-am
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
maintainer-clean-generic maintainer-clean-vti
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
uninstall-am: uninstall-info-am uninstall-man
uninstall-man: uninstall-man1
.PHONY: all all-am check check-am clean clean-generic dist-info \
distclean distclean-generic distdir dvi dvi-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-man1 install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-aminfo \
maintainer-clean-generic maintainer-clean-vti mostlyclean \
mostlyclean-aminfo mostlyclean-generic mostlyclean-vti \
uninstall uninstall-am uninstall-info-am uninstall-man \
uninstall-man1
refcard.dvi: refcard.tex
tex refcard.tex
refcard.ps: refcard.dvi
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
+2 -2
View File
@@ -262,9 +262,9 @@ and so on.
.ns .ns
.TP .TP
.B \-\-debug .B \-\-debug
Output a definition of the macro In the parser file, define the macro
.B YYDEBUG .B YYDEBUG
into the parser file, to 1 if it is not already defined,
so that the debugging facilities are compiled. so that the debugging facilities are compiled.
.TP .TP
.B \-v .B \-v
-145
View File
@@ -1,145 +0,0 @@
Ceci est le fichier Info bison.info, produit par Makeinfo version 4.0b
à partir bison.texinfo.
START-INFO-DIR-ENTRY
* bison: (bison). GNU Project parser generator (yacc replacement).
END-INFO-DIR-ENTRY
This file documents the Bison parser generator.
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998, 1999,
2000, 2001 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the sections entitled "GNU General Public License" and "Conditions
for Using Bison" are included exactly as in the original, and provided
that the entire resulting derived work is distributed under the terms
of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that the sections entitled "GNU General Public
License", "Conditions for Using Bison" and this permission notice may be
included in translations approved by the Free Software Foundation
instead of in the original English.

Indirect:
bison.info-1: 1313
bison.info-2: 50691
bison.info-3: 100581
bison.info-4: 150131
bison.info-5: 197908

Tag Table:
(Indirect)
Node: Top1313
Node: Introduction8969
Node: Conditions10244
Node: Copying11708
Node: Concepts30911
Node: Language and Grammar31990
Node: Grammar in Bison37006
Node: Semantic Values38930
Node: Semantic Actions41031
Node: Locations Overview42220
Node: Bison Parser43667
Node: Stages45979
Node: Grammar Layout47262
Node: Examples48519
Node: RPN Calc49717
Node: Rpcalc Decls50691
Node: Rpcalc Rules52278
Node: Rpcalc Input54078
Node: Rpcalc Line55539
Node: Rpcalc Expr56654
Node: Rpcalc Lexer58599
Node: Rpcalc Main61171
Node: Rpcalc Error61569
Node: Rpcalc Gen62577
Node: Rpcalc Compile63726
Node: Infix Calc64601
Node: Simple Error Recovery67308
Node: Location Tracking Calc69197
Node: Ltcalc Decls69927
Node: Ltcalc Rules70836
Node: Ltcalc Lexer72897
Node: Multi-function Calc75235
Node: Mfcalc Decl76802
Node: Mfcalc Rules78825
Node: Mfcalc Symtab80205
Node: Exercises86578
Node: Grammar File87084
Node: Grammar Outline87932
Node: C Declarations88666
Node: Bison Declarations89246
Node: Grammar Rules89658
Node: C Code90118
Node: Symbols91048
Node: Rules96129
Node: Recursion97768
Node: Semantics99487
Node: Value Type100581
Node: Multiple Types101253
Node: Actions102270
Node: Action Types105055
Node: Mid-Rule Actions106358
Node: Locations111928
Node: Location Type112576
Node: Actions and Locations113134
Node: Location Default Action115290
Node: Declarations116753
Node: Token Decl118072
Node: Precedence Decl120085
Node: Union Decl121636
Node: Type Decl122480
Node: Expect Decl123386
Node: Start Decl124932
Node: Pure Decl125310
Node: Decl Summary126987
Node: Multiple Parsers132370
Node: Interface133864
Node: Parser Function134736
Node: Lexical135571
Node: Calling Convention136977
Node: Token Values139748
Node: Token Positions140897
Node: Pure Calling141782
Node: Error Reporting144714
Node: Action Features146836
Node: Algorithm150131
Node: Look-Ahead152424
Node: Shift/Reduce154556
Node: Precedence157468
Node: Why Precedence158119
Node: Using Precedence159984
Node: Precedence Examples160952
Node: How Precedence161653
Node: Contextual Precedence162802
Node: Parser States164593
Node: Reduce/Reduce165836
Node: Mystery Conflicts169397
Node: Stack Overflow172783
Node: Error Recovery174156
Node: Context Dependency179292
Node: Semantic Tokens180140
Node: Lexical Tie-ins183157
Node: Tie-in Recovery184705
Node: Debugging186877
Node: Invocation190178
Node: Bison Options191430
Node: Environment Variables195398
Node: Option Cross Key196246
Node: VMS Invocation197124
Node: Table of Symbols197908
Node: Glossary205547
Node: Copying This Manual211851
Node: GNU Free Documentation License212060
Node: Index231925

End Tag Table
-1076
View File
File diff suppressed because it is too large Load Diff
-1427
View File
File diff suppressed because it is too large Load Diff
-1317
View File
File diff suppressed because it is too large Load Diff
-1261
View File
File diff suppressed because it is too large Load Diff
-1036
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -56,7 +56,8 @@ foo_tab.c.
.indent -1 .indent -1
2 /DEBUG 2 /DEBUG
.skip .skip
Output a definition of the macro YYDEBUG into the parser file, In the parser file,
define the macro YYDEBUG to 1 if it is not already defined,
so that the debugging facilities are compiled. so that the debugging facilities are compiled.
.skip .skip
.indent -1 .indent -1
+259 -198
View File
@@ -447,16 +447,26 @@ lexicography, not grammar.)
Here is a simple C function subdivided into tokens: Here is a simple C function subdivided into tokens:
@ifinfo
@example @example
int /* @r{keyword `int'} */ int /* @r{keyword `int'} */
square (x) /* @r{identifier, open-paren,} */ square (int x) /* @r{identifier, open-paren, identifier,}
/* @r{identifier, close-paren} */ @r{identifier, close-paren} */
int x; /* @r{keyword `int', identifier, semicolon} */
@{ /* @r{open-brace} */ @{ /* @r{open-brace} */
return x * x; /* @r{keyword `return', identifier,} */ return x * x; /* @r{keyword `return', identifier, asterisk,
/* @r{asterisk, identifier, semicolon} */ identifier, semicolon} */
@} /* @r{close-brace} */ @} /* @r{close-brace} */
@end example @end example
@end ifinfo
@ifnotinfo
@example
int /* @r{keyword `int'} */
square (int x) /* @r{identifier, open-paren, identifier, identifier, close-paren} */
@{ /* @r{open-brace} */
return x * x; /* @r{keyword `return', identifier, asterisk, identifier, semicolon} */
@} /* @r{close-brace} */
@end example
@end ifnotinfo
The syntactic groupings of C include the expression, the statement, the The syntactic groupings of C include the expression, the statement, the
declaration, and the function definition. These are represented in the declaration, and the function definition. These are represented in the
@@ -683,7 +693,7 @@ arrange for it to call @code{yyparse} or the parser will never run.
@xref{Interface, ,Parser C-Language Interface}. @xref{Interface, ,Parser C-Language Interface}.
Aside from the token type names and the symbols in the actions you Aside from the token type names and the symbols in the actions you
write, all variable and function names used in the Bison parser file write, all symbols defined in the Bison parser file itself
begin with @samp{yy} or @samp{YY}. This includes interface functions begin with @samp{yy} or @samp{YY}. This includes interface functions
such as the lexical analyzer function @code{yylex}, the error reporting such as the lexical analyzer function @code{yylex}, the error reporting
function @code{yyerror} and the parser function @code{yyparse} itself. function @code{yyerror} and the parser function @code{yyparse} itself.
@@ -692,6 +702,15 @@ Therefore, you should avoid using C identifiers starting with @samp{yy}
or @samp{YY} in the Bison grammar file except for the ones defined in or @samp{YY} in the Bison grammar file except for the ones defined in
this manual. this manual.
In some cases the Bison parser file includes system headers, and in
those cases your code should respect the identifiers reserved by those
headers. On some non-@sc{gnu} hosts, @code{<alloca.h>},
@code{<stddef.h>}, and @code{<stdlib.h>} are included as needed to
declare memory allocators and related types. In the same situation,
C++ parsers may include @code{<cstddef>} and @code{<cstdlib>} instead.
Other system headers may be included if you define @code{YYDEBUG} to a
nonzero value (@pxref{Debugging, ,Debugging Your Parser}).
@node Stages @node Stages
@section Stages in Using Bison @section Stages in Using Bison
@cindex stages in using Bison @cindex stages in using Bison
@@ -855,11 +874,12 @@ The C declarations section (@pxref{C Declarations, ,The C Declarations Section})
preprocessor directives. preprocessor directives.
The @code{#define} directive defines the macro @code{YYSTYPE}, thus The @code{#define} directive defines the macro @code{YYSTYPE}, thus
specifying the C data type for semantic values of both tokens and groupings specifying the C data type for semantic values of both tokens and
(@pxref{Value Type, ,Data Types of Semantic Values}). The Bison parser will use whatever type groupings (@pxref{Value Type, ,Data Types of Semantic Values}). The
@code{YYSTYPE} is defined as; if you don't define it, @code{int} is the Bison parser will use whatever type @code{YYSTYPE} is defined as; if you
default. Because we specify @code{double}, each token and each expression don't define it, @code{int} is the default. Because we specify
has an associated value, which is a floating point number. @code{double}, each token and each expression has an associated value,
which is a floating point number.
The @code{#include} directive is used to declare the exponentiation The @code{#include} directive is used to declare the exponentiation
function @code{pow}. function @code{pow}.
@@ -1066,10 +1086,11 @@ token type is an identifier, that identifier is defined by Bison as a C
macro whose definition is the appropriate number. In this example, macro whose definition is the appropriate number. In this example,
therefore, @code{NUM} becomes a macro for @code{yylex} to use. therefore, @code{NUM} becomes a macro for @code{yylex} to use.
The semantic value of the token (if it has one) is stored into the global The semantic value of the token (if it has one) is stored into the
variable @code{yylval}, which is where the Bison parser will look for it. global variable @code{yylval}, which is where the Bison parser will look
(The C data type of @code{yylval} is @code{YYSTYPE}, which was defined for it. (The C data type of @code{yylval} is @code{YYSTYPE}, which was
at the beginning of the grammar; @pxref{Rpcalc Decls, ,Declarations for @code{rpcalc}}.) defined at the beginning of the grammar; @pxref{Rpcalc Decls,
,Declarations for @code{rpcalc}}.)
A token type code of zero is returned if the end-of-file is encountered. A token type code of zero is returned if the end-of-file is encountered.
(Bison recognizes any nonpositive value as indicating the end of the (Bison recognizes any nonpositive value as indicating the end of the
@@ -1202,19 +1223,19 @@ Here is how to compile and run the parser file:
@example @example
@group @group
# @r{List files in current directory.} # @r{List files in current directory.}
% ls $ @kbd{ls}
rpcalc.tab.c rpcalc.y rpcalc.tab.c rpcalc.y
@end group @end group
@group @group
# @r{Compile the Bison parser.} # @r{Compile the Bison parser.}
# @r{@samp{-lm} tells compiler to search math library for @code{pow}.} # @r{@samp{-lm} tells compiler to search math library for @code{pow}.}
% cc rpcalc.tab.c -lm -o rpcalc $ @kbd{cc rpcalc.tab.c -lm -o rpcalc}
@end group @end group
@group @group
# @r{List files again.} # @r{List files again.}
% ls $ @kbd{ls}
rpcalc rpcalc.tab.c rpcalc.y rpcalc rpcalc.tab.c rpcalc.y
@end group @end group
@end example @end example
@@ -1223,19 +1244,19 @@ The file @file{rpcalc} now contains the executable code. Here is an
example session using @code{rpcalc}. example session using @code{rpcalc}.
@example @example
% rpcalc $ @kbd{rpcalc}
4 9 + @kbd{4 9 +}
13 13
3 7 + 3 4 5 *+- @kbd{3 7 + 3 4 5 *+-}
-13 -13
3 7 + 3 4 5 * + - n @r{Note the unary minus, @samp{n}} @kbd{3 7 + 3 4 5 * + - n} @r{Note the unary minus, @samp{n}}
13 13
5 6 / 4 n + @kbd{5 6 / 4 n +}
-3.166666667 -3.166666667
3 4 ^ @r{Exponentiation} @kbd{3 4 ^} @r{Exponentiation}
81 81
^D @r{End-of-file indicator} @kbd{^D} @r{End-of-file indicator}
% $
@end example @end example
@node Infix Calc @node Infix Calc
@@ -1315,12 +1336,12 @@ Here is a sample run of @file{calc.y}:
@need 500 @need 500
@example @example
% calc $ @kbd{calc}
4 + 4.5 - (34/(8*3+-3)) @kbd{4 + 4.5 - (34/(8*3+-3))}
6.880952381 6.880952381
-56 + 2 @kbd{-56 + 2}
-54 -54
3 ^ 2 @kbd{3 ^ 2}
9 9
@end example @end example
@@ -1372,13 +1393,11 @@ Bison programs.
@cindex @code{ltcalc} @cindex @code{ltcalc}
@cindex calculator, location tracking @cindex calculator, location tracking
This example extends the infix notation calculator with location tracking. This example extends the infix notation calculator with location
This feature will be used to improve error reporting, and provide better tracking. This feature will be used to improve the error messages. For
error messages. the sake of clarity, this example is a simple integer calculator, since
most of the work needed to use locations will be done in the lexical
For the sake of clarity, we will switch for this example to an integer analyser.
calculator, since most of the work needed to use locations will be done
in the lexical analyser.
@menu @menu
* Decls: Ltcalc Decls. Bison and C declarations for ltcalc. * Decls: Ltcalc Decls. Bison and C declarations for ltcalc.
@@ -1389,8 +1408,8 @@ in the lexical analyser.
@node Ltcalc Decls @node Ltcalc Decls
@subsection Declarations for @code{ltcalc} @subsection Declarations for @code{ltcalc}
The C and Bison declarations for the location tracking calculator are the same The C and Bison declarations for the location tracking calculator are
as the declarations for the infix notation calculator. the same as the declarations for the infix notation calculator.
@example @example
/* Location tracking calculator. */ /* Location tracking calculator. */
@@ -1411,22 +1430,24 @@ as the declarations for the infix notation calculator.
%% /* Grammar follows */ %% /* Grammar follows */
@end example @end example
In the code above, there are no declarations specific to locations. Defining @noindent
a data type for storing locations is not needed: we will use the type provided Note there are no declarations specific to locations. Defining a data
by default (@pxref{Location Type, ,Data Types of Locations}), which is a four type for storing locations is not needed: we will use the type provided
member structure with the following integer fields: @code{first_line}, by default (@pxref{Location Type, ,Data Types of Locations}), which is a
@code{first_column}, @code{last_line} and @code{last_column}. four member structure with the following integer fields:
@code{first_line}, @code{first_column}, @code{last_line} and
@code{last_column}.
@node Ltcalc Rules @node Ltcalc Rules
@subsection Grammar Rules for @code{ltcalc} @subsection Grammar Rules for @code{ltcalc}
Whether you choose to handle locations or not has no effect on the syntax of Whether handling locations or not has no effect on the syntax of your
your language. Therefore, grammar rules for this example will be very close to language. Therefore, grammar rules for this example will be very close
those of the previous example: we will only modify them to benefit from the new to those of the previous example: we will only modify them to benefit
informations we will have. from the new information.
Here, we will use locations to report divisions by zero, and locate the wrong Here, we will use locations to report divisions by zero, and locate the
expressions or subexpressions. wrong expressions or subexpressions.
@example @example
@group @group
@@ -1447,17 +1468,17 @@ exp : NUM @{ $$ = $1; @}
| exp '-' exp @{ $$ = $1 - $3; @} | exp '-' exp @{ $$ = $1 - $3; @}
| exp '*' exp @{ $$ = $1 * $3; @} | exp '*' exp @{ $$ = $1 * $3; @}
@end group @end group
| exp '/' exp
@group @group
| exp '/' exp
@{ @{
if ($3) if ($3)
$$ = $1 / $3; $$ = $1 / $3;
else else
@{ @{
$$ = 1; $$ = 1;
printf("Division by zero, l%d,c%d-l%d,c%d", fprintf (stderr, "%d.%d-%d.%d: division by zero",
@@3.first_line, @@3.first_column, @@3.first_line, @@3.first_column,
@@3.last_line, @@3.last_column); @@3.last_line, @@3.last_column);
@} @}
@} @}
@end group @end group
@@ -1472,25 +1493,24 @@ This code shows how to reach locations inside of semantic actions, by
using the pseudo-variables @code{@@@var{n}} for rule components, and the using the pseudo-variables @code{@@@var{n}} for rule components, and the
pseudo-variable @code{@@$} for groupings. pseudo-variable @code{@@$} for groupings.
In this example, we never assign a value to @code{@@$}, because the We don't need to assign a value to @code{@@$}: the output parser does it
output parser can do this automatically. By default, before executing automatically. By default, before executing the C code of each action,
the C code of each action, @code{@@$} is set to range from the beginning @code{@@$} is set to range from the beginning of @code{@@1} to the end
of @code{@@1} to the end of @code{@@@var{n}}, for a rule with @var{n} of @code{@@@var{n}}, for a rule with @var{n} components. This behavior
components. can be redefined (@pxref{Location Default Action, , Default Action for
Locations}), and for very specific rules, @code{@@$} can be computed by
Of course, this behavior can be redefined (@pxref{Location Default hand.
Action, , Default Action for Locations}), and for very specific rules,
@code{@@$} can be computed by hand.
@node Ltcalc Lexer @node Ltcalc Lexer
@subsection The @code{ltcalc} Lexical Analyzer. @subsection The @code{ltcalc} Lexical Analyzer.
Until now, we relied on Bison's defaults to enable location tracking. The next Until now, we relied on Bison's defaults to enable location
step is to rewrite the lexical analyser, and make it able to feed the parser tracking. The next step is to rewrite the lexical analyser, and make it
with locations of tokens, as he already does for semantic values. able to feed the parser with the token locations, as it already does for
semantic values.
To do so, we must take into account every single character of the input text, To this end, we must take into account every single character of the
to avoid the computed locations of being fuzzy or wrong: input text, to avoid the computed locations of being fuzzy or wrong:
@example @example
@group @group
@@ -1540,17 +1560,18 @@ yylex (void)
@} @}
@end example @end example
Basically, the lexical analyzer does the same processing as before: it skips Basically, the lexical analyzer performs the same processing as before:
blanks and tabs, and reads numbers or single-character tokens. In addition it skips blanks and tabs, and reads numbers or single-character tokens.
to this, it updates the @code{yylloc} global variable (of type @code{YYLTYPE}), In addition, it updates @code{yylloc}, the global variable (of type
where the location of tokens is stored. @code{YYLTYPE}) containing the token's location.
Now, each time this function returns a token, the parser has it's number as Now, each time this function returns a token, the parser has its number
well as it's semantic value, and it's position in the text. The last needed as well as its semantic value, and its location in the text. The last
change is to initialize @code{yylloc}, for example in the controlling needed change is to initialize @code{yylloc}, for example in the
function: controlling function:
@example @example
@group
int int
main (void) main (void)
@{ @{
@@ -1558,11 +1579,12 @@ main (void)
yylloc.first_column = yylloc.last_column = 0; yylloc.first_column = yylloc.last_column = 0;
return yyparse (); return yyparse ();
@} @}
@end group
@end example @end example
Remember that computing locations is not a matter of syntax. Every character Remember that computing locations is not a matter of syntax. Every
must be associated to a location update, whether it is in valid input, in character must be associated to a location update, whether it is in
comments, in literal strings, and so on... valid input, in comments, in literal strings, and so on.
@node Multi-function Calc @node Multi-function Calc
@section Multi-Function Calculator: @code{mfcalc} @section Multi-Function Calculator: @code{mfcalc}
@@ -1592,20 +1614,20 @@ to create named variables, store values in them, and use them later.
Here is a sample session with the multi-function calculator: Here is a sample session with the multi-function calculator:
@example @example
% mfcalc $ @kbd{mfcalc}
pi = 3.141592653589 @kbd{pi = 3.141592653589}
3.1415926536 3.1415926536
sin(pi) @kbd{sin(pi)}
0.0000000000 0.0000000000
alpha = beta1 = 2.3 @kbd{alpha = beta1 = 2.3}
2.3000000000 2.3000000000
alpha @kbd{alpha}
2.3000000000 2.3000000000
ln(alpha) @kbd{ln(alpha)}
0.8329091229 0.8329091229
exp(ln(beta1)) @kbd{exp(ln(beta1))}
2.3000000000 2.3000000000
% $
@end example @end example
Note that multiple assignment and nested function calls are permitted. Note that multiple assignment and nested function calls are permitted.
@@ -2374,7 +2396,8 @@ the numbers associated with @var{x} and @var{y}.
In a simple program it may be sufficient to use the same data type for In a simple program it may be sufficient to use the same data type for
the semantic values of all language constructs. This was true in the the semantic values of all language constructs. This was true in the
RPN and infix calculator examples (@pxref{RPN Calc, ,Reverse Polish Notation Calculator}). RPN and infix calculator examples (@pxref{RPN Calc, ,Reverse Polish
Notation Calculator}).
Bison's default is to use type @code{int} for all semantic values. To Bison's default is to use type @code{int} for all semantic values. To
specify some other type, define @code{YYSTYPE} as a macro, like this: specify some other type, define @code{YYSTYPE} as a macro, like this:
@@ -3067,11 +3090,11 @@ terminal symbol. All kinds of token declarations allow
@findex %expect @findex %expect
Bison normally warns if there are any conflicts in the grammar Bison normally warns if there are any conflicts in the grammar
(@pxref{Shift/Reduce, ,Shift/Reduce Conflicts}), but most real grammars have harmless shift/reduce (@pxref{Shift/Reduce, ,Shift/Reduce Conflicts}), but most real grammars
conflicts which are resolved in a predictable way and would be difficult to have harmless shift/reduce conflicts which are resolved in a predictable
eliminate. It is desirable to suppress the warning about these conflicts way and would be difficult to eliminate. It is desirable to suppress
unless the number of conflicts changes. You can do this with the the warning about these conflicts unless the number of conflicts
@code{%expect} declaration. changes. You can do this with the @code{%expect} declaration.
The declaration looks like this: The declaration looks like this:
@@ -3079,10 +3102,11 @@ The declaration looks like this:
%expect @var{n} %expect @var{n}
@end example @end example
Here @var{n} is a decimal integer. The declaration says there should be no Here @var{n} is a decimal integer. The declaration says there should be
warning if there are @var{n} shift/reduce conflicts and no reduce/reduce no warning if there are @var{n} shift/reduce conflicts and no
conflicts. The usual warning is given if there are either more or fewer reduce/reduce conflicts. An error, instead of the usual warning, is
conflicts, or if there are any reduce/reduce conflicts. given if there are either more or fewer conflicts, or if there are any
reduce/reduce conflicts.
In general, using @code{%expect} involves these steps: In general, using @code{%expect} involves these steps:
@@ -3167,7 +3191,7 @@ valid grammar.
@cindex declaration summary @cindex declaration summary
@cindex summary, Bison declaration @cindex summary, Bison declaration
Here is a summary of all Bison declarations: Here is a summary of the declarations used to define a grammar:
@table @code @table @code
@item %union @item %union
@@ -3202,44 +3226,18 @@ Start-Symbol}).
@item %expect @item %expect
Declare the expected number of shift-reduce conflicts Declare the expected number of shift-reduce conflicts
(@pxref{Expect Decl, ,Suppressing Conflict Warnings}). (@pxref{Expect Decl, ,Suppressing Conflict Warnings}).
@end table
@item %yacc @sp 1
@itemx %fixed_output_files @noindent
Pretend the option @option{--yacc} was given, i.e., imitate Yacc, In order to change the behavior of @command{bison}, use the following
including its naming conventions. @xref{Bison Options}, for more. directives:
@item %locations
Generate the code processing the locations (@pxref{Action Features,
,Special Features for Use in Actions}). This mode is enabled as soon as
the grammar uses the special @samp{@@@var{n}} tokens, but if your
grammar does not use it, using @samp{%locations} allows for more
accurate parse error messages.
@item %pure_parser
Request a pure (reentrant) parser program (@pxref{Pure Decl, ,A Pure
(Reentrant) Parser}).
@item %no_parser
Do not include any C code in the parser file; generate tables only. The
parser file contains just @code{#define} directives and static variable
declarations.
This option also tells Bison to write the C code for the grammar actions
into a file named @file{@var{filename}.act}, in the form of a
brace-surrounded body fit for a @code{switch} statement.
@item %no_lines
Don't generate any @code{#line} preprocessor commands in the parser
file. Ordinarily Bison writes these commands in the parser file so that
the C compiler and debuggers will associate errors and object code with
your source file (the grammar file). This directive causes them to
associate errors with the parser file, treating it an independent source
file in its own right.
@table @code
@item %debug @item %debug
Output a definition of the macro @code{YYDEBUG} into the parser file, so In the parser file, define the macro @code{YYDEBUG} to 1 if it is not
that the debugging facilities are compiled. @xref{Debugging, ,Debugging already defined, so that the debugging facilities are compiled.
Your Parser}. @xref{Debugging, ,Debugging Your Parser}.
@item %defines @item %defines
Write an extra output file containing macro definitions for the token Write an extra output file containing macro definitions for the token
@@ -3254,35 +3252,64 @@ This output file is essential if you wish to put the definition of
be able to refer to token type codes and the variable be able to refer to token type codes and the variable
@code{yylval}. @xref{Token Values, ,Semantic Values of Tokens}.@refill @code{yylval}. @xref{Token Values, ,Semantic Values of Tokens}.@refill
@item %file-prefix="@var{prefix}"
Specify a prefix to use for all Bison output file names. The names are
chosen as if the input file were named @file{@var{prefix}.y}.
@c @item %header_extension
@c Specify the extension of the parser header file generated when
@c @code{%define} or @samp{-d} are used.
@c
@c For example, a grammar file named @file{foo.ypp} and containing a
@c @code{%header_extension .hh} directive will produce a header file
@c named @file{foo.tab.hh}
@item %locations
Generate the code processing the locations (@pxref{Action Features,
,Special Features for Use in Actions}). This mode is enabled as soon as
the grammar uses the special @samp{@@@var{n}} tokens, but if your
grammar does not use it, using @samp{%locations} allows for more
accurate parse error messages.
@item %name-prefix="@var{prefix}"
Rename the external symbols used in the parser so that they start with
@var{prefix} instead of @samp{yy}. The precise list of symbols renamed
is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs},
@code{yylval}, @code{yychar} and @code{yydebug}. For example, if you
use @samp{%name-prefix="c_"}, the names become @code{c_parse},
@code{c_lex}, and so on. @xref{Multiple Parsers, ,Multiple Parsers in
the Same Program}.
@item %no-parser
Do not include any C code in the parser file; generate tables only. The
parser file contains just @code{#define} directives and static variable
declarations.
This option also tells Bison to write the C code for the grammar actions
into a file named @file{@var{filename}.act}, in the form of a
brace-surrounded body fit for a @code{switch} statement.
@item %no-lines
Don't generate any @code{#line} preprocessor commands in the parser
file. Ordinarily Bison writes these commands in the parser file so that
the C compiler and debuggers will associate errors and object code with
your source file (the grammar file). This directive causes them to
associate errors with the parser file, treating it an independent source
file in its own right.
@item %output="@var{filename}"
Specify the @var{filename} for the parser file.
@item %pure-parser
Request a pure (reentrant) parser program (@pxref{Pure Decl, ,A Pure
(Reentrant) Parser}).
@c @item %source_extension @c @item %source_extension
@c Specify the extension of the parser output file. @c Specify the extension of the parser output file.
@c @c
@c For example, a grammar file named @file{foo.yy} and containing a @c For example, a grammar file named @file{foo.yy} and containing a
@c @code{%source_extension .cpp} directive will produce a parser file @c @code{%source_extension .cpp} directive will produce a parser file
@c named @file{foo.tab.cpp} @c named @file{foo.tab.cpp}
@c
@c @item %header_extension
@c Specify the extension of the parser header file generated when
@c @code{%define} or @samp{-d} are used.
@c
@c For example, a garmmar file named @file{foo.ypp} and containing a
@c @code{%header_extension .hh} directive will produce a header file
@c named @file{foo.tab.hh}
@item %verbose
Write an extra output file containing verbose descriptions of the
parser states and what is done for each type of look-ahead token in
that state.
This file also describes all the conflicts, both those resolved by
operator precedence and the unresolved ones.
The file's name is made by removing @samp{.tab.c} or @samp{.c} from
the parser output file name, and adding @samp{.output} instead.@refill
Therefore, if the input file is @file{foo.y}, then the parser file is
called @file{foo.tab.c} by default. As a consequence, the verbose
output file is called @file{foo.output}.@refill
@item %token_table @item %token_table
Generate an array of token names in the parser file. The name of the Generate an array of token names in the parser file. The name of the
@@ -3316,8 +3343,31 @@ The number of grammar rules,
@item YYNSTATES @item YYNSTATES
The number of parser states (@pxref{Parser States}). The number of parser states (@pxref{Parser States}).
@end table @end table
@item %verbose
Write an extra output file containing verbose descriptions of the
parser states and what is done for each type of look-ahead token in
that state.
This file also describes all the conflicts, both those resolved by
operator precedence and the unresolved ones.
The file's name is made by removing @samp{.tab.c} or @samp{.c} from
the parser output file name, and adding @samp{.output} instead.@refill
Therefore, if the input file is @file{foo.y}, then the parser file is
called @file{foo.tab.c} by default. As a consequence, the verbose
output file is called @file{foo.output}.@refill
@item %yacc
@itemx %fixed-output-files
Pretend the option @option{--yacc} was given, i.e., imitate Yacc,
including its naming conventions. @xref{Bison Options}, for more.
@end table @end table
@node Multiple Parsers @node Multiple Parsers
@section Multiple Parsers in the Same Program @section Multiple Parsers in the Same Program
@@ -4875,15 +4925,23 @@ If a Bison grammar compiles properly but doesn't do what you want when it
runs, the @code{yydebug} parser-trace feature can help you figure out why. runs, the @code{yydebug} parser-trace feature can help you figure out why.
To enable compilation of trace facilities, you must define the macro To enable compilation of trace facilities, you must define the macro
@code{YYDEBUG} when you compile the parser. You could use @code{YYDEBUG} to a nonzero value when you compile the parser. You
@samp{-DYYDEBUG=1} as a compiler option or you could put @samp{#define could use @samp{-DYYDEBUG=1} as a compiler option or you could put
YYDEBUG 1} in the C declarations section of the grammar file @samp{#define YYDEBUG 1} in the C declarations section of the grammar
(@pxref{C Declarations, ,The C Declarations Section}). Alternatively, use the @samp{-t} option when file (@pxref{C Declarations, ,The C Declarations Section}).
you run Bison (@pxref{Invocation, ,Invoking Bison}). We always define @code{YYDEBUG} so that Alternatively, use the @samp{-t} option when you run Bison
debugging is always possible. (@pxref{Invocation, ,Invoking Bison}) or the @code{%debug} declaration
(@pxref{Decl Summary, ,Bison Declaration Summary}). We suggest that
you always define @code{YYDEBUG} so that debugging is always possible.
The trace facility uses @code{stderr}, so you must add @w{@code{#include The trace facility outputs messages with macro calls of the form
<stdio.h>}} to the C declarations section unless it is already there. @code{YYFPRINTF (stderr, @var{format}, @var{args})} where
@var{format} and @var{args} are the usual @code{printf} format and
arguments. If you define @code{YYDEBUG} to a nonzero value but do not
define @code{YYFPRINTF}, @code{<stdio.h>} is automatically included
and @code{YYPRINTF} is defined to @code{fprintf}. In the same
situation, C++ parsers include @code{<cstdio>} and use
@code{std::fprintf} instead.
Once you have compiled the program with trace facilities, the way to Once you have compiled the program with trace facilities, the way to
request a trace is to store a nonzero value in the variable @code{yydebug}. request a trace is to store a nonzero value in the variable @code{yydebug}.
@@ -4962,7 +5020,7 @@ Here @var{infile} is the grammar file name, which usually ends in
@samp{.y}. The parser file's name is made by replacing the @samp{.y} @samp{.y}. The parser file's name is made by replacing the @samp{.y}
with @samp{.tab.c}. Thus, the @samp{bison foo.y} filename yields with @samp{.tab.c}. Thus, the @samp{bison foo.y} filename yields
@file{foo.tab.c}, and the @samp{bison hack/foo.y} filename yields @file{foo.tab.c}, and the @samp{bison hack/foo.y} filename yields
@file{hack/foo.tab.c}. It's is also possible, in case you are writting @file{hack/foo.tab.c}. It's is also possible, in case you are writing
C++ code instead of C in your grammar file, to name it @file{foo.ypp} C++ code instead of C in your grammar file, to name it @file{foo.ypp}
or @file{foo.y++}. Then, the output files will take an extention like or @file{foo.y++}. Then, the output files will take an extention like
the given one as input (repectively @file{foo.tab.cpp} and @file{foo.tab.c++}). the given one as input (repectively @file{foo.tab.cpp} and @file{foo.tab.c++}).
@@ -5044,24 +5102,17 @@ you are developing Bison.
@item -t @item -t
@itemx --debug @itemx --debug
Output a definition of the macro @code{YYDEBUG} into the parser file, so In the parser file, define the macro @code{YYDEBUG} to 1 if it is not
that the debugging facilities are compiled. @xref{Debugging, ,Debugging already defined, so that the debugging facilities are compiled.
Your Parser}. @xref{Debugging, ,Debugging Your Parser}.
@item --locations @item --locations
Pretend that @code{%locactions} was specified. @xref{Decl Summary}. Pretend that @code{%locations} was specified. @xref{Decl Summary}.
@item -p @var{prefix} @item -p @var{prefix}
@itemx --name-prefix=@var{prefix} @itemx --name-prefix=@var{prefix}
Rename the external symbols used in the parser so that they start with Pretend that @code{%name-prefix="@var{prefix}"} was specified.
@var{prefix} instead of @samp{yy}. The precise list of symbols renamed @xref{Decl Summary}.
is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs},
@code{yylval}, @code{yychar} and @code{yydebug}.
For example, if you use @samp{-p c}, the names become @code{cparse},
@code{clex}, and so on.
@xref{Multiple Parsers, ,Multiple Parsers in the Same Program}.
@item -l @item -l
@itemx --no-lines @itemx --no-lines
@@ -5073,11 +5124,11 @@ parser file, treating it as an independent source file in its own right.
@item -n @item -n
@itemx --no-parser @itemx --no-parser
Pretend that @code{%no_parser} was specified. @xref{Decl Summary}. Pretend that @code{%no-parser} was specified. @xref{Decl Summary}.
@item -k @item -k
@itemx --token-table @itemx --token-table
Pretend that @code{%token_table} was specified. @xref{Decl Summary}. Pretend that @code{%token-table} was specified. @xref{Decl Summary}.
@end table @end table
@noindent @noindent
@@ -5085,33 +5136,32 @@ Adjust the output:
@table @option @table @option
@item -d @item -d
Pretend that @code{%verbose} was specified, i.e., write an extra output @itemx --defines
Pretend that @code{%defines} was specified, i.e., write an extra output
file containing macro definitions for the token type names defined in file containing macro definitions for the token type names defined in
the grammar and the semantic value type @code{YYSTYPE}, as well as a few the grammar and the semantic value type @code{YYSTYPE}, as well as a few
@code{extern} variable declarations. @xref{Decl Summary}. @code{extern} variable declarations. @xref{Decl Summary}.
@item --defines=@var{defines-file} @item --defines=@var{defines-file}
The behaviour of @var{--defines} is the same than @samp{-d}. The only Same as above, but save in the file @var{defines-file}.
difference is that it has an optionnal argument which is the name of
the output filename.
@item -b @var{file-prefix} @item -b @var{file-prefix}
@itemx --file-prefix=@var{prefix} @itemx --file-prefix=@var{prefix}
Specify a prefix to use for all Bison output file names. The names are Pretend that @code{%verbose} was specified, i.e, specify prefix to use
chosen as if the input file were named @file{@var{prefix}.c}. for all Bison output file names. @xref{Decl Summary}.
@item -v @item -v
@itemx --verbose @itemx --verbose
Pretend that @code{%verbose} was specified, i.e, write an extra output Pretend that @code{%verbose} was specified, i.e, write an extra output
file containing verbose descriptions of the grammar and file containing verbose descriptions of the grammar and
parser. @xref{Decl Summary}, for more. parser. @xref{Decl Summary}.
@item -o @var{outfile} @item -o @var{filename}
@itemx --output-file=@var{outfile} @itemx --output=@var{filename}
Specify the name @var{outfile} for the parser file. Specify the @var{filename} for the parser file.
The other output files' names are constructed from @var{outfile} The other output files' names are constructed from @var{filename} as
as described under the @samp{-v} and @samp{-d} options. described under the @samp{-v} and @samp{-d} options.
@item -g @item -g
Output a VCG definition of the LALR(1) grammar automaton computed by Output a VCG definition of the LALR(1) grammar automaton computed by
@@ -5119,7 +5169,7 @@ Bison. If the grammar file is @file{foo.y}, the VCG output file will
be @file{foo.vcg}. be @file{foo.vcg}.
@item --graph=@var{graph-file} @item --graph=@var{graph-file}
The behaviour of @var{--graph} is the same than @samp{-g}. The only The behaviour of @var{--graph} is the same than @samp{-g}. The only
difference is that it has an optionnal argument which is the name of difference is that it has an optionnal argument which is the name of
the output graph filename. the output graph filename.
@end table @end table
@@ -5168,7 +5218,7 @@ the corresponding short option.
\line{ --name-prefix \leaderfill -p} \line{ --name-prefix \leaderfill -p}
\line{ --no-lines \leaderfill -l} \line{ --no-lines \leaderfill -l}
\line{ --no-parser \leaderfill -n} \line{ --no-parser \leaderfill -n}
\line{ --output-file \leaderfill -o} \line{ --output \leaderfill -o}
\line{ --token-table \leaderfill -k} \line{ --token-table \leaderfill -k}
\line{ --verbose \leaderfill -v} \line{ --verbose \leaderfill -v}
\line{ --version \leaderfill -V} \line{ --version \leaderfill -V}
@@ -5187,7 +5237,7 @@ the corresponding short option.
--name-prefix=@var{prefix} -p @var{name-prefix} --name-prefix=@var{prefix} -p @var{name-prefix}
--no-lines -l --no-lines -l
--no-parser -n --no-parser -n
--output-file=@var{outfile} -o @var{outfile} --output=@var{outfile} -o @var{outfile}
--token-table -k --token-table -k
--verbose -v --verbose -v
--version -V --version -V
@@ -5361,6 +5411,10 @@ Equip the parser for debugging. @xref{Decl Summary}.
Bison declaration to create a header file meant for the scanner. Bison declaration to create a header file meant for the scanner.
@xref{Decl Summary}. @xref{Decl Summary}.
@item %file-prefix="@var{prefix}"
Bison declaration to set tge prefix of the output files. @xref{Decl
Summary}.
@c @item %source_extension @c @item %source_extension
@c Bison declaration to specify the generated parser output file extension. @c Bison declaration to specify the generated parser output file extension.
@c @xref{Decl Summary}. @c @xref{Decl Summary}.
@@ -5373,7 +5427,10 @@ Bison declaration to create a header file meant for the scanner.
Bison declaration to assign left associativity to token(s). Bison declaration to assign left associativity to token(s).
@xref{Precedence Decl, ,Operator Precedence}. @xref{Precedence Decl, ,Operator Precedence}.
@item %no_lines @item %name-prefix="@var{prefix}"
Bison declaration to rename the external symbols. @xref{Decl Summary}.
@item %no-lines
Bison declaration to avoid generating @code{#line} directives in the Bison declaration to avoid generating @code{#line} directives in the
parser file. @xref{Decl Summary}. parser file. @xref{Decl Summary}.
@@ -5381,11 +5438,15 @@ parser file. @xref{Decl Summary}.
Bison declaration to assign non-associativity to token(s). Bison declaration to assign non-associativity to token(s).
@xref{Precedence Decl, ,Operator Precedence}. @xref{Precedence Decl, ,Operator Precedence}.
@item %output="@var{filename}"
Bison declaration to set the name of the parser file. @xref{Decl
Summary}.
@item %prec @item %prec
Bison declaration to assign a precedence to a specific rule. Bison declaration to assign a precedence to a specific rule.
@xref{Contextual Precedence, ,Context-Dependent Precedence}. @xref{Contextual Precedence, ,Context-Dependent Precedence}.
@item %pure_parser @item %pure-parser
Bison declaration to request a pure (reentrant) parser. Bison declaration to request a pure (reentrant) parser.
@xref{Pure Decl, ,A Pure (Reentrant) Parser}. @xref{Pure Decl, ,A Pure (Reentrant) Parser}.
@@ -5400,7 +5461,7 @@ Bison declaration to specify the start symbol. @xref{Start Decl, ,The Start-Sym
Bison declaration to declare token(s) without specifying precedence. Bison declaration to declare token(s) without specifying precedence.
@xref{Token Decl, ,Token Type Names}. @xref{Token Decl, ,Token Type Names}.
@item %token_table @item %token-table
Bison declaration to include a token name table in the parser file. Bison declaration to include a token name table in the parser file.
@xref{Decl Summary}. @xref{Decl Summary}.
+44 -38
View File
@@ -6,7 +6,7 @@
% This file can be printed with 1 or 2 columns per page (see below). % This file can be printed with 1 or 2 columns per page (see below).
% Specify how many you want here. Nothing else needs to be changed % Specify how many you want here. Nothing else needs to be changed
% unless you are maintaining the documentation. % unless you are maintaining the documentation.
% For printing reference cards to use in books, specify one column % For printing reference cards to use in books, specify one column
% per page and reduce to 80%. % per page and reduce to 80%.
% Note that if columnsperpage is set to 2, there will be a few overfull % Note that if columnsperpage is set to 2, there will be a few overfull
% boxes, but they are not serious. Just uncomment \finalout. % boxes, but they are not serious. Just uncomment \finalout.
@@ -19,7 +19,7 @@
\def\finalout{\overfullrule=0pt} \def\finalout{\overfullrule=0pt}
%\finalout %\finalout
% Copyright (c) 1998 Free Software Foundation, Inc. % Copyright (c) 1998, 2001 Free Software Foundation, Inc.
% %
% This file is part of Bison. % This file is part of Bison.
% %
@@ -51,11 +51,11 @@
% Which mode to use is controlled by setting \columnsperpage above. % Which mode to use is controlled by setting \columnsperpage above.
% %
% Authors: % Authors:
% Brendan Kehoe % Brendan Kehoe
% UUCP: widener!brendan % UUCP: widener!brendan
% Internet: [email protected] % Internet: [email protected]
% %
% Gavin Nicol % Gavin Nicol
% Internet: [email protected] % Internet: [email protected]
% %
% This refcard format was created by Steve Gildea. % This refcard format was created by Steve Gildea.
@@ -66,12 +66,12 @@
% We only change the following to change the version numbers and % We only change the following to change the version numbers and
% such. % such.
\def\bisonversion{1.20} % the bison version \def\bisonversion{1.31} % the bison version
\def\refcardversion{0.4a} % reference card version \def\refcardversion{0.5} % reference card version
\def\month{August} % month \def\month{November} % month
\def\year{1998} % year \def\year{2001} % year
\def\version{\month\ \year, Bison Refcard Version \refcardversion} \def\version{\month\ \year, Bison Refcard Version \refcardversion}
% for copyright notices % for copyright notices
\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip} \def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip}
@@ -90,7 +90,7 @@
Permission is granted to make and distribute copies of this card Permission is granted to make and distribute copies of this card
provided the copyright notice and this permission notice provided the copyright notice and this permission notice
are preserved on all copies. are preserved on all copies.
\vskip .2\baselineskip \vskip .2\baselineskip
For information, write to the: For information, write to the:
\vskip .2\baselineskip \vskip .2\baselineskip
@@ -115,7 +115,7 @@ For information, write to the:
Permission is granted to make and distribute copies of this card Permission is granted to make and distribute copies of this card
provided the copyright notice and this permission notice provided the copyright notice and this permission notice
are preserved on all copies. are preserved on all copies.
\vskip .2\baselineskip \vskip .2\baselineskip
For information, write to the: For information, write to the:
\vskip .2\baselineskip \vskip .2\baselineskip
@@ -136,7 +136,7 @@ For information, write to the:
\def\ncolumns{\the\columnsperpage} \def\ncolumns{\the\columnsperpage}
\message{[\ncolumns\space \message{[\ncolumns\space
column\if 1\ncolumns\else s\fi\space per page]} column\if 1\ncolumns\else s\fi\space per page]}
\def\scaledmag#1{ scaled \magstep #1} \def\scaledmag#1{ scaled \magstep #1}
@@ -227,7 +227,7 @@ For information, write to the:
\def\bye{\par\vfill\supereject \def\bye{\par\vfill\supereject
\if a\abc \else\null\vfill\eject\fi \if a\abc \else\null\vfill\eject\fi
\if a\abc \else\null\vfill\eject\fi \if a\abc \else\null\vfill\eject\fi
\end} \end}
\fi \fi
% we won't be using math mode much, so redefine some of the characters % we won't be using math mode much, so redefine some of the characters
@@ -316,41 +316,44 @@ Options can be used as: \kbd{bison {\it options} {\it filename}}
\section{Command Line Options} \section{Command Line Options}
%***************************** %*****************************
\key{Display usage information.} {-h}
\key{Display version information.} {-V}
\key{Generate token and {\tt YYSTYPE} definitions.} {-d} \key{Generate token and {\tt YYSTYPE} definitions.} {-d}
\key{Prepend a prefix to external symbols.} {-p {\it prefix}}
\key{Don't put {\tt \#line} directives in the parser.} {-l} \key{Don't put {\tt \#line} directives in the parser.} {-l}
\key{Specify the output file.} {-o {\it filename}} \key{Specify the output file.} {-o {\it filename}}
\key{Debug or {\it trace} mode.} {-t} \key{Debug or {\it trace} mode.} {-t}
\key{Verbose description of the parser.} {-v} \key{Verbose description of the parser.} {-v}
\key{Emulate {\tt yacc} (generate {\tt y.tab.*} files).} {-y} \key{Emulate {\tt yacc} (generate {\tt y.tab.*} files).} {-y}
\vskip .10truein \vskip .10truein
{\bf Note:} The token and {\tt YYSTYPE} definitions are generated {\bf Note:} The token and {\tt YYSTYPE} definitions are generated
to a file called {\tt y.tab.h} if the {\tt -y} option is used, to a file called {\tt y.tab.h} if the {\tt -y} option is used,
otherwise it will have the format {\tt {\it name}.tab.h}, where otherwise it will have the format {\tt {\it name}.tab.h}, where
{\it name} is the leading part of the parser definition filename. {\it name} is the leading part of the parser definition filename.
\section{Definitions} \section{Definitions}
%******************** %********************
\key{Declare a terminal symbol.}{\%token <{\it t\/}> \key{Declare a terminal symbol.}{\%token <{\it t\/}>
{\it n}} {\it n}}
\key{Declare a terminal symbol, and define its association.} \key{Declare a terminal symbol, and define its association.}
{{\it association} <{\it t\/}> {\it n}} {{\it association} <{\it t\/}> {\it n}}
\vskip .2\baselineskip \vskip .2\baselineskip
\key{Generate a reentrant (pure) parser.} \key{Generate a reentrant (pure) parser.}
{\%pure_parser} {\%pure_parser}
\key{Define the union of all data types used in the parser.} \key{Define the union of all data types used in the parser.}
{\%union\{{\it field list}\} } {\%union\{{\it field list}\} }
\vskip .2\baselineskip \vskip .2\baselineskip
\key{Tell {\tt bison} where to start parsing.} \key{Tell {\tt bison} where to start parsing.}
{\%start {\it m}} {\%start {\it m}}
\key{Tell {\tt bison} the data type of symbols.} \key{Tell {\tt bison} the data type of symbols.}
{\%type <{\it t\/}> {\it s1}\dots{\it sn}} {\%type <{\it t\/}> {\it s1}\dots{\it sn}}
\vskip .10truein \vskip .10truein
@@ -362,8 +365,8 @@ definition, {\it n} is a {\it terminal} symbol name, {\it m} is a
\vskip .10truein \vskip .10truein
The {\tt <{\it t\/}>} after {\tt \%token, \%left, \%right} and {\tt The {\tt <{\it t\/}>} after {\tt \%token, \%left, \%right} and {\tt
\%nonassoc} is optional. Additionally, precedence may be overridden with \%nonassoc} is optional. Additionally, precedence may be overridden
embedded {\tt \%prec} commands. in the rules with {\tt \%prec} commands.
\section{Parser Definition Files} \section{Parser Definition Files}
%********************************* %*********************************
@@ -379,7 +382,7 @@ The general form for a parser definition is:
\%\% \%\%
Rule definition 1 Rule definition 1
\vdots \vdots
Rule definition {\it n} Rule definition {\it n}
@@ -397,8 +400,9 @@ The general form for a parser definition is:
Rules take the form: Rules take the form:
\vskip -\baselineskip
\beginexample \beginexample
non-terminal : {\it statement} 1 non-terminal : {\it statement} 1
| {\it statement} 2 | {\it statement} 2
\vdots \vdots
| {\it statement n} | {\it statement n}
@@ -406,12 +410,12 @@ Rules take the form:
\endexample \endexample
Where {\it statements} can be either empty, or contain Where {\it statements} can be either empty, or contain
a mixture of C code (enclosed in {\tt \{...\}}), and the a mixture of C code (enclosed in {\tt \{...\}}), and the
symbols that make up the non-terminal. For example: symbols that make up the non-terminal. For example:
\vskip -\baselineskip \vskip -\baselineskip
\beginexample \beginexample
expression : number '$+$' number \{ \$\$ $=$ \$1 $+$ \$3 \} expression : number '$+$' number \{ \$\$ $=$ \$1 $+$ \$3 \}
| number '$-$' number \{ \$\$ $=$ \$1 $-$ \$3 \} | number '$-$' number \{ \$\$ $=$ \$1 $-$ \$3 \}
| number '$/$' number \{ \$\$ $=$ \$1 $/$ \$3 \} | number '$/$' number \{ \$\$ $=$ \$1 $/$ \$3 \}
| number '$*$' number \{ \$\$ $=$ \$1 $*$ \$3 \} | number '$*$' number \{ \$\$ $=$ \$1 $*$ \$3 \}
@@ -428,7 +432,7 @@ For altering the precedence of a symbol use:
For example: For example:
\vskip -\baselineskip \vskip -\baselineskip
\beginexample \beginexample
foo : gnu bar gnu \%prec bar foo : gnu bar gnu \%prec bar
; ;
\endexample \endexample
@@ -438,16 +442,18 @@ For example:
\key{Recognize an error \& continue parsing.}{error} \key{Recognize an error \& continue parsing.}{error}
\key{Access data associated with a symbol.} {\$\$, \$0\dots\${\it n}} \key{Access data associated with a symbol.} {\$\$, \$0\dots\${\it n}}
\key{Access a field of the data union.} {\$\$.{\it t}, \key{Access a field of the data union.} {\$\$.{\it t},
\$0.{\it t}\dots\${\it n}.{\it t}} \$0.{\it t}\dots\${\it n}.{\it t}}
\key{Access data's line position.} {@{\it n}.{\it line\_spec}} \key{Access symbol's location.} {@\$, @0\dots@{\it n}}
\key{Access data's column position.} {@{\it n}.{\it column\_spec}} \key{Access data's line location.} {@{\it x}.{\it line\_spec}}
\key{Access data's column location.} {@{\it x}.{\it column\_spec}}
\vskip .10truein \vskip .10truein
%
Where {\it t} is a type defined in the {\tt \%union}, {\it n} is a Where {\it t} is a type defined in the {\tt \%union}, {\it n} is a
number, {\it line\_spec} one of {\tt first_line} and {\tt last_line}, number, {\it x} is a number or \$, {\it line\_spec} one of {\tt
and {\it column\_spec} is specified as either {\tt first_column} or {\tt first_line} and {\tt last_line}, and {\it column\_spec} is specified
last_column}. as either {\tt first_column} or {\tt last_column}.
\section {Variables and Types} \section {Variables and Types}
%***************************** %*****************************
-4
View File
@@ -1,4 +0,0 @@
@set UPDATED 20 September 2001
@set UPDATED-MONTH September 2001
@set EDITION 1.29e
@set VERSION 1.29e
+4 -4
View File
@@ -1,4 +1,4 @@
@set UPDATED 20 September 2001 @set UPDATED 5 January 2002
@set UPDATED-MONTH September 2001 @set UPDATED-MONTH January 2002
@set EDITION 1.29e @set EDITION 1.31
@set VERSION 1.29e @set VERSION 1.31
+24 -8
View File
@@ -1,22 +1,38 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*- ## Copyright 2001, 2002 Free Software Foundation, Inc.
## 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
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## This program 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 this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
## 02111-1307 USA
AUTOMAKE_OPTIONS = ansi2knr AUTOMAKE_OPTIONS = ansi2knr
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS)
noinst_LIBRARIES = libbison.a noinst_LIBRARIES = libbison.a
INCLUDES = -I.. -I$(srcdir) -I../intl INCLUDES = -I.. -I$(srcdir) -I../intl
# Heck, we are still using an old version of Automake which does not # Heck, we are still using an old version of Automake which does not
# understand LIBOBJ additions using $objext... # understand inner AC_LIBOBJ (i.e., from Autoconf itself, not from
# configure.in).
EXTRA_DIST = malloc.c realloc.c EXTRA_DIST = malloc.c realloc.c strnlen.c
libbison_a_SOURCES = \ libbison_a_SOURCES = \
error.c error.h \ basename.c dirname.h dirname.c \
getopt.h getopt.c getopt1.c \ getopt.h getopt.c getopt1.c \
obstack.h obstack.c \
quote.h quote.c quotearg.h quotearg.c \ quote.h quote.c quotearg.h quotearg.c \
xalloc.h xmalloc.c xstrdup.c xalloc.h xmalloc.c xstrdup.c xstrndup.c
libbison_a_LIBADD = @LIBOBJS@ libbison_a_LIBADD = @LIBOBJS@ @ALLOCA@
libbison_a_DEPENDENCIES = $(libbison_a_LIBADD) libbison_a_DEPENDENCIES = $(libbison_a_LIBADD)
+61 -46
View File
@@ -1,4 +1,5 @@
# Makefile.in generated automatically by automake 1.5a from Makefile.am. # Makefile.in generated by automake 1.5c from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
@@ -12,7 +13,6 @@
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@ @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
@@ -47,6 +47,7 @@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA) INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@ transform = @program_transform_name@
@@ -83,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@ INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@ INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LIB = @LIB@
LIBICONV = @LIBICONV@ LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@ MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@ MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
@@ -96,30 +97,32 @@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@ USE_NLS = @USE_NLS@
VERSION = @VERSION@ VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CFLAGS = @WARNING_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
am__include = @am__include@ am__include = @am__include@
am__quote = @am__quote@ am__quote = @am__quote@
install_sh = @install_sh@ install_sh = @install_sh@
AUTOMAKE_OPTIONS = ansi2knr AUTOMAKE_OPTIONS = ansi2knr
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS)
noinst_LIBRARIES = libbison.a noinst_LIBRARIES = libbison.a
INCLUDES = -I.. -I$(srcdir) -I../intl INCLUDES = -I.. -I$(srcdir) -I../intl
# Heck, we are still using an old version of Automake which does not # Heck, we are still using an old version of Automake which does not
# understand LIBOBJ additions using $objext... # understand inner AC_LIBOBJ (i.e., from Autoconf itself, not from
EXTRA_DIST = malloc.c realloc.c # configure.in).
EXTRA_DIST = malloc.c realloc.c strnlen.c
libbison_a_SOURCES = \ libbison_a_SOURCES = \
error.c error.h \ basename.c dirname.h dirname.c \
getopt.h getopt.c getopt1.c \ getopt.h getopt.c getopt1.c \
obstack.h obstack.c \
quote.h quote.c quotearg.h quotearg.c \ quote.h quote.c quotearg.h quotearg.c \
xalloc.h xmalloc.c xstrdup.c xalloc.h xmalloc.c xstrdup.c xstrndup.c
libbison_a_LIBADD = @LIBOBJS@ libbison_a_LIBADD = @LIBOBJS@ @ALLOCA@
libbison_a_DEPENDENCIES = $(libbison_a_LIBADD) libbison_a_DEPENDENCIES = $(libbison_a_LIBADD)
subdir = lib subdir = lib
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
@@ -128,9 +131,10 @@ CONFIG_CLEAN_FILES =
LIBRARIES = $(noinst_LIBRARIES) LIBRARIES = $(noinst_LIBRARIES)
libbison_a_AR = $(AR) cru libbison_a_AR = $(AR) cru
am_libbison_a_OBJECTS = error$U.$(OBJEXT) getopt$U.$(OBJEXT) \ am_libbison_a_OBJECTS = basename$U.$(OBJEXT) dirname$U.$(OBJEXT) \
getopt1$U.$(OBJEXT) obstack$U.$(OBJEXT) quote$U.$(OBJEXT) \ getopt$U.$(OBJEXT) getopt1$U.$(OBJEXT) quote$U.$(OBJEXT) \
quotearg$U.$(OBJEXT) xmalloc$U.$(OBJEXT) xstrdup$U.$(OBJEXT) quotearg$U.$(OBJEXT) xmalloc$U.$(OBJEXT) xstrdup$U.$(OBJEXT) \
xstrndup$U.$(OBJEXT)
libbison_a_OBJECTS = $(am_libbison_a_OBJECTS) libbison_a_OBJECTS = $(am_libbison_a_OBJECTS)
DEFS = @DEFS@ DEFS = @DEFS@
@@ -139,22 +143,24 @@ CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LIBS = @LIBS@ LIBS = @LIBS@
depcomp = $(SHELL) $(top_srcdir)/config/depcomp depcomp = $(SHELL) $(top_srcdir)/config/depcomp
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/error$U.Po $(DEPDIR)/getopt$U.Po \ @AMDEP_TRUE@DEP_FILES = $(DEPDIR)/alloca.Po $(DEPDIR)/basename$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/getopt1$U.Po $(DEPDIR)/malloc.Po \ @AMDEP_TRUE@ $(DEPDIR)/dirname$U.Po $(DEPDIR)/error.Po \
@AMDEP_TRUE@ $(DEPDIR)/memchr.Po $(DEPDIR)/obstack$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/getopt$U.Po $(DEPDIR)/getopt1$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/malloc.Po $(DEPDIR)/memchr.Po \
@AMDEP_TRUE@ $(DEPDIR)/memrchr.Po $(DEPDIR)/obstack.Po \
@AMDEP_TRUE@ $(DEPDIR)/quote$U.Po $(DEPDIR)/quotearg$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/quote$U.Po $(DEPDIR)/quotearg$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/realloc.Po $(DEPDIR)/stpcpy.Po \ @AMDEP_TRUE@ $(DEPDIR)/realloc.Po $(DEPDIR)/stpcpy.Po \
@AMDEP_TRUE@ $(DEPDIR)/strndup.Po $(DEPDIR)/strnlen.Po \ @AMDEP_TRUE@ $(DEPDIR)/strchr.Po $(DEPDIR)/strspn.Po \
@AMDEP_TRUE@ $(DEPDIR)/strspn.Po $(DEPDIR)/xmalloc$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/xmalloc$U.Po $(DEPDIR)/xstrdup$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/xstrdup$U.Po @AMDEP_TRUE@ $(DEPDIR)/xstrndup$U.Po
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC) CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
DIST_SOURCES = $(libbison_a_SOURCES) DIST_SOURCES = $(libbison_a_SOURCES)
DIST_COMMON = Makefile.am Makefile.in ansi2knr.1 ansi2knr.c malloc.c \ DIST_COMMON = Makefile.am Makefile.in alloca.c ansi2knr.1 ansi2knr.c \
memchr.c realloc.c stpcpy.c strndup.c strnlen.c strspn.c error.c error.h malloc.c memchr.c memrchr.c obstack.c obstack.h \
realloc.c stpcpy.c strchr.c strspn.c
SOURCES = $(libbison_a_SOURCES) SOURCES = $(libbison_a_SOURCES)
all: all-am all: all-am
@@ -165,9 +171,7 @@ $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \ cd $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/Makefile $(AUTOMAKE) --gnu lib/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
AR = ar AR = ar
@@ -193,23 +197,27 @@ clean-krextra:
-rm -f ansi2knr -rm -f ansi2knr
mostlyclean-kr: mostlyclean-kr:
-rm -f *_.c -test "$U" = "" || rm -f *_.c
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/error$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/basename$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dirname$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/error.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt1$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt1$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/malloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/malloc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memchr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memchr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/obstack$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memrchr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/obstack.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/quote$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/quote$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/quotearg$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/quotearg$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/realloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/realloc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/stpcpy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/stpcpy.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strndup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strchr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strnlen.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strspn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strspn.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xmalloc$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xmalloc$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xstrdup$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xstrdup$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xstrndup$U.Po@am__quote@
distclean-depend: distclean-depend:
-rm -rf $(DEPDIR) -rm -rf $(DEPDIR)
@@ -228,6 +236,10 @@ distclean-depend:
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
alloca_.c: alloca.c $(ANSI2KNR) alloca_.c: alloca.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > alloca_.c || rm -f alloca_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > alloca_.c || rm -f alloca_.c
basename_.c: basename.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/basename.c; then echo $(srcdir)/basename.c; else echo basename.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > basename_.c || rm -f basename_.c
dirname_.c: dirname.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dirname.c; then echo $(srcdir)/dirname.c; else echo dirname.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > dirname_.c || rm -f dirname_.c
error_.c: error.c $(ANSI2KNR) error_.c: error.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > error_.c || rm -f error_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > error_.c || rm -f error_.c
getopt_.c: getopt.c $(ANSI2KNR) getopt_.c: getopt.c $(ANSI2KNR)
@@ -238,6 +250,8 @@ malloc_.c: malloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/malloc.c; then echo $(srcdir)/malloc.c; else echo malloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > malloc_.c || rm -f malloc_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/malloc.c; then echo $(srcdir)/malloc.c; else echo malloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > malloc_.c || rm -f malloc_.c
memchr_.c: memchr.c $(ANSI2KNR) memchr_.c: memchr.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memchr.c; then echo $(srcdir)/memchr.c; else echo memchr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memchr_.c || rm -f memchr_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memchr.c; then echo $(srcdir)/memchr.c; else echo memchr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memchr_.c || rm -f memchr_.c
memrchr_.c: memrchr.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memrchr.c; then echo $(srcdir)/memrchr.c; else echo memrchr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memrchr_.c || rm -f memrchr_.c
obstack_.c: obstack.c $(ANSI2KNR) obstack_.c: obstack.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/obstack.c; then echo $(srcdir)/obstack.c; else echo obstack.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > obstack_.c || rm -f obstack_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/obstack.c; then echo $(srcdir)/obstack.c; else echo obstack.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > obstack_.c || rm -f obstack_.c
quote_.c: quote.c $(ANSI2KNR) quote_.c: quote.c $(ANSI2KNR)
@@ -248,46 +262,47 @@ realloc_.c: realloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/realloc.c; then echo $(srcdir)/realloc.c; else echo realloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > realloc_.c || rm -f realloc_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/realloc.c; then echo $(srcdir)/realloc.c; else echo realloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > realloc_.c || rm -f realloc_.c
stpcpy_.c: stpcpy.c $(ANSI2KNR) stpcpy_.c: stpcpy.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stpcpy.c; then echo $(srcdir)/stpcpy.c; else echo stpcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stpcpy_.c || rm -f stpcpy_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stpcpy.c; then echo $(srcdir)/stpcpy.c; else echo stpcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stpcpy_.c || rm -f stpcpy_.c
strndup_.c: strndup.c $(ANSI2KNR) strchr_.c: strchr.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strndup.c; then echo $(srcdir)/strndup.c; else echo strndup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strndup_.c || rm -f strndup_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strchr.c; then echo $(srcdir)/strchr.c; else echo strchr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strchr_.c || rm -f strchr_.c
strnlen_.c: strnlen.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strnlen.c; then echo $(srcdir)/strnlen.c; else echo strnlen.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strnlen_.c || rm -f strnlen_.c
strspn_.c: strspn.c $(ANSI2KNR) strspn_.c: strspn.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strspn.c; then echo $(srcdir)/strspn.c; else echo strspn.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strspn_.c || rm -f strspn_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strspn.c; then echo $(srcdir)/strspn.c; else echo strspn.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strspn_.c || rm -f strspn_.c
xmalloc_.c: xmalloc.c $(ANSI2KNR) xmalloc_.c: xmalloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xmalloc_.c || rm -f xmalloc_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xmalloc_.c || rm -f xmalloc_.c
xstrdup_.c: xstrdup.c $(ANSI2KNR) xstrdup_.c: xstrdup.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrdup_.c || rm -f xstrdup_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrdup_.c || rm -f xstrdup_.c
alloca_.$(OBJEXT) error_.$(OBJEXT) getopt_.$(OBJEXT) getopt1_.$(OBJEXT) \ xstrndup_.c: xstrndup.c $(ANSI2KNR)
malloc_.$(OBJEXT) memchr_.$(OBJEXT) obstack_.$(OBJEXT) quote_.$(OBJEXT) \ $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrndup.c; then echo $(srcdir)/xstrndup.c; else echo xstrndup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrndup_.c || rm -f xstrndup_.c
quotearg_.$(OBJEXT) realloc_.$(OBJEXT) stpcpy_.$(OBJEXT) \ alloca_.$(OBJEXT) basename_.$(OBJEXT) dirname_.$(OBJEXT) \
strndup_.$(OBJEXT) strnlen_.$(OBJEXT) strspn_.$(OBJEXT) \ error_.$(OBJEXT) getopt_.$(OBJEXT) getopt1_.$(OBJEXT) malloc_.$(OBJEXT) \
xmalloc_.$(OBJEXT) xstrdup_.$(OBJEXT) : $(ANSI2KNR) memchr_.$(OBJEXT) memrchr_.$(OBJEXT) obstack_.$(OBJEXT) \
quote_.$(OBJEXT) quotearg_.$(OBJEXT) realloc_.$(OBJEXT) \
stpcpy_.$(OBJEXT) strchr_.$(OBJEXT) strspn_.$(OBJEXT) \
xmalloc_.$(OBJEXT) xstrdup_.$(OBJEXT) xstrndup_.$(OBJEXT) : $(ANSI2KNR)
uninstall-info-am: uninstall-info-am:
tags: TAGS tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) ' { files[$$0] = 1; } \ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
mkid -fID $$unique $(LISP) mkid -fID $$unique
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
tags=; \ tags=; \
here=`pwd`; \ here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) ' { files[$$0] = 1; } \ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP) || etags $(ETAGS_ARGS) $$tags $$unique
GTAGS: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \ here=`$(am__cd) $(top_builddir) && pwd` \
@@ -296,7 +311,6 @@ GTAGS:
distclean-tags: distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .. top_distdir = ..
@@ -304,7 +318,7 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES) distdir: $(DISTFILES)
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
$(mkinstalldirs) "$(distdir)/$$dir"; \ $(mkinstalldirs) "$(distdir)/$$dir"; \
@@ -335,6 +349,7 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \ `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
+66 -66
View File
@@ -22,18 +22,18 @@
your main control loop, etc. to force garbage collection. */ your main control loop, etc. to force garbage collection. */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> # include <config.h>
#endif #endif
#ifdef HAVE_STRING_H #if HAVE_STRING_H
#include <string.h> # include <string.h>
#endif #endif
#ifdef HAVE_STDLIB_H #if HAVE_STDLIB_H
#include <stdlib.h> # include <stdlib.h>
#endif #endif
#ifdef emacs #ifdef emacs
#include "blockinput.h" # include "blockinput.h"
#endif #endif
/* If compiling with GCC 2, this file's not needed. */ /* If compiling with GCC 2, this file's not needed. */
@@ -41,41 +41,41 @@
/* If someone has defined alloca as a macro, /* If someone has defined alloca as a macro,
there must be some other way alloca is supposed to work. */ there must be some other way alloca is supposed to work. */
#ifndef alloca # ifndef alloca
#ifdef emacs # ifdef emacs
#ifdef static # ifdef static
/* actually, only want this if static is defined as "" /* actually, only want this if static is defined as ""
-- this is for usg, in which emacs must undefine static -- this is for usg, in which emacs must undefine static
in order to make unexec workable in order to make unexec workable
*/ */
#ifndef STACK_DIRECTION # ifndef STACK_DIRECTION
you you
lose lose
-- must know STACK_DIRECTION at compile-time -- must know STACK_DIRECTION at compile-time
#endif /* STACK_DIRECTION undefined */ # endif /* STACK_DIRECTION undefined */
#endif /* static */ # endif /* static */
#endif /* emacs */ # endif /* emacs */
/* If your stack is a linked list of frames, you have to /* If your stack is a linked list of frames, you have to
provide an "address metric" ADDRESS_FUNCTION macro. */ provide an "address metric" ADDRESS_FUNCTION macro. */
#if defined (CRAY) && defined (CRAY_STACKSEG_END) # if defined (CRAY) && defined (CRAY_STACKSEG_END)
long i00afunc (); long i00afunc ();
#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) # define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
#else # else
#define ADDRESS_FUNCTION(arg) &(arg) # define ADDRESS_FUNCTION(arg) &(arg)
#endif # endif
#if __STDC__ # if __STDC__
typedef void *pointer; typedef void *pointer;
#else # else
typedef char *pointer; typedef char *pointer;
#endif # endif
#ifndef NULL # ifndef NULL
#define NULL 0 # define NULL 0
#endif # endif
/* Different portions of Emacs need to call different versions of /* Different portions of Emacs need to call different versions of
malloc. The Emacs executable needs alloca to call xmalloc, because malloc. The Emacs executable needs alloca to call xmalloc, because
@@ -83,13 +83,14 @@ typedef char *pointer;
hand, the utilities in lib-src need alloca to call malloc; some of hand, the utilities in lib-src need alloca to call malloc; some of
them are very simple, and don't have an xmalloc routine. them are very simple, and don't have an xmalloc routine.
Non-Emacs programs expect this to call use xmalloc. Non-Emacs programs expect this to call xmalloc.
Callers below should use malloc. */ Callers below should use malloc. */
#ifndef emacs # ifndef emacs
#define malloc xmalloc # undef malloc
#endif # define malloc xmalloc
# endif
extern pointer malloc (); extern pointer malloc ();
/* Define STACK_DIRECTION if you know the direction of stack /* Define STACK_DIRECTION if you know the direction of stack
@@ -100,18 +101,18 @@ extern pointer malloc ();
STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */ STACK_DIRECTION = 0 => direction of growth unknown */
#ifndef STACK_DIRECTION # ifndef STACK_DIRECTION
#define STACK_DIRECTION 0 /* Direction unknown. */ # define STACK_DIRECTION 0 /* Direction unknown. */
#endif # endif
#if STACK_DIRECTION != 0 # if STACK_DIRECTION != 0
#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ # define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
#else /* STACK_DIRECTION == 0; need run-time code. */ # else /* STACK_DIRECTION == 0; need run-time code. */
static int stack_dir; /* 1 or -1 once known. */ static int stack_dir; /* 1 or -1 once known. */
#define STACK_DIR stack_dir # define STACK_DIR stack_dir
static void static void
find_stack_direction () find_stack_direction ()
@@ -135,7 +136,7 @@ find_stack_direction ()
} }
} }
#endif /* STACK_DIRECTION == 0 */ # endif /* STACK_DIRECTION == 0 */
/* An "alloca header" is used to: /* An "alloca header" is used to:
(a) chain together all alloca'ed blocks; (a) chain together all alloca'ed blocks;
@@ -144,9 +145,9 @@ find_stack_direction ()
It is very important that sizeof(header) agree with malloc It is very important that sizeof(header) agree with malloc
alignment chunk size. The following default should work okay. */ alignment chunk size. The following default should work okay. */
#ifndef ALIGN_SIZE # ifndef ALIGN_SIZE
#define ALIGN_SIZE sizeof(double) # define ALIGN_SIZE sizeof(double)
#endif # endif
typedef union hdr typedef union hdr
{ {
@@ -168,16 +169,15 @@ static header *last_alloca_header = NULL; /* -> last alloca header. */
implementations of C, for example under Gould's UTX/32. */ implementations of C, for example under Gould's UTX/32. */
pointer pointer
alloca (size) alloca (size_t size)
unsigned size;
{ {
auto char probe; /* Probes stack depth: */ auto char probe; /* Probes stack depth: */
register char *depth = ADDRESS_FUNCTION (probe); register char *depth = ADDRESS_FUNCTION (probe);
#if STACK_DIRECTION == 0 # if STACK_DIRECTION == 0
if (STACK_DIR == 0) /* Unknown growth direction. */ if (STACK_DIR == 0) /* Unknown growth direction. */
find_stack_direction (); find_stack_direction ();
#endif # endif
/* Reclaim garbage, defined as all alloca'd storage that /* Reclaim garbage, defined as all alloca'd storage that
was allocated from deeper in the stack than currently. */ was allocated from deeper in the stack than currently. */
@@ -185,9 +185,9 @@ alloca (size)
{ {
register header *hp; /* Traverses linked list. */ register header *hp; /* Traverses linked list. */
#ifdef emacs # ifdef emacs
BLOCK_INPUT; BLOCK_INPUT;
#endif # endif
for (hp = last_alloca_header; hp != NULL;) for (hp = last_alloca_header; hp != NULL;)
if ((STACK_DIR > 0 && hp->h.deep > depth) if ((STACK_DIR > 0 && hp->h.deep > depth)
@@ -204,9 +204,9 @@ alloca (size)
last_alloca_header = hp; /* -> last valid storage. */ last_alloca_header = hp; /* -> last valid storage. */
#ifdef emacs # ifdef emacs
UNBLOCK_INPUT; UNBLOCK_INPUT;
#endif # endif
} }
if (size == 0) if (size == 0)
@@ -232,15 +232,15 @@ alloca (size)
} }
} }
#if defined (CRAY) && defined (CRAY_STACKSEG_END) # if defined (CRAY) && defined (CRAY_STACKSEG_END)
#ifdef DEBUG_I00AFUNC # ifdef DEBUG_I00AFUNC
#include <stdio.h> # include <stdio.h>
#endif # endif
#ifndef CRAY_STACK # ifndef CRAY_STACK
#define CRAY_STACK # define CRAY_STACK
#ifndef CRAY2 # ifndef CRAY2
/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ /* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
struct stack_control_header struct stack_control_header
{ {
@@ -292,7 +292,7 @@ struct stack_segment_linkage
long sss7; long sss7;
}; };
#else /* CRAY2 */ # else /* CRAY2 */
/* The following structure defines the vector of words /* The following structure defines the vector of words
returned by the STKSTAT library routine. */ returned by the STKSTAT library routine. */
struct stk_stat struct stk_stat
@@ -345,10 +345,10 @@ struct stk_trailer
long unknown14; long unknown14;
}; };
#endif /* CRAY2 */ # endif /* CRAY2 */
#endif /* not CRAY_STACK */ # endif /* not CRAY_STACK */
#ifdef CRAY2 # ifdef CRAY2
/* Determine a "stack measure" for an arbitrary ADDRESS. /* Determine a "stack measure" for an arbitrary ADDRESS.
I doubt that "lint" will like this much. */ I doubt that "lint" will like this much. */
@@ -419,7 +419,7 @@ i00afunc (long *address)
return (result); return (result);
} }
#else /* not CRAY2 */ # else /* not CRAY2 */
/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. /* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
Determine the number of the cell within the stack, Determine the number of the cell within the stack,
given the address of the cell. The purpose of this given the address of the cell. The purpose of this
@@ -464,9 +464,9 @@ i00afunc (long address)
while (!(this_segment <= address && address <= stkl)) while (!(this_segment <= address && address <= stkl))
{ {
#ifdef DEBUG_I00AFUNC # ifdef DEBUG_I00AFUNC
fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
#endif # endif
if (pseg == 0) if (pseg == 0)
break; break;
stkl = stkl - pseg; stkl = stkl - pseg;
@@ -485,9 +485,9 @@ i00afunc (long address)
while (pseg != 0) while (pseg != 0)
{ {
#ifdef DEBUG_I00AFUNC # ifdef DEBUG_I00AFUNC
fprintf (stderr, "%011o %011o\n", pseg, size); fprintf (stderr, "%011o %011o\n", pseg, size);
#endif # endif
stkl = stkl - pseg; stkl = stkl - pseg;
ssptr = (struct stack_segment_linkage *) stkl; ssptr = (struct stack_segment_linkage *) stkl;
size = ssptr->sssize; size = ssptr->sssize;
@@ -497,8 +497,8 @@ i00afunc (long address)
return (result); return (result);
} }
#endif /* not CRAY2 */ # endif /* not CRAY2 */
#endif /* CRAY */ # endif /* CRAY */
#endif /* no alloca */ # endif /* no alloca */
#endif /* not GCC version 2 */ #endif /* not GCC version 2 */
+71
View File
@@ -0,0 +1,71 @@
/* basename.c -- return the last element in a path
Copyright (C) 1990, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program 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 this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdio.h>
#include <assert.h>
#ifndef FILESYSTEM_PREFIX_LEN
# define FILESYSTEM_PREFIX_LEN(Filename) 0
#endif
#ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
#endif
#ifndef ISSLASH
# define ISSLASH(C) ((C) == '/')
#endif
char *base_name PARAMS ((char const *name));
/* In general, we can't use the builtin `basename' function if available,
since it has different meanings in different environments.
In some environments the builtin `basename' modifies its argument.
If NAME is all slashes, be sure to return `/'. */
char *
base_name (char const *name)
{
char const *base = name += FILESYSTEM_PREFIX_LEN (name);
int all_slashes = 1;
char const *p;
for (p = name; *p; p++)
{
if (ISSLASH (*p))
base = p + 1;
else
all_slashes = 0;
}
/* If NAME is all slashes, arrange to return `/'. */
if (*base == '\0' && ISSLASH (*name) && all_slashes)
--base;
/* Make sure the last byte is not a slash. */
assert (all_slashes || !ISSLASH (*(p - 1)));
return (char *) base;
}
+189
View File
@@ -0,0 +1,189 @@
/* dirname.c -- return all but the last element in a path
Copyright (C) 1990, 1998, 2000 Free Software Foundation, Inc.
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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program 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 this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#ifdef STDC_HEADERS
# include <stdlib.h>
#else
char *malloc ();
#endif
#if defined STDC_HEADERS || defined HAVE_STRING_H
# include <string.h>
#else
# include <strings.h>
# ifndef strrchr
# define strrchr rindex
# endif
#endif
#include <assert.h>
#ifndef HAVE_DECL_MEMRCHR
"this configure-time declaration test was not run"
#endif
#if !HAVE_DECL_MEMRCHR
void *memrchr ();
#endif
#include "dirname.h"
#ifndef FILESYSTEM_PREFIX_LEN
# define FILESYSTEM_PREFIX_LEN(Filename) 0
#endif
#ifndef ISSLASH
# define ISSLASH(C) ((C) == '/')
#endif
#define BACKSLASH_IS_PATH_SEPARATOR ISSLASH ('\\')
/* Return the length of `dirname (PATH)' and set *RESULT to point
to PATH or to `"."', as appropriate. Works properly even if
there are trailing slashes (by effectively ignoring them).
WARNING: This function doesn't work for cwd-relative names like
`a:foo' that are specified with a drive-letter prefix. That case
is handled in the caller. */
static size_t
dir_name_r (char const *path, char const **result)
{
char const *slash;
size_t length; /* Length of result, not including NUL. */
slash = strrchr (path, '/');
if (BACKSLASH_IS_PATH_SEPARATOR)
{
char const *b = strrchr (path, '\\');
if (b && slash < b)
slash = b;
}
/* If the last byte of PATH is a slash, decrement SLASH until it's
pointing at the leftmost in a sequence of trailing slashes. */
if (slash && slash[1] == 0)
{
while (path < slash && ISSLASH (slash[-1]))
{
--slash;
}
if (path < slash)
{
size_t len = slash - path;
slash = memrchr (path, '/', len);
if (BACKSLASH_IS_PATH_SEPARATOR)
{
char const *b = memrchr (path, '\\', len);
if (b && slash < b)
slash = b;
}
}
}
if (slash == 0)
{
/* File is in the current directory. */
length = FILESYSTEM_PREFIX_LEN (path);
if (length == 0)
{
path = ".";
length = 1;
}
}
else
{
/* Remove any trailing slashes from the result. If we have a
canonicalized "d:/path", leave alone the root case "d:/". */
char const *lim = path + FILESYSTEM_PREFIX_LEN (path);
while (lim < slash && ISSLASH (*slash))
--slash;
length = slash - path + 1;
}
*result = path;
return length;
}
/* Return the leading directories part of PATH,
allocated with malloc. If out of memory, return 0.
Works properly even if there are trailing slashes
(by effectively ignoring them). */
char *
dir_name (char const *path)
{
char const *result;
size_t length = dir_name_r (path, &result);
int append_dot = (length && length == FILESYSTEM_PREFIX_LEN (newpath));
char *newpath = (char *) malloc (length + append_dot + 1);
if (newpath == 0)
return 0;
strncpy (newpath, result, length);
/* If PATH is "d:foo", return "d:.", the CWD on drive d: */
if (append_dot)
newpath[length++] = '.';
newpath[length] = 0;
return newpath;
}
#ifdef TEST_DIRNAME
/*
Run the test like this (expect no output):
gcc -DHAVE_CONFIG_H -DTEST_DIRNAME -I.. -O -Wall memrchr.c dirname.c
sed -n '/^BEGIN-DATA$/,/^END-DATA$/p' dirname.c|grep -v DATA|./a.out
BEGIN-DATA
foo//// .
bar/foo//// bar
foo/ .
/ /
. .
a .
END-DATA
*/
# define MAX_BUFF_LEN 1024
# include <stdio.h>
# include <stdlib.h>
int
main ()
{
char buff[MAX_BUFF_LEN + 1];
buff[MAX_BUFF_LEN] = 0;
while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
{
char path[MAX_BUFF_LEN];
char expected_result[MAX_BUFF_LEN];
char const *result;
sscanf (buff, "%s %s", path, expected_result);
result = dir_name (path);
if (strcmp (result, expected_result))
printf ("%s: got %s, expected %s\n", path, result, expected_result);
}
exit (0);
}
#endif
+31
View File
@@ -0,0 +1,31 @@
/* Copyright (C) 1998 Free Software Foundation, Inc.
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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program 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 this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef DIRNAME_H_
# define DIRNAME_H_ 1
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
char *
dir_name PARAMS ((const char *path));
#endif /* not DIRNAME_H_ */
+198 -74
View File
@@ -1,23 +1,22 @@
/* Error handler for noninteractive utilities /* Error handler for noninteractive utilities
Copyright (C) 1990-1998, 2000 Free Software Foundation, Inc. Copyright (C) 1990-1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib. the C library, however. The master source lives in /gd/gnu/lib.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as modify it under the terms of the GNU Lesser General Public
published by the Free Software Foundation; either version 2 of the License as published by the Free Software Foundation; either
License, or (at your option) any later version. version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; see the file COPYING.LIB. If not, License along with the GNU C Library; if not, write to the Free
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
Boston, MA 02111-1307, USA. */ 02111-1307 USA. */
/* Written by David MacKenzie <[email protected]>. */ /* Written by David MacKenzie <[email protected]>. */
@@ -29,6 +28,10 @@
#if HAVE_LIBINTL_H #if HAVE_LIBINTL_H
# include <libintl.h> # include <libintl.h>
#endif #endif
#ifdef _LIBC
# include <wchar.h>
# define mbsrtowcs __mbsrtowcs
#endif
#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC #if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
# if __STDC__ # if __STDC__
@@ -52,13 +55,6 @@ void exit ();
#include "error.h" #include "error.h"
#ifndef HAVE_DECL_STRERROR_R
"this configure-time declaration test was not run"
#endif
#if !HAVE_DECL_STRERROR_R
char *strerror_r ();
#endif
#ifndef _ #ifndef _
# define _(String) String # define _(String) String
#endif #endif
@@ -83,6 +79,12 @@ unsigned int error_message_count;
/* In GNU libc we want do not want to use the common name `error' directly. /* In GNU libc we want do not want to use the common name `error' directly.
Instead make it a weak alias. */ Instead make it a weak alias. */
extern void __error (int status, int errnum, const char *message, ...)
__attribute__ ((__format__ (__printf__, 3, 4)));
extern void __error_at_line (int status, int errnum, const char *file_name,
unsigned int line_number, const char *message,
...)
__attribute__ ((__format__ (__printf__, 5, 6)));;
# define error __error # define error __error
# define error_at_line __error_at_line # define error_at_line __error_at_line
@@ -93,21 +95,30 @@ unsigned int error_message_count;
#else /* not _LIBC */ #else /* not _LIBC */
# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
# ifndef HAVE_DECL_STRERROR_R
"this configure-time declaration test was not run"
# endif
char *strerror_r ();
# endif
/* The calling program should define program_name and set it to the /* The calling program should define program_name and set it to the
name of the executing program. */ name of the executing program. */
extern char *program_name; extern char *program_name;
# ifdef HAVE_STRERROR_R # if HAVE_STRERROR_R || defined strerror_r
# define __strerror_r strerror_r # define __strerror_r strerror_r
# else # else
# if HAVE_STRERROR # if HAVE_STRERROR
# ifndef strerror /* On some systems, strerror is a macro */ # ifndef HAVE_DECL_STRERROR
"this configure-time declaration test was not run"
# endif
# if !HAVE_DECL_STRERROR
char *strerror (); char *strerror ();
# endif # endif
# else # else
static char * static char *
private_strerror (errnum) private_strerror (int errnum)
int errnum;
{ {
extern char *sys_errlist[]; extern char *sys_errlist[];
extern int sys_nerr; extern int sys_nerr;
@@ -118,15 +129,118 @@ private_strerror (errnum)
} }
# define strerror private_strerror # define strerror private_strerror
# endif /* HAVE_STRERROR */ # endif /* HAVE_STRERROR */
# endif /* HAVE_STRERROR_R */ # endif /* HAVE_STRERROR_R || defined strerror_r */
#endif /* not _LIBC */ #endif /* not _LIBC */
static void
print_errno_message (int errnum)
{
char const *s;
#if defined HAVE_STRERROR_R || _LIBC
char errbuf[1024];
# if STRERROR_R_CHAR_P || _LIBC
s = __strerror_r (errnum, errbuf, sizeof errbuf);
# else
if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
s = errbuf;
else
s = 0;
# endif
#else
s = strerror (errnum);
#endif
#if !_LIBC
if (! s)
s = _("Unknown system error");
#endif
#if _LIBC && USE_IN_LIBIO
if (_IO_fwide (stderr, 0) > 0)
{
__fwprintf (stderr, L": %s", s);
return;
}
#endif
fprintf (stderr, ": %s", s);
}
#ifdef VA_START
static void
error_tail (int status, int errnum, const char *message, va_list args)
{
# if HAVE_VPRINTF || _LIBC
# if _LIBC && USE_IN_LIBIO
if (_IO_fwide (stderr, 0) > 0)
{
# define ALLOCA_LIMIT 2000
size_t len = strlen (message) + 1;
wchar_t *wmessage = NULL;
mbstate_t st;
size_t res;
const char *tmp;
do
{
if (len < ALLOCA_LIMIT)
wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
else
{
if (wmessage != NULL && len / 2 < ALLOCA_LIMIT)
wmessage = NULL;
wmessage = (wchar_t *) realloc (wmessage,
len * sizeof (wchar_t));
if (wmessage == NULL)
{
fputws_unlocked (L"out of memory\n", stderr);
return;
}
}
memset (&st, '\0', sizeof (st));
tmp =message;
}
while ((res = mbsrtowcs (wmessage, &tmp, len, &st)) == len);
if (res == (size_t) -1)
/* The string cannot be converted. */
wmessage = (wchar_t *) L"???";
__vfwprintf (stderr, wmessage, args);
}
else
# endif
vfprintf (stderr, message, args);
# else
_doprnt (message, args, stderr);
# endif
va_end (args);
++error_message_count;
if (errnum)
print_errno_message (errnum);
# if _LIBC && USE_IN_LIBIO
if (_IO_fwide (stderr, 0) > 0)
putwc (L'\n', stderr);
else
# endif
putc ('\n', stderr);
fflush (stderr);
if (status)
exit (status);
}
#endif
/* Print the program name and error message MESSAGE, which is a printf-style /* Print the program name and error message MESSAGE, which is a printf-style
format string with optional args. format string with optional args.
If ERRNUM is nonzero, print its corresponding system error message. If ERRNUM is nonzero, print its corresponding system error message.
Exit with status STATUS if it is nonzero. */ Exit with status STATUS if it is nonzero. */
/* VARARGS */ /* VARARGS */
void void
#if defined VA_START && __STDC__ #if defined VA_START && __STDC__
error (int status, int errnum, const char *message, ...) error (int status, int errnum, const char *message, ...)
@@ -142,47 +256,48 @@ error (status, errnum, message, va_alist)
va_list args; va_list args;
#endif #endif
fflush (stdout);
#ifdef _LIBC
# ifdef USE_IN_LIBIO
_IO_flockfile (stderr);
# else
__flockfile (stderr);
# endif
#endif
if (error_print_progname) if (error_print_progname)
(*error_print_progname) (); (*error_print_progname) ();
else else
{ {
fflush (stdout); #if _LIBC && USE_IN_LIBIO
fprintf (stderr, "%s: ", program_name); if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s: ", program_name);
else
#endif
fprintf (stderr, "%s: ", program_name);
} }
#ifdef VA_START #ifdef VA_START
VA_START (args, message); VA_START (args, message);
# if HAVE_VPRINTF || _LIBC error_tail (status, errnum, message, args);
vfprintf (stderr, message, args);
# else
_doprnt (message, args, stderr);
# endif
va_end (args);
#else #else
fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8); fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
#endif
++error_message_count; ++error_message_count;
if (errnum) if (errnum)
{ print_errno_message (errnum);
#if defined HAVE_STRERROR_R || _LIBC
char errbuf[1024];
# if HAVE_WORKING_STRERROR_R || _LIBC
fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf));
# else
/* Don't use __strerror_r's return value because on some systems
(at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */
__strerror_r (errnum, errbuf, sizeof errbuf);
fprintf (stderr, ": %s", errbuf);
# endif
#else
fprintf (stderr, ": %s", strerror (errnum));
#endif
}
putc ('\n', stderr); putc ('\n', stderr);
fflush (stderr); fflush (stderr);
if (status) if (status)
exit (status); exit (status);
#endif
#ifdef _LIBC
# ifdef USE_IN_LIBIO
_IO_funlockfile (stderr);
# else
__funlockfile (stderr);
# endif
#endif
} }
/* Sometimes we want to have at most one error per line. This /* Sometimes we want to have at most one error per line. This
@@ -212,8 +327,9 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist)
static const char *old_file_name; static const char *old_file_name;
static unsigned int old_line_number; static unsigned int old_line_number;
if (old_line_number == line_number && if (old_line_number == line_number
(file_name == old_file_name || !strcmp (old_file_name, file_name))) && (file_name == old_file_name
|| strcmp (old_file_name, file_name) == 0))
/* Simply return and print nothing. */ /* Simply return and print nothing. */
return; return;
@@ -221,50 +337,58 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist)
old_line_number = line_number; old_line_number = line_number;
} }
fflush (stdout);
#ifdef _LIBC
# ifdef USE_IN_LIBIO
_IO_flockfile (stderr);
# else
__flockfile (stderr);
# endif
#endif
if (error_print_progname) if (error_print_progname)
(*error_print_progname) (); (*error_print_progname) ();
else else
{ {
fflush (stdout); #if _LIBC && USE_IN_LIBIO
fprintf (stderr, "%s:", program_name); if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s: ", program_name);
else
#endif
fprintf (stderr, "%s:", program_name);
} }
if (file_name != NULL) if (file_name != NULL)
fprintf (stderr, "%s:%d: ", file_name, line_number); {
#if _LIBC && USE_IN_LIBIO
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s:%d: ", file_name, line_number);
else
#endif
fprintf (stderr, "%s:%d: ", file_name, line_number);
}
#ifdef VA_START #ifdef VA_START
VA_START (args, message); VA_START (args, message);
# if HAVE_VPRINTF || _LIBC error_tail (status, errnum, message, args);
vfprintf (stderr, message, args);
# else
_doprnt (message, args, stderr);
# endif
va_end (args);
#else #else
fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8); fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
#endif
++error_message_count; ++error_message_count;
if (errnum) if (errnum)
{ print_errno_message (errnum);
#if defined HAVE_STRERROR_R || _LIBC
char errbuf[1024];
# if HAVE_WORKING_STRERROR_R || _LIBC
fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf));
# else
/* Don't use __strerror_r's return value because on some systems
(at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */
__strerror_r (errnum, errbuf, sizeof errbuf);
fprintf (stderr, ": %s", errbuf);
# endif
#else
fprintf (stderr, ": %s", strerror (errnum));
#endif
}
putc ('\n', stderr); putc ('\n', stderr);
fflush (stderr); fflush (stderr);
if (status) if (status)
exit (status); exit (status);
#endif
#ifdef _LIBC
# ifdef USE_IN_LIBIO
_IO_funlockfile (stderr);
# else
__funlockfile (stderr);
# endif
#endif
} }
#ifdef _LIBC #ifdef _LIBC
+1 -1
View File
@@ -25,7 +25,7 @@
#ifndef __attribute__ #ifndef __attribute__
/* This feature is available in gcc versions 2.5 and later. */ /* This feature is available in gcc versions 2.5 and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
# define __attribute__(Spec) /* empty */ # define __attribute__(Spec) /* empty */
# endif # endif
/* The __-protected variants of `format' and `printf' attributes /* The __-protected variants of `format' and `printf' attributes
+59 -40
View File
@@ -1,23 +1,25 @@
/* Getopt for GNU. /* Getopt for GNU.
NOTE: The canonical source of this file is maintained with the GNU NOTE: getopt is now part of the C library, so if you don't know what
C Library. Bugs can be reported to bug-glibc@gnu.org. "Keep this file name-space clean" means, talk to drepper@gnu.org
before changing it!
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software; you can redistribute it and/or modify it The GNU C Library is free software; you can redistribute it and/or
under the terms of the GNU General Public License as published by the modify it under the terms of the GNU Lesser General Public
Free Software Foundation; either version 2, or (at your option) any License as published by the Free Software Foundation; either
later version. version 2.1 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
GNU General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU Lesser General Public
along with this program; if not, write to the Free Software Foundation, License along with the GNU C Library; if not, write to the Free
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. /* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
Ditto for AIX 3.2 and <stdlib.h>. */ Ditto for AIX 3.2 and <stdlib.h>. */
@@ -27,13 +29,13 @@
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
# include <config.h> # include <config.h>
#else #endif
# if !defined __STDC__ || !__STDC__
#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems /* This is a separate conditional since some stdc systems
reject `defined (const)'. */ reject `defined (const)'. */
# ifndef const # ifndef const
# define const # define const
# endif
# endif # endif
#endif #endif
@@ -75,11 +77,12 @@
#endif #endif
#ifndef _ #ifndef _
/* This is for other GNU distributions with internationalized messages. /* This is for other GNU distributions with internationalized messages. */
When compiling libc, the _ macro is predefined. */ # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
# ifdef HAVE_LIBINTL_H
# include <libintl.h> # include <libintl.h>
# define _(msgid) gettext (msgid) # ifndef _
# define _(msgid) gettext (msgid)
# endif
# else # else
# define _(msgid) (msgid) # define _(msgid) (msgid)
# endif # endif
@@ -250,11 +253,13 @@ static int last_nonopt;
/* Bash 2.0 gives us an environment variable containing flags /* Bash 2.0 gives us an environment variable containing flags
indicating ARGV elements that should not be considered arguments. */ indicating ARGV elements that should not be considered arguments. */
#ifdef USE_NONOPTION_FLAGS
/* Defined in getopt_init.c */ /* Defined in getopt_init.c */
extern char *__getopt_nonoption_flags; extern char *__getopt_nonoption_flags;
static int nonoption_flags_max_len; static int nonoption_flags_max_len;
static int nonoption_flags_len; static int nonoption_flags_len;
#endif
static int original_argc; static int original_argc;
static char *const *original_argv; static char *const *original_argv;
@@ -275,13 +280,17 @@ store_args_and_env (int argc, char *const *argv)
text_set_element (__libc_subinit, store_args_and_env); text_set_element (__libc_subinit, store_args_and_env);
# endif /* text_set_element */ # endif /* text_set_element */
# define SWAP_FLAGS(ch1, ch2) \ # ifdef USE_NONOPTION_FLAGS
# define SWAP_FLAGS(ch1, ch2) \
if (nonoption_flags_len > 0) \ if (nonoption_flags_len > 0) \
{ \ { \
char __tmp = __getopt_nonoption_flags[ch1]; \ char __tmp = __getopt_nonoption_flags[ch1]; \
__getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \
__getopt_nonoption_flags[ch2] = __tmp; \ __getopt_nonoption_flags[ch2] = __tmp; \
} }
# else
# define SWAP_FLAGS(ch1, ch2)
# endif
#else /* !_LIBC */ #else /* !_LIBC */
# define SWAP_FLAGS(ch1, ch2) # define SWAP_FLAGS(ch1, ch2)
#endif /* _LIBC */ #endif /* _LIBC */
@@ -313,7 +322,7 @@ exchange (argv)
It leaves the longer segment in the right place overall, It leaves the longer segment in the right place overall,
but it consists of two parts that need to be swapped next. */ but it consists of two parts that need to be swapped next. */
#ifdef _LIBC #if defined _LIBC && defined USE_NONOPTION_FLAGS
/* First make sure the handling of the `__getopt_nonoption_flags' /* First make sure the handling of the `__getopt_nonoption_flags'
string can work normally. Our top argument must be in the range string can work normally. Our top argument must be in the range
of the string. */ of the string. */
@@ -417,7 +426,7 @@ _getopt_initialize (argc, argv, optstring)
else else
ordering = PERMUTE; ordering = PERMUTE;
#ifdef _LIBC #if defined _LIBC && defined USE_NONOPTION_FLAGS
if (posixly_correct == NULL if (posixly_correct == NULL
&& argc == original_argc && argv == original_argv) && argc == original_argc && argv == original_argv)
{ {
@@ -515,6 +524,13 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
int *longind; int *longind;
int long_only; int long_only;
{ {
int print_errors = opterr;
if (optstring[0] == ':')
print_errors = 0;
if (argc < 1)
return -1;
optarg = NULL; optarg = NULL;
if (optind == 0 || !__getopt_initialized) if (optind == 0 || !__getopt_initialized)
@@ -529,7 +545,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
Either it does not have option syntax, or there is an environment flag Either it does not have option syntax, or there is an environment flag
from the shell indicating it is not an option. The later information from the shell indicating it is not an option. The later information
is only used when the used in the GNU libc. */ is only used when the used in the GNU libc. */
#ifdef _LIBC #if defined _LIBC && defined USE_NONOPTION_FLAGS
# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|| (optind < nonoption_flags_len \ || (optind < nonoption_flags_len \
&& __getopt_nonoption_flags[optind] == '1')) && __getopt_nonoption_flags[optind] == '1'))
@@ -664,14 +680,17 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
pfound = p; pfound = p;
indfound = option_index; indfound = option_index;
} }
else else if (long_only
|| pfound->has_arg != p->has_arg
|| pfound->flag != p->flag
|| pfound->val != p->val)
/* Second or later nonexact match found. */ /* Second or later nonexact match found. */
ambig = 1; ambig = 1;
} }
if (ambig && !exact) if (ambig && !exact)
{ {
if (opterr) if (print_errors)
fprintf (stderr, _("%s: option `%s' is ambiguous\n"), fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
argv[0], argv[optind]); argv[0], argv[optind]);
nextchar += strlen (nextchar); nextchar += strlen (nextchar);
@@ -692,7 +711,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
optarg = nameend + 1; optarg = nameend + 1;
else else
{ {
if (opterr) if (print_errors)
{ {
if (argv[optind - 1][1] == '-') if (argv[optind - 1][1] == '-')
/* --option */ /* --option */
@@ -718,7 +737,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
optarg = argv[optind++]; optarg = argv[optind++];
else else
{ {
if (opterr) if (print_errors)
fprintf (stderr, fprintf (stderr,
_("%s: option `%s' requires an argument\n"), _("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]); argv[0], argv[optind - 1]);
@@ -745,7 +764,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (!long_only || argv[optind][1] == '-' if (!long_only || argv[optind][1] == '-'
|| my_index (optstring, *nextchar) == NULL) || my_index (optstring, *nextchar) == NULL)
{ {
if (opterr) if (print_errors)
{ {
if (argv[optind][1] == '-') if (argv[optind][1] == '-')
/* --option */ /* --option */
@@ -775,7 +794,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (temp == NULL || c == ':') if (temp == NULL || c == ':')
{ {
if (opterr) if (print_errors)
{ {
if (posixly_correct) if (posixly_correct)
/* 1003.2 specifies the format of this message. */ /* 1003.2 specifies the format of this message. */
@@ -809,7 +828,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
} }
else if (optind == argc) else if (optind == argc)
{ {
if (opterr) if (print_errors)
{ {
/* 1003.2 specifies the format of this message. */ /* 1003.2 specifies the format of this message. */
fprintf (stderr, _("%s: option requires an argument -- %c\n"), fprintf (stderr, _("%s: option requires an argument -- %c\n"),
@@ -858,7 +877,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
} }
if (ambig && !exact) if (ambig && !exact)
{ {
if (opterr) if (print_errors)
fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
argv[0], argv[optind]); argv[0], argv[optind]);
nextchar += strlen (nextchar); nextchar += strlen (nextchar);
@@ -876,7 +895,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
optarg = nameend + 1; optarg = nameend + 1;
else else
{ {
if (opterr) if (print_errors)
fprintf (stderr, _("\ fprintf (stderr, _("\
%s: option `-W %s' doesn't allow an argument\n"), %s: option `-W %s' doesn't allow an argument\n"),
argv[0], pfound->name); argv[0], pfound->name);
@@ -891,7 +910,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
optarg = argv[optind++]; optarg = argv[optind++];
else else
{ {
if (opterr) if (print_errors)
fprintf (stderr, fprintf (stderr,
_("%s: option `%s' requires an argument\n"), _("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]); argv[0], argv[optind - 1]);
@@ -938,12 +957,12 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
} }
else if (optind == argc) else if (optind == argc)
{ {
if (opterr) if (print_errors)
{ {
/* 1003.2 specifies the format of this message. */ /* 1003.2 specifies the format of this message. */
fprintf (stderr, fprintf (stderr,
_("%s: option requires an argument -- %c\n"), _("%s: option requires an argument -- %c\n"),
argv[0], c); argv[0], c);
} }
optopt = c; optopt = c;
if (optstring[0] == ':') if (optstring[0] == ':')
+27 -16
View File
@@ -1,21 +1,21 @@
/* Declarations for getopt. /* Declarations for getopt.
Copyright (C) 1989,90,91,92,93,94,96,97,98 Free Software Foundation, Inc. Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library. This file is part of the GNU C Library.
Bugs can be reported to [email protected].
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 the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful, The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
GNU General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU Lesser General Public
along with this program; if not, write to the Free Software License along with the GNU C Library; if not, write to the Free
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
USA. */ 02111-1307 USA. */
#ifndef _GETOPT_H #ifndef _GETOPT_H
@@ -23,6 +23,17 @@
# define _GETOPT_H 1 # define _GETOPT_H 1
#endif #endif
/* If __GNU_LIBRARY__ is not already defined, either we are being used
standalone, or this is the first header included in the source file.
If we are being used with glibc, we need to include <features.h>, but
that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
not defined, include <ctype.h>, which will pull in <features.h> for us
if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
doesn't flood the namespace with stuff the way some other headers do.) */
#if !defined __GNU_LIBRARY__
# include <ctype.h>
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@@ -82,7 +93,7 @@ extern int optopt;
struct option struct option
{ {
# if defined __STDC__ && __STDC__ # if (defined __STDC__ && __STDC__) || defined __cplusplus
const char *name; const char *name;
# else # else
char *name; char *name;
@@ -126,7 +137,7 @@ struct option
arguments to the option '\0'. This behavior is specific to the GNU arguments to the option '\0'. This behavior is specific to the GNU
`getopt'. */ `getopt'. */
#if defined __STDC__ && __STDC__ #if (defined __STDC__ && __STDC__) || defined __cplusplus
# ifdef __GNU_LIBRARY__ # ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with /* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation differences in the consts, in stdlib.h. To avoid compilation
+16 -16
View File
@@ -1,26 +1,29 @@
/* getopt_long and getopt_long_only entry points for GNU getopt. /* getopt_long and getopt_long_only entry points for GNU getopt.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98 Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
Free Software Foundation, Inc. Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library. This file is part of the GNU C Library.
Bugs can be reported to [email protected].
This program is free software; you can redistribute it and/or modify it The GNU C Library is free software; you can redistribute it and/or
under the terms of the GNU General Public License as published by the modify it under the terms of the GNU Lesser General Public
Free Software Foundation; either version 2, or (at your option) any License as published by the Free Software Foundation; either
later version. version 2.1 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
GNU General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU Lesser General Public
along with this program; if not, write to the Free Software Foundation, License along with the GNU C Library; if not, write to the Free
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#else #endif
#include "getopt.h"
#if !defined __STDC__ || !__STDC__ #if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems /* This is a separate conditional since some stdc systems
reject `defined (const)'. */ reject `defined (const)'. */
@@ -28,9 +31,6 @@
#define const #define const
#endif #endif
#endif #endif
#endif
#include "getopt.h"
#include <stdio.h> #include <stdio.h>
+209
View File
@@ -0,0 +1,209 @@
/* memrchr -- find the last occurrence of a byte in a memory block
Copyright (C) 1991, 93, 96, 97, 99, 2000 Free Software Foundation, Inc.
Based on strlen implementation by Torbjorn Granlund ([email protected]),
with help from Dan Sahlin ([email protected]) and
commentary by Jim Blandy ([email protected]);
adaptation to memchr suggested by Dick Karpinski ([email protected]),
and implemented by Roland McGrath ([email protected]).
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdlib.h>
#undef __ptr_t
#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
# define __ptr_t void *
#else /* Not C++ or ANSI C. */
# define __ptr_t char *
#endif /* C++ or ANSI C. */
#if defined (_LIBC)
# include <string.h>
# include <memcopy.h>
#else
# define reg_char char
#endif
#if defined (HAVE_LIMITS_H) || defined (_LIBC)
# include <limits.h>
#endif
#define LONG_MAX_32_BITS 2147483647
#ifndef LONG_MAX
# define LONG_MAX LONG_MAX_32_BITS
#endif
#include <sys/types.h>
#undef __memrchr
#undef memrchr
#ifndef weak_alias
# define __memrchr memrchr
#endif
/* Search no more than N bytes of S for C. */
__ptr_t
__memrchr (s, c_in, n)
const __ptr_t s;
int c_in;
size_t n;
{
const unsigned char *char_ptr;
const unsigned long int *longword_ptr;
unsigned long int longword, magic_bits, charmask;
unsigned reg_char c;
c = (unsigned char) c_in;
/* Handle the last few characters by reading one character at a time.
Do this until CHAR_PTR is aligned on a longword boundary. */
for (char_ptr = (const unsigned char *) s + n;
n > 0 && ((unsigned long int) char_ptr
& (sizeof (longword) - 1)) != 0;
--n)
if (*--char_ptr == c)
return (__ptr_t) char_ptr;
/* All these elucidatory comments refer to 4-byte longwords,
but the theory applies equally well to 8-byte longwords. */
longword_ptr = (unsigned long int *) char_ptr;
/* Bits 31, 24, 16, and 8 of this number are zero. Call these bits
the "holes." Note that there is a hole just to the left of
each byte, with an extra at the end:
bits: 01111110 11111110 11111110 11111111
bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
The 1-bits make sure that carries propagate to the next 0-bit.
The 0-bits provide holes for carries to fall into. */
if (sizeof (longword) != 4 && sizeof (longword) != 8)
abort ();
#if LONG_MAX <= LONG_MAX_32_BITS
magic_bits = 0x7efefeff;
#else
magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
#endif
/* Set up a longword, each of whose bytes is C. */
charmask = c | (c << 8);
charmask |= charmask << 16;
#if LONG_MAX > LONG_MAX_32_BITS
charmask |= charmask << 32;
#endif
/* Instead of the traditional loop which tests each character,
we will test a longword at a time. The tricky part is testing
if *any of the four* bytes in the longword in question are zero. */
while (n >= sizeof (longword))
{
/* We tentatively exit the loop if adding MAGIC_BITS to
LONGWORD fails to change any of the hole bits of LONGWORD.
1) Is this safe? Will it catch all the zero bytes?
Suppose there is a byte with all zeros. Any carry bits
propagating from its left will fall into the hole at its
least significant bit and stop. Since there will be no
carry from its most significant bit, the LSB of the
byte to the left will be unchanged, and the zero will be
detected.
2) Is this worthwhile? Will it ignore everything except
zero bytes? Suppose every byte of LONGWORD has a bit set
somewhere. There will be a carry into bit 8. If bit 8
is set, this will carry into bit 16. If bit 8 is clear,
one of bits 9-15 must be set, so there will be a carry
into bit 16. Similarly, there will be a carry into bit
24. If one of bits 24-30 is set, there will be a carry
into bit 31, so all of the hole bits will be changed.
The one misfire occurs when bits 24-30 are clear and bit
31 is set; in this case, the hole at bit 31 is not
changed. If we had access to the processor carry flag,
we could close this loophole by putting the fourth hole
at bit 32!
So it ignores everything except 128's, when they're aligned
properly.
3) But wait! Aren't we looking for C, not zero?
Good point. So what we do is XOR LONGWORD with a longword,
each of whose bytes is C. This turns each byte that is C
into a zero. */
longword = *--longword_ptr ^ charmask;
/* Add MAGIC_BITS to LONGWORD. */
if ((((longword + magic_bits)
/* Set those bits that were unchanged by the addition. */
^ ~longword)
/* Look at only the hole bits. If any of the hole bits
are unchanged, most likely one of the bytes was a
zero. */
& ~magic_bits) != 0)
{
/* Which of the bytes was C? If none of them were, it was
a misfire; continue the search. */
const unsigned char *cp = (const unsigned char *) longword_ptr;
#if LONG_MAX > 2147483647
if (cp[7] == c)
return (__ptr_t) &cp[7];
if (cp[6] == c)
return (__ptr_t) &cp[6];
if (cp[5] == c)
return (__ptr_t) &cp[5];
if (cp[4] == c)
return (__ptr_t) &cp[4];
#endif
if (cp[3] == c)
return (__ptr_t) &cp[3];
if (cp[2] == c)
return (__ptr_t) &cp[2];
if (cp[1] == c)
return (__ptr_t) &cp[1];
if (cp[0] == c)
return (__ptr_t) cp;
}
n -= sizeof (longword);
}
char_ptr = (const unsigned char *) longword_ptr;
while (n-- > 0)
{
if (*--char_ptr == c)
return (__ptr_t) char_ptr;
}
return 0;
}
#ifdef weak_alias
weak_alias (__memrchr, memrchr)
#endif
+94 -75
View File
@@ -1,26 +1,25 @@
/* obstack.c - subroutines used implicitly by object stack macros /* obstack.c - subroutines used implicitly by object stack macros
Copyright (C) 1988-1994,96,97,98,99,2000 Free Software Foundation, Inc. Copyright (C) 1988-1994,96,97,98,99,2000,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib. the C library, however. The master source lives in /gd/gnu/lib.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as modify it under the terms of the GNU Lesser General Public
published by the Free Software Foundation; either version 2 of the License as published by the Free Software Foundation; either
License, or (at your option) any later version. version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; see the file COPYING.LIB. If not, License along with the GNU C Library; if not, write to the Free
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
Boston, MA 02111-1307, USA. */ 02111-1307 USA. */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> # include <config.h>
#endif #endif
#include "obstack.h" #include "obstack.h"
@@ -40,40 +39,43 @@
files, it is simpler to just do this in the source for each such file. */ files, it is simpler to just do this in the source for each such file. */
#include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */ #include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */
#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1 #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
#include <gnu-versions.h> # include <gnu-versions.h>
#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION # if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
#define ELIDE_CODE # define ELIDE_CODE
#endif # endif
#endif #endif
#if defined _LIBC && defined USE_IN_LIBIO
# include <wchar.h>
#endif
#ifndef ELIDE_CODE #ifndef ELIDE_CODE
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
#define POINTER void * # define POINTER void *
#else # else
#define POINTER char * # define POINTER char *
#endif # endif
/* Determine default alignment. */ /* Determine default alignment. */
struct fooalign {char x; double d;}; struct fooalign {char x; double d;};
#define DEFAULT_ALIGNMENT \ # define DEFAULT_ALIGNMENT \
((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0)) ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. /* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
But in fact it might be less smart and round addresses to as much as But in fact it might be less smart and round addresses to as much as
DEFAULT_ROUNDING. So we prepare for it to do that. */ DEFAULT_ROUNDING. So we prepare for it to do that. */
union fooround {long x; double d;}; union fooround {long x; double d;};
#define DEFAULT_ROUNDING (sizeof (union fooround)) # define DEFAULT_ROUNDING (sizeof (union fooround))
/* When we copy a long block of data, this is the unit to do it with. /* When we copy a long block of data, this is the unit to do it with.
On some machines, copying successive ints does not work; On some machines, copying successive ints does not work;
in such a case, redefine COPYING_UNIT to `long' (if that works) in such a case, redefine COPYING_UNIT to `long' (if that works)
or `char' as a last resort. */ or `char' as a last resort. */
#ifndef COPYING_UNIT # ifndef COPYING_UNIT
#define COPYING_UNIT int # define COPYING_UNIT int
#endif # endif
/* The functions allocating more room by calling `obstack_chunk_alloc' /* The functions allocating more room by calling `obstack_chunk_alloc'
@@ -82,21 +84,21 @@ union fooround {long x; double d;};
abort gracefully or use longjump - but shouldn't return. This abort gracefully or use longjump - but shouldn't return. This
variable by default points to the internal function variable by default points to the internal function
`print_and_abort'. */ `print_and_abort'. */
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
static void print_and_abort (void); static void print_and_abort (void);
void (*obstack_alloc_failed_handler) (void) = print_and_abort; void (*obstack_alloc_failed_handler) (void) = print_and_abort;
#else # else
static void print_and_abort (); static void print_and_abort ();
void (*obstack_alloc_failed_handler) () = print_and_abort; void (*obstack_alloc_failed_handler) () = print_and_abort;
#endif # endif
/* Exit value used when `print_and_abort' is used. */ /* Exit value used when `print_and_abort' is used. */
#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H # if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
#include <stdlib.h> # include <stdlib.h>
#endif # endif
#ifndef EXIT_FAILURE # ifndef EXIT_FAILURE
#define EXIT_FAILURE 1 # define EXIT_FAILURE 1
#endif # endif
int obstack_exit_failure = EXIT_FAILURE; int obstack_exit_failure = EXIT_FAILURE;
/* The non-GNU-C macros copy the obstack into this global variable /* The non-GNU-C macros copy the obstack into this global variable
@@ -110,33 +112,33 @@ struct obstack *_obstack;
For free, do not use ?:, since some compilers, like the MIPS compilers, For free, do not use ?:, since some compilers, like the MIPS compilers,
do not allow (expr) ? void : void. */ do not allow (expr) ? void : void. */
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
#define CALL_CHUNKFUN(h, size) \ # define CALL_CHUNKFUN(h, size) \
(((h) -> use_extra_arg) \ (((h) -> use_extra_arg) \
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
: (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
#define CALL_FREEFUN(h, old_chunk) \ # define CALL_FREEFUN(h, old_chunk) \
do { \ do { \
if ((h) -> use_extra_arg) \ if ((h) -> use_extra_arg) \
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
else \ else \
(*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
} while (0) } while (0)
#else # else
#define CALL_CHUNKFUN(h, size) \ # define CALL_CHUNKFUN(h, size) \
(((h) -> use_extra_arg) \ (((h) -> use_extra_arg) \
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
: (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size))) : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
#define CALL_FREEFUN(h, old_chunk) \ # define CALL_FREEFUN(h, old_chunk) \
do { \ do { \
if ((h) -> use_extra_arg) \ if ((h) -> use_extra_arg) \
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
else \ else \
(*(void (*) ()) (h)->freefun) ((old_chunk)); \ (*(void (*) ()) (h)->freefun) ((old_chunk)); \
} while (0) } while (0)
#endif # endif
/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). /* Initialize an obstack H for use. Specify chunk size SIZE (0 means default).
@@ -152,13 +154,13 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
struct obstack *h; struct obstack *h;
int size; int size;
int alignment; int alignment;
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
POINTER (*chunkfun) (long); POINTER (*chunkfun) (long);
void (*freefun) (void *); void (*freefun) (void *);
#else # else
POINTER (*chunkfun) (); POINTER (*chunkfun) ();
void (*freefun) (); void (*freefun) ();
#endif # endif
{ {
register struct _obstack_chunk *chunk; /* points to new chunk */ register struct _obstack_chunk *chunk; /* points to new chunk */
@@ -181,13 +183,13 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
size = 4096 - extra; size = 4096 - extra;
} }
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
#else # else
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
h->freefun = freefun; h->freefun = freefun;
#endif # endif
h->chunk_size = size; h->chunk_size = size;
h->alignment_mask = alignment - 1; h->alignment_mask = alignment - 1;
h->use_extra_arg = 0; h->use_extra_arg = 0;
@@ -210,13 +212,13 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
struct obstack *h; struct obstack *h;
int size; int size;
int alignment; int alignment;
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
POINTER (*chunkfun) (POINTER, long); POINTER (*chunkfun) (POINTER, long);
void (*freefun) (POINTER, POINTER); void (*freefun) (POINTER, POINTER);
#else # else
POINTER (*chunkfun) (); POINTER (*chunkfun) ();
void (*freefun) (); void (*freefun) ();
#endif # endif
POINTER arg; POINTER arg;
{ {
register struct _obstack_chunk *chunk; /* points to new chunk */ register struct _obstack_chunk *chunk; /* points to new chunk */
@@ -240,13 +242,13 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
size = 4096 - extra; size = 4096 - extra;
} }
#if defined(__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
#else # else
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
h->freefun = freefun; h->freefun = freefun;
#endif # endif
h->chunk_size = size; h->chunk_size = size;
h->alignment_mask = alignment - 1; h->alignment_mask = alignment - 1;
h->extra_arg = arg; h->extra_arg = arg;
@@ -341,11 +343,11 @@ _obstack_newchunk (h, length)
This is here for debugging. This is here for debugging.
If you use it in a program, you are probably losing. */ If you use it in a program, you are probably losing. */
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
/* Suppress -Wmissing-prototypes warning. We don't want to declare this in /* Suppress -Wmissing-prototypes warning. We don't want to declare this in
obstack.h because it is just for debugging. */ obstack.h because it is just for debugging. */
int _obstack_allocated_p (struct obstack *h, POINTER obj); int _obstack_allocated_p (struct obstack *h, POINTER obj);
#endif # endif
int int
_obstack_allocated_p (h, obj) _obstack_allocated_p (h, obj)
@@ -370,7 +372,7 @@ _obstack_allocated_p (h, obj)
/* Free objects in obstack H, including OBJ and everything allocate /* Free objects in obstack H, including OBJ and everything allocate
more recently than OBJ. If OBJ is zero, free everything in H. */ more recently than OBJ. If OBJ is zero, free everything in H. */
#undef obstack_free # undef obstack_free
/* This function has two names with identical definitions. /* This function has two names with identical definitions.
This is the first one, called from non-ANSI code. */ This is the first one, called from non-ANSI code. */
@@ -456,37 +458,54 @@ _obstack_memory_used (h)
} }
/* Define the error handler. */ /* Define the error handler. */
#ifndef _ # ifndef _
# if defined HAVE_LIBINTL_H || defined _LIBC # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
# include <libintl.h> # include <libintl.h>
# ifndef _ # ifndef _
# define _(Str) gettext (Str) # define _(Str) gettext (Str)
# endif
# else
# define _(Str) (Str)
# endif
# endif
# if defined _LIBC && defined USE_IN_LIBIO
# include <libio/iolibio.h>
# define fputs(s, f) _IO_fputs (s, f)
# endif
# ifndef __attribute__
/* This feature is available in gcc versions 2.5 and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
# define __attribute__(Spec) /* empty */
# endif # endif
# else
# define _(Str) (Str)
# endif # endif
#endif
#if defined _LIBC && defined USE_IN_LIBIO
# include <libio/iolibio.h>
# define fputs(s, f) _IO_fputs (s, f)
#endif
static void static void
__attribute__ ((noreturn))
print_and_abort () print_and_abort ()
{ {
fputs (_("memory exhausted"), stderr); /* Don't change any of these strings. Yes, it would be possible to add
fputc ('\n', stderr); the newline to the string and use fputs or so. But this must not
happen because the "memory exhausted" message appears in other places
like this and the translation should be reused instead of creating
a very similar string which requires a separate translation. */
# if defined _LIBC && defined USE_IN_LIBIO
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s\n", _("memory exhausted"));
else
# endif
fprintf (stderr, "%s\n", _("memory exhausted"));
exit (obstack_exit_failure); exit (obstack_exit_failure);
} }
#if 0 # if 0
/* These are now turned off because the applications do not use it /* These are now turned off because the applications do not use it
and it uses bcopy via obstack_grow, which causes trouble on sysV. */ and it uses bcopy via obstack_grow, which causes trouble on sysV. */
/* Now define the functional versions of the obstack macros. /* Now define the functional versions of the obstack macros.
Define them to simply use the corresponding macros to do the job. */ Define them to simply use the corresponding macros to do the job. */
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
/* These function definitions do not work with non-ANSI preprocessors; /* These function definitions do not work with non-ANSI preprocessors;
they won't pass through the macro names in parentheses. */ they won't pass through the macro names in parentheses. */
@@ -597,8 +616,8 @@ POINTER (obstack_copy0) (obstack, address, length)
return obstack_copy0 (obstack, address, length); return obstack_copy0 (obstack, address, length);
} }
#endif /* __STDC__ */ # endif /* __STDC__ */
#endif /* 0 */ # endif /* 0 */
#endif /* !ELIDE_CODE */ #endif /* !ELIDE_CODE */
+11 -8
View File
@@ -4,20 +4,23 @@
This file is part of the GNU C Library. Its master source is NOT part of This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib. the C library, however. The master source lives in /gd/gnu/lib.
The GNU C Library is free software; you can redistribute it and/or NOTE: The canonical source of this file is maintained with the GNU C Library.
modify it under the terms of the GNU Library General Public License as Bugs can be reported to [email protected].
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, 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 the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not, License along with this program; if not, write to the Free Software
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
Boston, MA 02111-1307, USA. */ USA. */
/* Summary: /* Summary:
+22 -2
View File
@@ -1,12 +1,32 @@
/* quote.c - quote arguments for output
Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program 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 this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by Paul Eggert <[email protected]> */ /* Written by Paul Eggert <[email protected]> */
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
# include <config.h> # include <config.h>
#endif #endif
#if HAVE_STDDEF_H
# include <stddef.h> /* For the definition of size_t on windows w/MSVC. */
#endif
#include <sys/types.h> #include <sys/types.h>
#include <quotearg.h> #include "quotearg.h"
#include <quote.h> #include "quote.h"
/* Return an unambiguous printable representated, allocated in slot N, /* Return an unambiguous printable representated, allocated in slot N,
for NAME, suitable for diagnostics. */ for NAME, suitable for diagnostics. */
+17 -1
View File
@@ -1,4 +1,20 @@
/* prototypes for quote.c */ /* quote.h - prototypes for quote.c
Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program 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 this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef PARAMS #ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__) # if defined PROTOTYPES || (defined __STDC__ && __STDC__)
+25 -12
View File
@@ -25,8 +25,8 @@
# include <stddef.h> /* For the definition of size_t on windows w/MSVC. */ # include <stddef.h> /* For the definition of size_t on windows w/MSVC. */
#endif #endif
#include <sys/types.h> #include <sys/types.h>
#include <quotearg.h> #include "quotearg.h"
#include <xalloc.h> #include "xalloc.h"
#include <ctype.h> #include <ctype.h>
@@ -44,9 +44,15 @@
#ifndef CHAR_BIT #ifndef CHAR_BIT
# define CHAR_BIT 8 # define CHAR_BIT 8
#endif #endif
#ifndef SIZE_MAX
# define SIZE_MAX ((size_t) -1)
#endif
#ifndef UCHAR_MAX #ifndef UCHAR_MAX
# define UCHAR_MAX ((unsigned char) -1) # define UCHAR_MAX ((unsigned char) -1)
#endif #endif
#ifndef UINT_MAX
# define UINT_MAX ((unsigned int) -1)
#endif
#if HAVE_C_BACKSLASH_A #if HAVE_C_BACKSLASH_A
# define ALERT_CHAR '\a' # define ALERT_CHAR '\a'
@@ -539,6 +545,7 @@ quotearg_n_options (int n, char const *arg,
one small component of a "memory exhausted" message in slot 0. */ one small component of a "memory exhausted" message in slot 0. */
static char slot0[256]; static char slot0[256];
static unsigned int nslots = 1; static unsigned int nslots = 1;
unsigned int n0 = n;
struct slotvec struct slotvec
{ {
size_t size; size_t size;
@@ -547,20 +554,26 @@ quotearg_n_options (int n, char const *arg,
static struct slotvec slotvec0 = {sizeof slot0, slot0}; static struct slotvec slotvec0 = {sizeof slot0, slot0};
static struct slotvec *slotvec = &slotvec0; static struct slotvec *slotvec = &slotvec0;
if (nslots <= n) if (n < 0)
abort ();
if (nslots <= n0)
{ {
int n1 = n + 1; unsigned int n1 = n0 + 1;
size_t s = n1 * sizeof (struct slotvec); size_t s = n1 * sizeof *slotvec;
if (! (0 < n1 && n1 == s / sizeof (struct slotvec)))
abort (); if (SIZE_MAX / UINT_MAX <= sizeof *slotvec
&& n1 != s / sizeof *slotvec)
xalloc_die ();
if (slotvec == &slotvec0) if (slotvec == &slotvec0)
{ {
slotvec = (struct slotvec *) xmalloc (sizeof (struct slotvec)); slotvec = (struct slotvec *) xmalloc (sizeof *slotvec);
*slotvec = slotvec0; *slotvec = slotvec0;
} }
slotvec = (struct slotvec *) xrealloc (slotvec, s); slotvec = (struct slotvec *) xrealloc (slotvec, s);
memset (slotvec + nslots, 0, (n1 - nslots) * sizeof (struct slotvec)); memset (slotvec + nslots, 0, (n1 - nslots) * sizeof *slotvec);
nslots = n; nslots = n1;
} }
{ {
@@ -580,7 +593,7 @@ quotearg_n_options (int n, char const *arg,
} }
char * char *
quotearg_n (unsigned int n, char const *arg) quotearg_n (int n, char const *arg)
{ {
return quotearg_n_options (n, arg, &default_quoting_options); return quotearg_n_options (n, arg, &default_quoting_options);
} }
@@ -592,7 +605,7 @@ quotearg (char const *arg)
} }
char * char *
quotearg_n_style (unsigned int n, enum quoting_style s, char const *arg) quotearg_n_style (int n, enum quoting_style s, char const *arg)
{ {
struct quoting_options o; struct quoting_options o;
o.style = s; o.style = s;
+2 -3
View File
@@ -89,7 +89,7 @@ size_t quotearg_buffer PARAMS ((char *buffer, size_t buffersize,
The returned value points to static storage that can be The returned value points to static storage that can be
reused by the next call to this function with the same value of N. reused by the next call to this function with the same value of N.
N must be nonnegative. */ N must be nonnegative. */
char *quotearg_n PARAMS ((unsigned int n, char const *arg)); char *quotearg_n PARAMS ((int n, char const *arg));
/* Equivalent to quotearg_n (0, ARG). */ /* Equivalent to quotearg_n (0, ARG). */
char *quotearg PARAMS ((char const *arg)); char *quotearg PARAMS ((char const *arg));
@@ -97,8 +97,7 @@ char *quotearg PARAMS ((char const *arg));
/* Use style S and storage slot N to return a quoted version of the string ARG. /* Use style S and storage slot N to return a quoted version of the string ARG.
This is like quotearg_n (N, ARG), except that it uses S with no other This is like quotearg_n (N, ARG), except that it uses S with no other
options to specify the quoting method. */ options to specify the quoting method. */
char *quotearg_n_style PARAMS ((unsigned int n, enum quoting_style s, char *quotearg_n_style PARAMS ((int n, enum quoting_style s, char const *arg));
char const *arg));
/* Equivalent to quotearg_n_style (0, S, ARG). */ /* Equivalent to quotearg_n_style (0, S, ARG). */
char *quotearg_style PARAMS ((enum quoting_style s, char const *arg)); char *quotearg_style PARAMS ((enum quoting_style s, char const *arg));
+32
View File
@@ -0,0 +1,32 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License
as published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this program; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place -
Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#if HAVE_STRING_H
# include <string.h>
#else
# include <strings.h>
#endif
char *
strchr (const char *s, int c)
{
return index (s, c);
}
+2 -2
View File
@@ -1,5 +1,5 @@
/* Find the length of STRING, but scan at most MAXLEN characters. /* Find the length of STRING, but scan at most MAXLEN characters.
Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. Copyright (C) 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@@ -51,7 +51,7 @@ size_t
__strnlen (const char *string, size_t maxlen) __strnlen (const char *string, size_t maxlen)
{ {
const char *end = memchr (string, '\0', maxlen); const char *end = memchr (string, '\0', maxlen);
return end ? end - string : maxlen; return end ? (size_t) (end - string) : maxlen;
} }
#ifdef weak_alias #ifdef weak_alias
weak_alias (__strnlen, strnlen) weak_alias (__strnlen, strnlen)
+2 -2
View File
@@ -47,11 +47,11 @@ void free ();
#endif #endif
#ifndef HAVE_DONE_WORKING_MALLOC_CHECK #ifndef HAVE_DONE_WORKING_MALLOC_CHECK
you must run the autoconf test for a properly working malloc -- see malloc.m4 "you must run the autoconf test for a properly working malloc -- see malloc.m4"
#endif #endif
#ifndef HAVE_DONE_WORKING_REALLOC_CHECK #ifndef HAVE_DONE_WORKING_REALLOC_CHECK
you must run the autoconf test for a properly working realloc -- see realloc.m4 "you must run the autoconf test for a properly working realloc --see realloc.m4"
#endif #endif
/* Exit value when the requested amount of memory is not available. /* Exit value when the requested amount of memory is not available.
+2 -10
View File
@@ -1,5 +1,5 @@
/* xstrdup.c -- copy a string with out of memory checking /* xstrdup.c -- copy a string with out of memory checking
Copyright (C) 1990, 1996, 1998 Free Software Foundation, Inc. Copyright (C) 1990, 1996, 1998, 2001 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
@@ -19,14 +19,6 @@
# include <config.h> # include <config.h>
#endif #endif
#ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
#endif
#if STDC_HEADERS || HAVE_STRING_H #if STDC_HEADERS || HAVE_STRING_H
# include <string.h> # include <string.h>
#else #else
@@ -35,7 +27,7 @@
#include <sys/types.h> #include <sys/types.h>
char *xmalloc PARAMS ((size_t n)); #include "xalloc.h"
/* Return a newly allocated copy of STRING. */ /* Return a newly allocated copy of STRING. */
+12 -23
View File
@@ -1,7 +1,4 @@
/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. /* Copyright (C) 2001 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
This program is free software; you can redistribute it and/or modify it 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 the under the terms of the GNU General Public License as published by the
@@ -17,20 +14,20 @@
along with this program; if not, write to the Free Software Foundation, along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H #if HAVE_CONFIG_H
# include "config.h" # include <config.h>
#endif #endif
#include <stdio.h> #if STDC_HEADERS || HAVE_STRING_H
#include <sys/types.h>
#if defined _LIBC || defined STDC_HEADERS
# include <stdlib.h>
# include <string.h> # include <string.h>
#else #else
char *malloc (); # include <strings.h>
#endif #endif
#include <sys/types.h>
#include "xalloc.h"
#ifndef HAVE_DECL_STRNLEN #ifndef HAVE_DECL_STRNLEN
"this configure-time declaration test was not run" "this configure-time declaration test was not run"
#endif #endif
@@ -38,18 +35,13 @@ char *malloc ();
size_t strnlen (); size_t strnlen ();
#endif #endif
#undef __strndup char *xstrndup (const char *s, size_t n);
#undef strndup
#ifndef weak_alias
# define __strndup strndup
#endif
char * char *
__strndup (const char *s, size_t n) xstrndup (const char *s, size_t n)
{ {
size_t len = strnlen (s, n); size_t len = strnlen (s, n);
char *new = malloc (len + 1); char *new = xmalloc (len + 1);
if (new == NULL) if (new == NULL)
return NULL; return NULL;
@@ -57,6 +49,3 @@ __strndup (const char *s, size_t n)
new[len] = '\0'; new[len] = '\0';
return (char *) memcpy (new, s, len); return (char *) memcpy (new, s, len);
} }
#ifdef weak_alias
weak_alias (__strndup, strndup)
#endif
+8 -9
View File
@@ -1,4 +1,5 @@
# Makefile.in generated automatically by automake 1.5a from Makefile.am. # Makefile.in generated by automake 1.5c from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
@@ -12,7 +13,6 @@
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@ @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
@@ -47,6 +47,7 @@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA) INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@ transform = @program_transform_name@
@@ -83,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@ INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@ INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LIB = @LIB@
LIBICONV = @LIBICONV@ LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@ MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@ MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
@@ -96,10 +97,10 @@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@ USE_NLS = @USE_NLS@
VERSION = @VERSION@ VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CFLAGS = @WARNING_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
am__include = @am__include@ am__include = @am__include@
am__quote = @am__quote@ am__quote = @am__quote@
install_sh = @install_sh@ install_sh = @install_sh@
EXTRA_DIST = \ EXTRA_DIST = \
c-bs-a.m4 \ c-bs-a.m4 \
codeset.m4 \ codeset.m4 \
@@ -132,14 +133,11 @@ $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \ cd $(top_srcdir) && \
$(AUTOMAKE) --gnu m4/Makefile $(AUTOMAKE) --gnu m4/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
uninstall-info-am: uninstall-info-am:
tags: TAGS tags: TAGS
TAGS: TAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .. top_distdir = ..
@@ -147,7 +145,7 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES) distdir: $(DISTFILES)
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
$(mkinstalldirs) "$(distdir)/$$dir"; \ $(mkinstalldirs) "$(distdir)/$$dir"; \
@@ -178,6 +176,7 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \ `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
+2 -2
View File
@@ -1,8 +1,8 @@
#serial 3 #serial 4
dnl From Paul Eggert. dnl From Paul Eggert.
AC_DEFUN(AC_C_BACKSLASH_A, AC_DEFUN([AC_C_BACKSLASH_A],
[ [
AC_CACHE_CHECK([whether backslash-a works in strings], ac_cv_c_backslash_a, AC_CACHE_CHECK([whether backslash-a works in strings], ac_cv_c_backslash_a,
[AC_TRY_COMPILE([], [AC_TRY_COMPILE([],
+5 -4
View File
@@ -1,12 +1,13 @@
#serial 1 #serial 4
dnl FIXME: put these prerequisite-only *.m4 files in a separate dnl FIXME: put these prerequisite-only *.m4 files in a separate
dnl directory -- otherwise, they'll conflict with existing files. dnl directory -- otherwise, they'll conflict with existing files.
dnl These are the prerequisite macros for GNU's error.c file. dnl These are the prerequisite macros for GNU's error.c file.
AC_DEFUN(jm_PREREQ_ERROR, AC_DEFUN([jm_PREREQ_ERROR],
[ [
AC_CHECK_FUNCS(strerror strerror_r vprintf doprnt) AC_CHECK_FUNCS(strerror vprintf doprnt)
AC_HEADER_STDC AC_CHECK_DECLS([strerror])
AC_FUNC_STRERROR_R AC_FUNC_STRERROR_R
AC_HEADER_STDC
]) ])
+7 -5
View File
@@ -3,10 +3,12 @@
# #
# This file can be copied and used freely without restrictions. It can # This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public # be used in projects which are not available under the GNU General Public
# License but which still want to provide support for the GNU gettext # License or the GNU Library General Public License but which still want
# functionality. # to provide support for the GNU gettext functionality.
# Please note that the actual code of GNU gettext is covered by the GNU # Please note that the actual code of the GNU gettext library is covered
# General Public License and is *not* in the public domain. # by the GNU Library General Public License, and the rest of the GNU
# gettext package package is covered by the GNU General Public License.
# They are *not* in the public domain.
# serial 10 # serial 10
@@ -241,7 +243,7 @@ return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", ""
dnl Found it, now check the version. dnl Found it, now check the version.
AC_MSG_CHECKING([version of bison]) AC_MSG_CHECKING([version of bison])
changequote(<<,>>)dnl changequote(<<,>>)dnl
ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison .* \([0-9]*\.[0-9.]*\).*$/\1/p'` ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+6 -4
View File
@@ -3,10 +3,12 @@
# #
# This file can be copied and used freely without restrictions. It can # This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public # be used in projects which are not available under the GNU General Public
# License but which still want to provide support for the GNU gettext # License or the GNU Library General Public License but which still want
# functionality. # to provide support for the GNU gettext functionality.
# Please note that the actual code of GNU gettext is covered by the GNU # Please note that the actual code of the GNU gettext library is covered
# General Public License and is *not* in the public domain. # by the GNU Library General Public License, and the rest of the GNU
# gettext package package is covered by the GNU General Public License.
# They are *not* in the public domain.
# serial 2 # serial 2
+6 -7
View File
@@ -1,16 +1,16 @@
#serial 3 #serial 5
dnl From Jim Meyering. dnl From Jim Meyering.
dnl Determine whether malloc accepts 0 as its argument. dnl Determine whether malloc accepts 0 as its argument.
dnl If it doesn't, arrange to use the replacement function. dnl If it doesn't, arrange to use the replacement function.
dnl dnl
AC_DEFUN(jm_FUNC_MALLOC, AC_DEFUN([jm_FUNC_MALLOC],
[ [
dnl xmalloc.c requires that this symbol be defined so it doesn't dnl xmalloc.c requires that this symbol be defined so it doesn't
dnl mistakenly use a broken malloc -- as it might if this test were omitted. dnl mistakenly use a broken malloc -- as it might if this test were omitted.
AC_DEFINE_UNQUOTED(HAVE_DONE_WORKING_MALLOC_CHECK, 1, AC_DEFINE(HAVE_DONE_WORKING_MALLOC_CHECK, 1,
[Define if the malloc check has been performed. ]) [Define if the malloc check has been performed. ])
AC_CACHE_CHECK([for working malloc], jm_cv_func_working_malloc, AC_CACHE_CHECK([for working malloc], jm_cv_func_working_malloc,
[AC_TRY_RUN([ [AC_TRY_RUN([
@@ -27,9 +27,8 @@ AC_DEFUN(jm_FUNC_MALLOC,
jm_cv_func_working_malloc=no) jm_cv_func_working_malloc=no)
]) ])
if test $jm_cv_func_working_malloc = no; then if test $jm_cv_func_working_malloc = no; then
AC_SUBST(LIBOBJS) AC_LIBOBJ(malloc)
LIBOBJS="$LIBOBJS malloc.$ac_objext" AC_DEFINE(malloc, rpl_malloc,
AC_DEFINE_UNQUOTED(malloc, rpl_malloc,
[Define to rpl_malloc if the replacement function should be used.]) [Define to rpl_malloc if the replacement function should be used.])
fi fi
]) ])
+2 -2
View File
@@ -1,4 +1,4 @@
# serial 8 # serial 9
# From Paul Eggert. # From Paul Eggert.
@@ -10,7 +10,7 @@
# (at least glibc-2.1.3) because the "_XOPEN_SOURCE 500" definition elicits # (at least glibc-2.1.3) because the "_XOPEN_SOURCE 500" definition elicits
# a syntax error in wchar.h due to the use of undefined __int32_t. # a syntax error in wchar.h due to the use of undefined __int32_t.
AC_DEFUN(AC_MBSTATE_T, AC_DEFUN([AC_MBSTATE_T],
[ [
AC_CHECK_HEADERS(stdlib.h) AC_CHECK_HEADERS(stdlib.h)
+6 -4
View File
@@ -3,10 +3,12 @@
# #
# This file can be copied and used freely without restrictions. It can # This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public # be used in projects which are not available under the GNU General Public
# License but which still want to provide support for the GNU gettext # License or the GNU Library General Public License but which still want
# functionality. # to provide support for the GNU gettext functionality.
# Please note that the actual code of GNU gettext is covered by the GNU # Please note that the actual code of the GNU gettext library is covered
# General Public License and is *not* in the public domain. # by the GNU Library General Public License, and the rest of the GNU
# gettext package package is covered by the GNU General Public License.
# They are *not* in the public domain.
# serial 2 # serial 2
+6 -7
View File
@@ -1,16 +1,16 @@
#serial 3 #serial 5
dnl From Jim Meyering. dnl From Jim Meyering.
dnl Determine whether realloc works when both arguments are 0. dnl Determine whether realloc works when both arguments are 0.
dnl If it doesn't, arrange to use the replacement function. dnl If it doesn't, arrange to use the replacement function.
dnl dnl
AC_DEFUN(jm_FUNC_REALLOC, AC_DEFUN([jm_FUNC_REALLOC],
[ [
dnl xmalloc.c requires that this symbol be defined so it doesn't dnl xmalloc.c requires that this symbol be defined so it doesn't
dnl mistakenly use a broken realloc -- as it might if this test were omitted. dnl mistakenly use a broken realloc -- as it might if this test were omitted.
AC_DEFINE_UNQUOTED(HAVE_DONE_WORKING_REALLOC_CHECK, 1, AC_DEFINE(HAVE_DONE_WORKING_REALLOC_CHECK, 1,
[Define if the realloc check has been performed. ]) [Define if the realloc check has been performed. ])
AC_CACHE_CHECK([for working realloc], jm_cv_func_working_realloc, AC_CACHE_CHECK([for working realloc], jm_cv_func_working_realloc,
[AC_TRY_RUN([ [AC_TRY_RUN([
@@ -27,9 +27,8 @@ AC_DEFUN(jm_FUNC_REALLOC,
jm_cv_func_working_realloc=no) jm_cv_func_working_realloc=no)
]) ])
if test $jm_cv_func_working_realloc = no; then if test $jm_cv_func_working_realloc = no; then
AC_SUBST(LIBOBJS) AC_LIBOBJ(realloc)
LIBOBJS="$LIBOBJS realloc.$ac_objext" AC_DEFINE(realloc, rpl_realloc,
AC_DEFINE_UNQUOTED(realloc, rpl_realloc,
[Define to rpl_realloc if the replacement function should be used.]) [Define to rpl_realloc if the replacement function should be used.])
fi fi
]) ])
+38 -45
View File
@@ -1,9 +1,23 @@
#serial 1002 #serial 1003
# Experimental replacement for the function in the latest CVS autoconf. # Experimental replacement for the function in the latest CVS autoconf.
# If the compile-test says strerror_r doesn't work, then resort to a
# `run'-test that works on BeOS and segfaults on DEC Unix.
# Use with the error.c file in ../lib. # Use with the error.c file in ../lib.
# Copyright 2001 Free Software Foundation, Inc.
# 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
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program 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 this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
undefine([AC_FUNC_STRERROR_R]) undefine([AC_FUNC_STRERROR_R])
# AC_FUNC_STRERROR_R # AC_FUNC_STRERROR_R
@@ -11,56 +25,35 @@ undefine([AC_FUNC_STRERROR_R])
AC_DEFUN([AC_FUNC_STRERROR_R], AC_DEFUN([AC_FUNC_STRERROR_R],
[AC_CHECK_DECLS([strerror_r]) [AC_CHECK_DECLS([strerror_r])
AC_CHECK_FUNCS([strerror_r]) AC_CHECK_FUNCS([strerror_r])
if test $ac_cv_func_strerror_r = yes; then AC_CACHE_CHECK([whether strerror_r returns char *],
AC_CHECK_HEADERS(string.h) ac_cv_func_strerror_r_char_p,
AC_CACHE_CHECK([for working strerror_r],
ac_cv_func_strerror_r_works,
[ [
AC_TRY_COMPILE( ac_cv_func_strerror_r_char_p=no
[ if test $ac_cv_have_decl_strerror_r = yes; then
# include <stdio.h> AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
# if HAVE_STRING_H [[
# include <string.h> char buf[100];
# endif char x = *strerror_r (0, buf, sizeof buf);
], char *p = strerror_r (0, buf, sizeof buf);
[ ]])],
char buf[100]; ac_cv_func_strerror_r_char_p=yes)
char x = *strerror_r (0, buf, sizeof buf); else
], # strerror_r is not declared. Choose between
ac_cv_func_strerror_r_works=yes,
ac_cv_func_strerror_r_works=no
)
if test $ac_cv_func_strerror_r_works = no; then
# strerror_r seems not to work, but now we have to choose between
# systems that have relatively inaccessible declarations for the # systems that have relatively inaccessible declarations for the
# function. BeOS and DEC UNIX 4.0 fall in this category, but the # function. BeOS and DEC UNIX 4.0 fall in this category, but the
# former has a strerror_r that returns char*, while the latter # former has a strerror_r that returns char*, while the latter
# has a strerror_r that returns `int'. # has a strerror_r that returns `int'.
# This test should segfault on the DEC system. # This test should segfault on the DEC system.
AC_TRY_RUN( AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
[ extern char *strerror_r ();],
# include <stdio.h> [[char buf[100];
# include <string.h>
# include <ctype.h>
extern char *strerror_r ();
int
main ()
{
char buf[100];
char x = *strerror_r (0, buf, sizeof buf); char x = *strerror_r (0, buf, sizeof buf);
exit (!isalpha (x)); exit (!isalpha (x));]])],
} ac_cv_func_strerror_r_char_p=yes, , :)
],
ac_cv_func_strerror_r_works=yes,
ac_cv_func_strerror_r_works=no,
ac_cv_func_strerror_r_works=no)
fi fi
]) ])
if test $ac_cv_func_strerror_r_works = yes; then if test $ac_cv_func_strerror_r_char_p = yes; then
AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1, AC_DEFINE([STRERROR_R_CHAR_P], 1,
[Define to 1 if `strerror_r' returns a string.]) [Define to 1 if strerror_r returns char *.])
fi
fi fi
])# AC_FUNC_STRERROR_R ])# AC_FUNC_STRERROR_R
+1 -2
View File
@@ -1,6 +1,5 @@
ChangeLog ChangeLog
Makefile Makefile Makefile.in
Makefile.in
POTFILES POTFILES
bison.pot bison.pot
stamp-cat-id stamp-cat-id
-13
View File
@@ -1,16 +1,3 @@
2001-10-10 gettextize <[email protected]>
* Makefile.in.in: Upgrade to gettext-0.10.40.
2001-10-10 gettextize <[email protected]>
* Makefile.in.in: Upgrade to gettext-0.10.40.
2001-10-09 gettextize <[email protected]>
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
2001-09-27 gettextize <[email protected]> 2001-09-27 gettextize <[email protected]>
* Makefile.in.in: Upgrade to gettext-0.10.40. * Makefile.in.in: Upgrade to gettext-0.10.40.
-3
View File
@@ -1,13 +1,10 @@
src/LR0.c src/LR0.c
src/complain.c src/complain.c
src/conflicts.c src/conflicts.c
src/derives.c
src/files.c src/files.c
src/getargs.c src/getargs.c
src/lalr.c src/lalr.c
src/lex.c src/lex.c
src/main.c
src/nullable.c
src/output.c src/output.c
src/print.c src/print.c
src/print_graph.c src/print_graph.c
BIN
View File
Binary file not shown.
+254 -238
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+278 -255
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+204 -246
View File
@@ -4,21 +4,21 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bison 1.28d\n" "Project-Id-Version: bison 1.30f\n"
"POT-Creation-Date: 2001-10-02 18:30+0200\n" "POT-Creation-Date: 2002-01-11 14:38+0100\n"
"PO-Revision-Date: 2001-08-29 17:06+02:00\n" "PO-Revision-Date: 2001-12-05 20:35+0200\n"
"Last-Translator: Toomas Soome <[email protected]>\n" "Last-Translator: Toomas Soome <[email protected]>\n"
"Language-Team: Estonian <[email protected]>\n" "Language-Team: Estonian <[email protected]>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8-bit\n" "Content-Transfer-Encoding: 8-bit\n"
#: src/LR0.c:207 #: src/LR0.c:189
#, c-format #, c-format
msgid "too many states (max %d)" msgid "too many states (max %d)"
msgstr "liiga palju olekuid (maks %d)" msgstr "liiga palju olekuid (maks %d)"
#: lib/error.c:117 src/complain.c:96 #: lib/error.c:128 lib/error.c:156 src/complain.c:99
msgid "Unknown system error" msgid "Unknown system error"
msgstr "Tundmatu süsteemi viga" msgstr "Tundmatu süsteemi viga"
@@ -26,81 +26,84 @@ msgstr "Tundmatu s
msgid "warning: " msgid "warning: "
msgstr "hoiatus: " msgstr "hoiatus: "
#: src/complain.c:238 src/complain.c:279 #: src/complain.c:238
msgid "fatal error: " msgid "fatal error: "
msgstr "fataalne viga: " msgstr "fataalne viga: "
#: src/conflicts.c:48 #: src/conflicts.c:44
#, c-format #, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n" msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr "Konflikt olekus %d reegli %d ja märgi %s vahel lahendatud, kui %s.\n" msgstr "Konflikt olekus %d reegli %d ja märgi %s vahel lahendatud, kui %s.\n"
#: src/conflicts.c:114 src/conflicts.c:137 #: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce" msgid "reduce"
msgstr "redutseerimine" msgstr "redutseerimine"
#: src/conflicts.c:120 src/conflicts.c:133 #: src/conflicts.c:101 src/conflicts.c:115
msgid "shift" msgid "shift"
msgstr "nihutamine" msgstr "nihutamine"
#: src/conflicts.c:141 #: src/conflicts.c:123
msgid "an error" msgid "an error"
msgstr "viga" msgstr "viga"
#: src/conflicts.c:421 #: src/conflicts.c:302
msgid " 1 shift/reduce conflict"
msgstr " 1 nihutamine/redutseerimine konflikt"
#: src/conflicts.c:426
#, c-format #, c-format
msgid " %d shift/reduce conflicts" msgid "%d shift/reduce conflict"
msgstr " %d nihutamine/redutseerimine konflikti" msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d nihutamine/redutseerimine konflikt"
msgstr[1] "%d nihutamine/redutseerimine konflikti"
#: src/conflicts.c:432 #: src/conflicts.c:309
msgid " and" msgid "and"
msgstr " ja" msgstr "ja"
#: src/conflicts.c:438 #: src/conflicts.c:315
msgid " 1 reduce/reduce conflict"
msgstr " 1 redutseerimine/redutseerimine konflikt"
#: src/conflicts.c:443
#, c-format #, c-format
msgid " %d reduce/reduce conflicts" msgid "%d reduce/reduce conflict"
msgstr " %d redutseerimine/redutseerimine konflikti" msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d redutseerimine/redutseerimine konflikt"
msgstr[1] "%d redutseerimine/redutseerimine konflikti"
#: src/conflicts.c:480 #: src/conflicts.c:340
#, c-format #, c-format
msgid "State %d contains" msgid "State %d contains "
msgstr "Olek %d sisaldab" msgstr "Olek %d sisaldab "
#. If invoked with `--yacc', use the output format specified by #. If invoked with `--yacc', use the output format specified by
#. POSIX. #. POSIX.
#: src/conflicts.c:491 #: src/conflicts.c:387
msgid "conflicts: " msgid "conflicts: "
msgstr "konfliktid: " msgstr "konfliktid: "
#: src/conflicts.c:493 #: src/conflicts.c:389
#, c-format #, c-format
msgid " %d shift/reduce" msgid " %d shift/reduce"
msgstr " %d nihutamine/redutseerimine" msgstr " %d nihutamine/redutseerimine"
#: src/conflicts.c:497 #: src/conflicts.c:393
#, c-format #, c-format
msgid " %d reduce/reduce" msgid " %d reduce/reduce"
msgstr " %d redutseerimine/redutseerimine" msgstr " %d redutseerimine/redutseerimine"
#: src/conflicts.c:502 #: src/conflicts.c:398 src/reduce.c:508
#, c-format #, c-format
msgid "%s contains" msgid "%s contains "
msgstr "%s sisaldab" msgstr "%s sisaldab "
#: src/conflicts.c:588 src/conflicts.c:709 #: src/conflicts.c:412
#, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] "eeldasime %d nihutamine/redutseerimine konflikti\n"
msgstr[1] "eeldasime %d nihutamine/redutseerimine konflikti\n"
#: src/conflicts.c:463 src/conflicts.c:540
#, c-format #, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n" msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[redutseerin, kasutades reeglit %d (%s)]\n" msgstr " %-4s\t[redutseerin, kasutades reeglit %d (%s)]\n"
#: src/conflicts.c:600 src/print.c:171 #: src/conflicts.c:467 src/print.c:154
#, c-format #, c-format
msgid "" msgid ""
" $default\treduce using rule %d (%s)\n" " $default\treduce using rule %d (%s)\n"
@@ -109,46 +112,37 @@ msgstr ""
" $default\tredutseerin kasutades reeglit %d (%s)\n" " $default\tredutseerin kasutades reeglit %d (%s)\n"
"\n" "\n"
#: src/conflicts.c:689 src/conflicts.c:703 #: src/conflicts.c:521 src/conflicts.c:534
#, c-format #, c-format
msgid " %-4s\treduce using rule %d (%s)\n" msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\tredutseerin kasutades reeglit %d (%s)\n" msgstr " %-4s\tredutseerin kasutades reeglit %d (%s)\n"
#: src/conflicts.c:730 #: src/conflicts.c:550
#, c-format #, c-format
msgid " $default\treduce using rule %d (%s)\n" msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\tredutseerin kasutades reeglit %d (%s)\n" msgstr " $default\tredutseerin kasutades reeglit %d (%s)\n"
#: src/derives.c:43 #: src/files.c:150
msgid "DERIVES"
msgstr "DERIVES"
#: src/derives.c:48
#, c-format
msgid "%s derives"
msgstr "%s derives"
#: src/files.c:133
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "faili `%s' ei saa avada" msgstr "faili `%s' ei saa avada"
#: src/files.c:152 #: src/files.c:169
msgid "cannot close file" msgid "cannot close file"
msgstr "faili ei õnnestu sulgeda" msgstr "faili ei õnnestu sulgeda"
#. Some efforts were made to ease the translators' task, please #. Some efforts were made to ease the translators' task, please
#. continue. #. continue.
#: src/getargs.c:83 #: src/getargs.c:84
msgid "GNU bison generates parsers for LALR(1) grammars.\n" msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison genereerib parsereid LALR(1) grammatikatele.\n" msgstr "GNU bison genereerib parsereid LALR(1) grammatikatele.\n"
#: src/getargs.c:87 #: src/getargs.c:88
#, c-format #, c-format
msgid "Usage: %s [OPTION]... FILE\n" msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Kasuta: %s [VÕTI]...FAIL\n" msgstr "Kasuta: %s [VÕTI]...FAIL\n"
#: src/getargs.c:91 #: src/getargs.c:92
msgid "" msgid ""
"If a long option shows an argument as mandatory, then it is mandatory\n" "If a long option shows an argument as mandatory, then it is mandatory\n"
"for the equivalent short option also. Similarly for optional arguments.\n" "for the equivalent short option also. Similarly for optional arguments.\n"
@@ -156,7 +150,7 @@ msgstr ""
"Kui pikk võti näitab, et argument on kohustuslik, siis on see kohustuslik \n" "Kui pikk võti näitab, et argument on kohustuslik, siis on see kohustuslik \n"
"ka lühikese võtme korral. Sama ka vabalt valitavate võtmete korral.\n" "ka lühikese võtme korral. Sama ka vabalt valitavate võtmete korral.\n"
#: src/getargs.c:97 #: src/getargs.c:98
msgid "" msgid ""
"Operation modes:\n" "Operation modes:\n"
" -h, --help display this help and exit\n" " -h, --help display this help and exit\n"
@@ -168,7 +162,7 @@ msgstr ""
" -V, --version esita versiooniinfo ja lõpeta töö\n" " -V, --version esita versiooniinfo ja lõpeta töö\n"
" -y, --yacc emuleeri POSIX yacc\n" " -y, --yacc emuleeri POSIX yacc\n"
#: src/getargs.c:104 #: src/getargs.c:105
msgid "" msgid ""
"Parser:\n" "Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n" " -S, --skeleton=FILE specify the skeleton to use\n"
@@ -188,14 +182,14 @@ msgstr ""
" -n, --no-parser genereeri ainult tabelid\n" " -n, --no-parser genereeri ainult tabelid\n"
" -k, --token-table lisa ka sümbolite nimede tabel\n" " -k, --token-table lisa ka sümbolite nimede tabel\n"
#: src/getargs.c:116 #: src/getargs.c:117
msgid "" msgid ""
"Output:\n" "Output:\n"
" -d, --defines also produce a header file\n" " -d, --defines also produce a header file\n"
" -v, --verbose also produce an explanation of the automaton\n" " -v, --verbose also produce an explanation of the automaton\n"
" -b, --file-prefix=PREFIX specify a PREFIX for output files\n" " -b, --file-prefix=PREFIX specify a PREFIX for output files\n"
" -o, --output-file=FILE leave output to FILE\n" " -o, --output=FILE leave output to FILE\n"
" -g, --graph also produce a VCG graph description of the " " -g, --graph also produce a VCG description of the "
"automaton\n" "automaton\n"
msgstr "" msgstr ""
"Väljund:\n" "Väljund:\n"
@@ -205,25 +199,25 @@ msgstr ""
" -o, --output-file=FAIL jäta väljund FAILi\n" " -o, --output-file=FAIL jäta väljund FAILi\n"
" -g, --graph loo automaadi kirjeldus VCG graafina\n" " -g, --graph loo automaadi kirjeldus VCG graafina\n"
#: src/getargs.c:126 #: src/getargs.c:127
msgid "Report bugs to <[email protected]>.\n" msgid "Report bugs to <[email protected]>.\n"
msgstr "Teatage palun vigadest aadressil <[email protected]>.\n" msgstr "Teatage palun vigadest aadressil <[email protected]>.\n"
#. Some efforts were made to ease the translators' task, please #. Some efforts were made to ease the translators' task, please
#. continue. #. continue.
#: src/getargs.c:140 #: src/getargs.c:141
#, c-format #, c-format
msgid "bison (GNU Bison) %s" msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s" msgstr "bison (GNU Bison) %s"
#: src/getargs.c:145 #: src/getargs.c:146
msgid "" msgid ""
"Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n" "Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"
msgstr "" msgstr ""
"Autoriõigus 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, " "Autoriõigus 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, "
"Inc.\n" "Inc.\n"
#: src/getargs.c:149 #: src/getargs.c:150
msgid "" msgid ""
"This is free software; see the source for copying conditions. There is NO\n" "This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -231,541 +225,514 @@ msgstr ""
"See on vaba tarkvara; kopeerimistingimused leiate lähtetekstidest. Garantii\n" "See on vaba tarkvara; kopeerimistingimused leiate lähtetekstidest. Garantii\n"
"PUUDUB; ka müügiks või mingil eesmärgil kasutamiseks.\n" "PUUDUB; ka müügiks või mingil eesmärgil kasutamiseks.\n"
#: src/getargs.c:214 src/lex.c:650 #: src/getargs.c:223 src/lex.c:694
#, c-format #, c-format
msgid "`%s' is no longer supported" msgid "`%s' is no longer supported"
msgstr "`%s' ei ole enam toetatud" msgstr "`%s' ei ole enam toetatud"
#: src/getargs.c:238 #: src/getargs.c:247
#, c-format #, c-format
msgid "Try `%s --help' for more information.\n" msgid "Try `%s --help' for more information.\n"
msgstr "Lisainfo saamiseks proovige `%s --help'.\n" msgstr "Lisainfo saamiseks proovige `%s --help'.\n"
#: src/getargs.c:245 #: src/getargs.c:254
#, c-format #, c-format
msgid "%s: no grammar file given\n" msgid "%s: no grammar file given\n"
msgstr "%s: puudub grammatikafail\n" msgstr "%s: puudub grammatikafail\n"
#: src/getargs.c:249 #: src/getargs.c:258
#, c-format #, c-format
msgid "%s: extra arguments ignored after `%s'\n" msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: ignoreerin lisaargumente peale `%s'\n" msgstr "%s: ignoreerin lisaargumente peale `%s'\n"
#: src/lalr.c:311 #: src/lalr.c:256
#, c-format #, c-format
msgid "too many gotos (max %d)" msgid "too many gotos (max %d)"
msgstr "liiga palju gotosid (maks %d)" msgstr "liiga palju gotosid (maks %d)"
#: src/lex.c:78 #: src/lex.c:76
msgid "unexpected `/' found and ignored" msgid "unexpected `/' found and ignored"
msgstr "leidsin ja ignoreerin ootamatu `/'" msgstr "leidsin ja ignoreerin ootamatu `/'"
#: src/lex.c:107 src/reader.c:269 #: src/lex.c:105 src/reader.c:280
msgid "unterminated comment" msgid "unterminated comment"
msgstr "lõpetamata kommentaar" msgstr "lõpetamata kommentaar"
#: src/lex.c:139 #: src/lex.c:137
msgid "unexpected end of file" msgid "unexpected end of file"
msgstr "ootamatu faililõpp" msgstr "ootamatu faililõpp"
#: src/lex.c:168 #: src/lex.c:166
msgid "unescaped newline in constant" msgid "unescaped newline in constant"
msgstr "paojadata reavahetus konstandis" msgstr "paojadata reavahetus konstandis"
#: src/lex.c:210 #: src/lex.c:208
#, c-format #, c-format
msgid "octal value outside range 0...255: `\\%o'" msgid "octal value outside range 0...255: `\\%o'"
msgstr "kaheksandväärtus väljaspool piire 0...255: `\\%o'" msgstr "kaheksandväärtus väljaspool piire 0...255: `\\%o'"
#: src/lex.c:235 #: src/lex.c:233
#, c-format #, c-format
msgid "hexadecimal value above 255: `\\x%x'" msgid "hexadecimal value above 255: `\\x%x'"
msgstr "kuueteistkümnendväärtus suurem, kui above 255: `\\x%x'" msgstr "kuueteistkümnendväärtus suurem, kui above 255: `\\x%x'"
#: src/lex.c:247 #: src/lex.c:245
#, c-format #, c-format
msgid "unknown escape sequence: `\\' followed by `%s'" msgid "unknown escape sequence: `\\' followed by `%s'"
msgstr "tundmatu paojada: `\\' järgneb `%s'" msgstr "tundmatu paojada: `\\' järgneb `%s'"
#: src/lex.c:343 #: src/lex.c:342
msgid "unterminated type name at end of file" msgid "unterminated type name at end of file"
msgstr "lõpetamata tüübinimi faili lõpus" msgstr "lõpetamata tüübinimi faili lõpus"
#: src/lex.c:346 #: src/lex.c:345
msgid "unterminated type name" msgid "unterminated type name"
msgstr "lõpetamata tüübinimi" msgstr "lõpetamata tüübinimi"
#: src/lex.c:437 #: src/lex.c:438
msgid "use \"...\" for multi-character literal tokens" msgid "use \"...\" for multi-character literal tokens"
msgstr "kasuta mitmesümboliliste literaalidega \"...\" konstruktsiooni" msgstr "kasuta mitmesümboliliste literaalidega \"...\" konstruktsiooni"
#: src/main.c:125 #: src/lex.c:667
#, c-format #, c-format
msgid "%s: internal error: %s\n" msgid "`%s' supports no argument: %s"
msgstr "%s: sisemine viga: %s\n" msgstr "`%s' ei toeta argumente: %s"
#: src/nullable.c:51 #: src/lex.c:683
msgid "Entering set_nullable" #, c-format
msgstr "Entering set_nullable" msgid "`%s' requires an argument"
msgstr "võti `%s' nõuab argumenti"
#: src/output.c:986 #: src/output.c:951
#, c-format #, c-format
msgid "maximum table size (%d) exceeded" msgid "maximum table size (%d) exceeded"
msgstr "ületati maksimaalset tabelisuurust (%d)" msgstr "ületati maksimaalset tabelisuurust (%d)"
#: src/print.c:37 #: src/print.c:39
#, c-format #, c-format
msgid " type %d is %s\n" msgid " type %d is %s\n"
msgstr " tüüp %d on %s\n" msgstr " tüüp %d on %s\n"
#: src/print.c:85 #: src/print.c:88
#, c-format #, c-format
msgid " (rule %d)" msgid " (rule %d)"
msgstr " (reegel %d)" msgstr " (reegel %d)"
#: src/print.c:111 #: src/print.c:108
msgid " $default\taccept\n" msgid " $default\taccept\n"
msgstr " $default\taktsepteerin\n" msgstr " $default\taktsepteerin\n"
#: src/print.c:113 #: src/print.c:110
msgid " NO ACTIONS\n" msgid " NO ACTIONS\n"
msgstr " TEGEVUSI POLE\n" msgstr " TEGEVUSI POLE\n"
#: src/print.c:132 #: src/print.c:124
#, c-format #, c-format
msgid " $ \tgo to state %d\n" msgid " $ \tgo to state %d\n"
msgstr " $ \tliigu olekule %d\n" msgstr " $ \tliigu olekule %d\n"
#: src/print.c:135 #: src/print.c:127
#, c-format #, c-format
msgid " %-4s\tshift, and go to state %d\n" msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tnihuta ja liigu olekule %d\n" msgstr " %-4s\tnihuta ja liigu olekule %d\n"
#: src/print.c:159 #: src/print.c:142
#, c-format #, c-format
msgid " %-4s\terror (nonassociative)\n" msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tviga (mitteassotsiatiivne)\n" msgstr " %-4s\tviga (mitteassotsiatiivne)\n"
#: src/print.c:187 #: src/print.c:169
#, c-format #, c-format
msgid " %-4s\tgo to state %d\n" msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tliigu olekule %d\n" msgstr " %-4s\tliigu olekule %d\n"
#: src/print.c:199 #: src/print.c:180
#, c-format #, c-format
msgid "state %d" msgid "state %d"
msgstr "olek %d" msgstr "olek %d"
#. rule # : LHS -> RHS #. rule # : LHS -> RHS
#: src/print.c:229 #: src/print.c:211
msgid "Grammar" msgid "Grammar"
msgstr "Grammatika" msgstr "Grammatika"
#: src/print.c:234 #: src/print.c:212
#, c-format msgid "Number, Line, Rule"
msgid "rule %-4d %s ->" msgstr "Number, rida, reegel"
msgstr "reegel %-4d %s ->"
#: src/print.c:240 #: src/print.c:217
#, c-format
msgid " %3d %3d %s ->"
msgstr " %3d %3d %s ->"
#: src/print.c:224
msgid "empty" msgid "empty"
msgstr "" msgstr "tühi"
#. TERMINAL (type #) : rule #s terminal is on RHS #. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:244 #: src/print.c:231
msgid "Terminals, with rules where they appear" msgid "Terminals, with rules where they appear"
msgstr "Terminalid, koos reeglitega, kus nad ilmuvad" msgstr "Terminalid, koos reeglitega, kus nad ilmuvad"
#: src/print.c:268 #: src/print.c:256
msgid "Nonterminals, with rules where they appear" msgid "Nonterminals, with rules where they appear"
msgstr "Mitteterminalid, koos reeglitega, kus nad ilmuvad" msgstr "Mitteterminalid, koos reeglitega, kus nad ilmuvad"
#: src/print.c:294 #: src/print.c:282
msgid " on left:" msgid " on left:"
msgstr " vasakul:" msgstr " vasakul:"
#: src/print.c:309 #: src/print.c:297
msgid " on right:" msgid " on right:"
msgstr " paremal:" msgstr " paremal:"
#: src/print_graph.c:174 #. If something has been added in the NODE_OBSTACK after
#. the declaration of the label, then we need a `\n'.
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:146
#, c-format #, c-format
msgid "%-4s\terror (nonassociative)" msgid "%-4s\terror (nonassociative)"
msgstr "%-4s\tviga (mitteassotsiatiivne)" msgstr "%-4s\tviga (mitteassotsiatiivne)"
#: src/print_graph.c:187 #.
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:161
#, c-format #, c-format
msgid "$default\treduce using rule %d (%s)" msgid "$default\treduce using rule %d (%s)"
msgstr "$default\tredutseerin kasutades reeglit %d (%s)" msgstr "$default\tredutseerin kasutades reeglit %d (%s)"
#: src/reader.c:78 #: src/reader.c:89
msgid " Skipping to next \\n" msgid " Skipping to next \\n"
msgstr " Liigun järgmisele \\n" msgstr " Liigun järgmisele \\n"
#: src/reader.c:80 #: src/reader.c:91
#, c-format #, c-format
msgid " Skipping to next %c" msgid " Skipping to next %c"
msgstr " Liigun järgmisele %c" msgstr " Liigun järgmisele %c"
#: src/reader.c:131 src/reader.c:143 #: src/reader.c:142 src/reader.c:154
msgid "invalid $ value" msgid "invalid $ value"
msgstr "vigane $ väärtus" msgstr "vigane $ väärtus"
#: src/reader.c:169 src/reader.c:184 #: src/reader.c:180 src/reader.c:195
msgid "unterminated string at end of file" msgid "unterminated string at end of file"
msgstr "lõpetamata sõne faili lõpus" msgstr "lõpetamata sõne faili lõpus"
#: src/reader.c:172 #: src/reader.c:183
msgid "unterminated string" msgid "unterminated string"
msgstr "lõpetamata sõne" msgstr "lõpetamata sõne"
#: src/reader.c:325 src/reader.c:389 #: src/reader.c:336 src/reader.c:400
#, c-format #, c-format
msgid "%s is invalid" msgid "%s is invalid"
msgstr "%s on vigane" msgstr "%s on vigane"
#: src/reader.c:365 #: src/reader.c:376
#, c-format #, c-format
msgid "$$ of `%s' has no declared type" msgid "$$ of `%s' has no declared type"
msgstr "`%s' $$ ei oma deklareeritud tüüpi" msgstr "`%s' $$ ei oma deklareeritud tüüpi"
#: src/reader.c:382 #: src/reader.c:393
#, c-format #, c-format
msgid "$%d of `%s' has no declared type" msgid "$%d of `%s' has no declared type"
msgstr "$%d `%s' ei oma deklareeritud tüüpi" msgstr "$%d `%s' ei oma deklareeritud tüüpi"
#: src/reader.c:436 #: src/reader.c:447
msgid "unterminated `%{' definition" msgid "unterminated `%{' definition"
msgstr "lõpetamata `%{' definitsioon" msgstr "lõpetamata `%{' definitsioon"
#: src/reader.c:481 src/reader.c:595 src/reader.c:645 #: src/reader.c:492 src/reader.c:607 src/reader.c:657
#, c-format #, c-format
msgid "Premature EOF after %s" msgid "Premature EOF after %s"
msgstr "Enneaegne EOF peale %s" msgstr "Enneaegne EOF peale %s"
#: src/reader.c:498 #: src/reader.c:509
#, c-format #, c-format
msgid "symbol `%s' used more than once as a literal string" msgid "symbol `%s' used more than once as a literal string"
msgstr "sümbolit `%s' on kasutatud enam kui kord literaal sõnena" msgstr "sümbolit `%s' on kasutatud enam kui kord literaal sõnena"
#: src/reader.c:501 #: src/reader.c:512
#, c-format #, c-format
msgid "symbol `%s' given more than one literal string" msgid "symbol `%s' given more than one literal string"
msgstr "sümbolile `%s' on antud enam kui üks literaal sõne" msgstr "sümbolile `%s' on antud enam kui üks literaal sõne"
#: src/reader.c:522 src/reader.c:664 #: src/reader.c:533 src/reader.c:676
#, c-format #, c-format
msgid "symbol %s redefined" msgid "symbol %s redefined"
msgstr "sümbol %s on uuesti defineeritud" msgstr "sümbol %s on uuesti defineeritud"
#: src/reader.c:532 src/reader.c:610 src/reader.c:671 src/reader.c:1285 #: src/reader.c:543 src/reader.c:622 src/reader.c:683 src/reader.c:1298
#, c-format #, c-format
msgid "type redeclaration for %s" msgid "type redeclaration for %s"
msgstr "%s tüübi uuesti deklareerimine" msgstr "%s tüübi uuesti deklareerimine"
#: src/reader.c:541 #: src/reader.c:552
#, c-format #, c-format
msgid "`%s' is invalid in %s" msgid "`%s' is invalid in %s"
msgstr "`%s' ei ole %s sees lubatud" msgstr "`%s' ei ole %s sees lubatud"
#: src/reader.c:558 src/reader.c:717 #: src/reader.c:570 src/reader.c:735
#, c-format #, c-format
msgid "multiple %s declarations" msgid "multiple %s declarations"
msgstr "korduvad %s deklaratsioonid" msgstr "korduvad %s deklaratsioonid"
#: src/reader.c:560 src/reader.c:897 src/reader.c:922 src/reader.c:1263 #: src/reader.c:572 src/reader.c:914 src/reader.c:939 src/reader.c:1276
#, c-format #, c-format
msgid "invalid %s declaration" msgid "invalid %s declaration"
msgstr "vigane %s deklaratsioon" msgstr "vigane %s deklaratsioon"
#: src/reader.c:580 #: src/reader.c:592
msgid "%type declaration has no <typename>" msgid "%type declaration has no <typename>"
msgstr "%type deklaratsioonis puudub <tüübinimi>" msgstr "%type deklaratsioonis puudub <tüübinimi>"
#: src/reader.c:615 #: src/reader.c:627
#, c-format #, c-format
msgid "invalid %%type declaration due to item: %s" msgid "invalid %%type declaration due to item: %s"
msgstr "vigane %%type deklaratsioon, element: %s" msgstr "vigane %%type deklaratsioon, element: %s"
#: src/reader.c:660 #: src/reader.c:672
#, c-format #, c-format
msgid "redefining precedence of %s" msgid "redefining precedence of %s"
msgstr "%s prioriteedi uus definitsioon" msgstr "%s prioriteedi uus definitsioon"
#: src/reader.c:683 #: src/reader.c:695
#, c-format #, c-format
msgid "invalid text (%s) - number should be after identifier" msgid "invalid text (%s) - number should be after identifier"
msgstr "vigane tekst (%s) - number peab olema peale identifikaatorit" msgstr "vigane tekst (%s) - number peab olema peale identifikaatorit"
#: src/reader.c:693 #: src/reader.c:705
#, c-format #, c-format
msgid "unexpected item: %s" msgid "unexpected item: %s"
msgstr "ootamatu element: %s" msgstr "ootamatu element: %s"
#: src/reader.c:760 src/reader.c:1089 src/reader.c:1160 #: src/reader.c:778 src/reader.c:1110 src/reader.c:1187
#, c-format #, c-format
msgid "unmatched %s" msgid "unmatched %s"
msgstr "puudub %s" msgstr "puudub %s"
#: src/reader.c:792 #: src/reader.c:810
#, c-format #, c-format
msgid "argument of %%expect is not an integer" msgid "argument of %%expect is not an integer"
msgstr "%%expect argument ei ole täisarv" msgstr "%%expect argument ei ole täisarv"
#: src/reader.c:838 #: src/reader.c:856
#, c-format #, c-format
msgid "unrecognized item %s, expected an identifier" msgid "unrecognized item %s, expected an identifier"
msgstr "tundmatu element %s, eeldasin identifikaatorit" msgstr "tundmatu element %s, eeldasin identifikaatorit"
#: src/reader.c:862 #: src/reader.c:878
#, c-format #, c-format
msgid "expected string constant instead of %s" msgid "expected string constant instead of %s"
msgstr "eeldasin %s asemel sõnekonstanti" msgstr "eeldasin %s asemel sõnekonstanti"
#: src/reader.c:1005 #: src/reader.c:1026
#, c-format #, c-format
msgid "unrecognized: %s" msgid "unrecognized: %s"
msgstr "tundmatu: %s" msgstr "tundmatu: %s"
#: src/reader.c:1010 #: src/reader.c:1031
msgid "no input grammar" msgid "no input grammar"
msgstr "sisendgrammatikat pole" msgstr "sisendgrammatikat pole"
#: src/reader.c:1015 #: src/reader.c:1036
#, c-format #, c-format
msgid "unknown character: %s" msgid "unknown character: %s"
msgstr "tundmatu sümbol: %s" msgstr "tundmatu sümbol: %s"
#: src/reader.c:1183 #: src/reader.c:1210
#, c-format #, c-format
msgid "unterminated %guard clause" msgid "unterminated %guard clause"
msgstr "lõpetamata %guard klausel" msgstr "lõpetamata %guard klausel"
#: src/reader.c:1350 #: src/reader.c:1363
msgid "ill-formed rule: initial symbol not followed by colon" msgid "ill-formed rule: initial symbol not followed by colon"
msgstr "vigaselt formeeritud reegel: algsümbolile ei järgne koolonit" msgstr "vigaselt formeeritud reegel: algsümbolile ei järgne koolonit"
#: src/reader.c:1357 #: src/reader.c:1370
msgid "grammar starts with vertical bar" msgid "grammar starts with vertical bar"
msgstr "grammatika algab püstkriipsuga" msgstr "grammatika algab püstkriipsuga"
#: src/reader.c:1388 #: src/reader.c:1398
#, c-format #, c-format
msgid "rule given for %s, which is a token" msgid "rule given for %s, which is a token"
msgstr "%s jaoks on antud reegel, aga see on märk" msgstr "%s jaoks on antud reegel, aga see on märk"
#: src/reader.c:1490 #: src/reader.c:1498
msgid "two @prec's in a row" msgid "two @prec's in a row"
msgstr "kaks @prec ühel real" msgstr "kaks @prec ühel real"
#: src/reader.c:1498 #: src/reader.c:1506
#, c-format #, c-format
msgid "%%guard present but %%semantic_parser not specified" msgid "%%guard present but %%semantic_parser not specified"
msgstr "%%guard on määratud, aga %%semantic_parser ei ole" msgstr "%%guard on määratud, aga %%semantic_parser ei ole"
#: src/reader.c:1507 #: src/reader.c:1515
msgid "two actions at end of one rule" msgid "two actions at end of one rule"
msgstr "kaks tegevust ühe reegli lõpus" msgstr "kaks tegevust ühe reegli lõpus"
#: src/reader.c:1521 #: src/reader.c:1529
#, c-format #, c-format
msgid "type clash (`%s' `%s') on default action" msgid "type clash (`%s' `%s') on default action"
msgstr "vaikimisi tegevuse tüübikonflikt (`%s' `%s')" msgstr "vaikimisi tegevuse tüübikonflikt (`%s' `%s')"
#: src/reader.c:1527 #: src/reader.c:1535
msgid "empty rule for typed nonterminal, and no action" msgid "empty rule for typed nonterminal, and no action"
msgstr "tüübiga mitteterminalil on tühi reegel ja puudub tegevus" msgstr "tüübiga mitteterminalil on tühi reegel ja puudub tegevus"
#: src/reader.c:1571 #: src/reader.c:1579
#, c-format #, c-format
msgid "invalid input: %s" msgid "invalid input: %s"
msgstr "vigane sisend: %s" msgstr "vigane sisend: %s"
#: src/reader.c:1579 #: src/reader.c:1587
#, c-format #, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d" msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "liiga palju sümboleid (märgid ja mitteterminalid); maksimaalne on %d" msgstr "liiga palju sümboleid (märgid ja mitteterminalid); maksimaalne on %d"
#: src/reader.c:1582 #: src/reader.c:1590
msgid "no rules in the input grammar" msgid "no rules in the input grammar"
msgstr "sisendgrammatikas pole reegleid" msgstr "sisendgrammatikas pole reegleid"
#: src/reader.c:1606 #: src/reader.c:1614
#, c-format #, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules" msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr "" msgstr ""
"kasutatakse sümbolit %s, mis ei ole defineeritud märgina ja millel puuduvad " "kasutatakse sümbolit %s, mis ei ole defineeritud märgina ja millel puuduvad "
"reeglid" "reeglid"
#: src/reader.c:1712 #: src/reader.c:1749
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "%s ja %s omavad konfliktseid prioriteete"
#: src/reader.c:1724
#, c-format
msgid "conflicting assoc values for %s and %s"
msgstr "%s ja %s omavad konfliktseid assotsiatiivseid väärtuseid"
#: src/reader.c:1770
#, c-format #, c-format
msgid "tokens %s and %s both assigned number %d" msgid "tokens %s and %s both assigned number %d"
msgstr "märkidele %s ja %s on mõlemale omistatud number %d" msgstr "märkidele %s ja %s on mõlemale omistatud number %d"
#: src/reader.c:1782 #: src/reader.c:1802
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "%s ja %s omavad konfliktseid prioriteete"
#: src/reader.c:1814
#, c-format
msgid "conflicting assoc values for %s and %s"
msgstr "%s ja %s omavad konfliktseid assotsiatiivseid väärtuseid"
#: src/reader.c:1853
#, c-format #, c-format
msgid "the start symbol %s is undefined" msgid "the start symbol %s is undefined"
msgstr "stardisümbol %s ei ole defineeritud" msgstr "stardisümbol %s ei ole defineeritud"
#: src/reader.c:1784 #: src/reader.c:1855
#, c-format #, c-format
msgid "the start symbol %s is a token" msgid "the start symbol %s is a token"
msgstr "stardisümbol %s on märk" msgstr "stardisümbol %s on märk"
#: src/reduce.c:401 #: src/reduce.c:409
msgid "Useless nonterminals:" msgid "Useless nonterminals:"
msgstr "Kasutamata mitteterminalid:" msgstr "Kasutamata mitteterminalid:"
#: src/reduce.c:416 #: src/reduce.c:422
msgid "Terminals which are not used:" msgid "Terminals which are not used:"
msgstr "Terminalid, mida ei kasutatud:" msgstr "Terminalid, mida ei kasutatud:"
#: src/reduce.c:427 #: src/reduce.c:433
msgid "Useless rules:" msgid "Useless rules:"
msgstr "Kasutamata reeglid:" msgstr "Kasutamata reeglid:"
#: src/reduce.c:456 #: src/reduce.c:503
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Muutujad\n"
"--------\n"
"\n"
#: src/reduce.c:458
msgid "Value Sprec Sassoc Tag\n"
msgstr "Value Sprec Sassoc Tag\n"
#: src/reduce.c:463
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Reeglid\n"
"-------\n"
"\n"
#: src/reduce.c:474
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"Interpreteeritud reeglid\n"
"------------------------\n"
"\n"
#: src/reduce.c:491
#, c-format #, c-format
msgid "%d rules never reduced\n" msgid "%d rule never reduced\n"
msgstr "%d reeglit ei redutseeritud\n" msgid_plural "%d rules never reduced\n"
msgstr[0] "%d reegel ei redutseeru\n"
msgstr[1] "%d reeglit ei redutseeru\n"
#: src/reduce.c:493 #: src/reduce.c:511
#, c-format #, c-format
msgid "%s contains " msgid "%d useless nonterminal"
msgstr "%s sisaldab " msgid_plural "%d useless nonterminals"
msgstr[0] "%d kasutamata mitteterminal"
msgstr[1] "%d kasutamata mitteterminali"
#: src/reduce.c:497 #: src/reduce.c:517
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d kasutamata mitteterminali%s"
#: src/reduce.c:502
msgid " and " msgid " and "
msgstr " ja " msgstr " ja "
#: src/reduce.c:506 #: src/reduce.c:520
#, c-format #, c-format
msgid "%d useless rule%s" msgid "%d useless rule"
msgstr "%d kasutamata reeglit%s" msgid_plural "%d useless rules"
msgstr[0] "%d kasutamata reegel"
msgstr[1] "%d kasutamata reeglit"
#: src/reduce.c:539 #: src/reduce.c:551
#, c-format #, c-format
msgid "Start symbol %s does not derive any sentence" msgid "Start symbol %s does not derive any sentence"
msgstr "Stardisümbolist %s ei tuletata ühtegi lauset" msgstr "Stardisümbolist %s ei tuletata ühtegi lauset"
#: src/reduce.c:552 #: lib/getopt.c:694
#, c-format
msgid ""
"reduced %s defines %d terminal%s, %d nonterminal%s, and %d production%s.\n"
msgstr ""
"redutseeritud %s defineerib %d terminali%s, %d mitteterminali%s ja %d reeglit"
"%s.\n"
#: lib/getopt.c:675
#, c-format #, c-format
msgid "%s: option `%s' is ambiguous\n" msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: võti `%s' on segane\n" msgstr "%s: võti `%s' on segane\n"
#: lib/getopt.c:700 #: lib/getopt.c:719
#, c-format #, c-format
msgid "%s: option `--%s' doesn't allow an argument\n" msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: võti `--%s' ei luba argumenti\n" msgstr "%s: võti `--%s' ei luba argumenti\n"
#: lib/getopt.c:705 #: lib/getopt.c:724
#, c-format #, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n" msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: võti `%c%s' ei luba argumenti\n" msgstr "%s: võti `%c%s' ei luba argumenti\n"
#: lib/getopt.c:723 lib/getopt.c:896 #: lib/getopt.c:742 lib/getopt.c:915
#, c-format #, c-format
msgid "%s: option `%s' requires an argument\n" msgid "%s: option `%s' requires an argument\n"
msgstr "%s: võti `%s' nõuab argumenti\n" msgstr "%s: võti `%s' nõuab argumenti\n"
#. --option #. --option
#: lib/getopt.c:752 #: lib/getopt.c:771
#, c-format #, c-format
msgid "%s: unrecognized option `--%s'\n" msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: tundmatu võti `--%s'\n" msgstr "%s: tundmatu võti `--%s'\n"
#. +option or -option #. +option or -option
#: lib/getopt.c:756 #: lib/getopt.c:775
#, c-format #, c-format
msgid "%s: unrecognized option `%c%s'\n" msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: tundmatu võti `%c%s'\n" msgstr "%s: tundmatu võti `%c%s'\n"
#. 1003.2 specifies the format of this message. #. 1003.2 specifies the format of this message.
#: lib/getopt.c:782 #: lib/getopt.c:801
#, c-format #, c-format
msgid "%s: illegal option -- %c\n" msgid "%s: illegal option -- %c\n"
msgstr "%s: lubamatu võti -- %c\n" msgstr "%s: lubamatu võti -- %c\n"
#: lib/getopt.c:785 #: lib/getopt.c:804
#, c-format #, c-format
msgid "%s: invalid option -- %c\n" msgid "%s: invalid option -- %c\n"
msgstr "%s: vigane võti -- %c\n" msgstr "%s: vigane võti -- %c\n"
#. 1003.2 specifies the format of this message. #. 1003.2 specifies the format of this message.
#: lib/getopt.c:815 lib/getopt.c:945 #: lib/getopt.c:834 lib/getopt.c:964
#, c-format #, c-format
msgid "%s: option requires an argument -- %c\n" msgid "%s: option requires an argument -- %c\n"
msgstr "%s: võti nõuab argumenti -- %c\n" msgstr "%s: võti nõuab argumenti -- %c\n"
#: lib/getopt.c:862 #: lib/getopt.c:881
#, c-format #, c-format
msgid "%s: option `-W %s' is ambiguous\n" msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: võti `-W %s' on segane\n" msgstr "%s: võti `-W %s' on segane\n"
#: lib/getopt.c:880 #: lib/getopt.c:899
#, c-format #, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n" msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: võti `-W %s' ei luba argumenti\n" msgstr "%s: võti `-W %s' ei luba argumenti\n"
#. If XALLOC_FAIL_FUNC is NULL, or does return, display this message #. If XALLOC_FAIL_FUNC is NULL, or does return, display this message
#. before exiting when memory is exhausted. Goes through gettext. #. before exiting when memory is exhausted. Goes through gettext.
#: lib/obstack.c:477 lib/xmalloc.c:66 #: lib/obstack.c:494 lib/obstack.c:497 lib/xmalloc.c:66
msgid "memory exhausted" msgid "memory exhausted"
msgstr "mälu on otsas" msgstr "mälu on otsas"
@@ -783,19 +750,10 @@ msgstr "m
#. MARK). A British English Unicode locale should instead #. MARK). A British English Unicode locale should instead
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and #. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. #. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
#: lib/quotearg.c:268 #: lib/quotearg.c:274
msgid "`" msgid "`"
msgstr "`" msgstr "`"
#: lib/quotearg.c:269 #: lib/quotearg.c:275
msgid "'" msgid "'"
msgstr "'" msgstr "'"
#~ msgid "\t\t/* empty */"
#~ msgstr "\t\t/* tühi */"
#~ msgid "multiple %%header_extension declarations"
#~ msgstr "korduvad %%header_extension eklaratsioonid"
#~ msgid "multiple %%source_extension declarations"
#~ msgstr "korduvad %%source_extension deklaratsioonid"
BIN
View File
Binary file not shown.
+268 -247
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+351 -334
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+266 -243
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+257 -237
View File
File diff suppressed because it is too large Load Diff
+768
View File
@@ -0,0 +1,768 @@
# Swedish messages for bison.
# Copyright © 2001 Free Software Foundation, Inc.
# Göran Uddeborg <[email protected]>, 2001.
# $Revision$
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.30f\n"
"POT-Creation-Date: 2002-01-11 14:38+0100\n"
"PO-Revision-Date: 2001-12-06 22:33+0100\n"
"Last-Translator: Göran Uddeborg <[email protected]>\n"
"Language-Team: Swedish <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/LR0.c:189
#, c-format
msgid "too many states (max %d)"
msgstr "för många tillstånd (max %d)"
#: lib/error.c:128 lib/error.c:156 src/complain.c:99
msgid "Unknown system error"
msgstr "Okänt systemfel"
#: src/complain.c:150
msgid "warning: "
msgstr "varning: "
#: src/complain.c:238
msgid "fatal error: "
msgstr "ödesdigert fel: "
#: src/conflicts.c:44
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr ""
"Konflikt i tillstånd %d mellan regel %d och element %s, löstes med %s.\n"
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "reducera"
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "skifta"
#: src/conflicts.c:123
msgid "an error"
msgstr "ett fel"
#: src/conflicts.c:302
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d skifta/reducerakonflikt"
msgstr[1] "%d skifta/reducerakonflikter"
#: src/conflicts.c:309
msgid "and"
msgstr "och"
#: src/conflicts.c:315
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d reducera/reducerakonflikt"
msgstr[1] "%d reducera/reducerakonflikter"
#: src/conflicts.c:340
#, c-format
msgid "State %d contains "
msgstr "Tillstånd %d innehåller "
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "konflikter: "
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d skifta/reducera"
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d reducera/reducera"
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s innehåller "
#: src/conflicts.c:412
#, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] "förväntade %d skifta/reducerakonflikt\n"
msgstr[1] "förväntade %d skifta/reducerakonflikter\n"
#: src/conflicts.c:463 src/conflicts.c:540
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[reducera med regel %d (%s)]\n"
#: src/conflicts.c:467 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
"\n"
msgstr ""
" $standard\treducera med regel %d (%s)\n"
"\n"
#: src/conflicts.c:521 src/conflicts.c:534
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\treducera med regel %d (%s)\n"
#: src/conflicts.c:550
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $standard\treducera med regel %d (%s)\n"
#: src/files.c:150
#, c-format
msgid "cannot open file `%s'"
msgstr "kan inte öppna filen \"%s\""
#: src/files.c:169
msgid "cannot close file"
msgstr "kan inte stänga fil"
#. Some efforts were made to ease the translators' task, please
#. continue.
#: src/getargs.c:84
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison genererar parsrar för LALR(1)-grammatiker.\n"
#: src/getargs.c:88
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Användning: %s [FLAGGA]... FIL\n"
#: src/getargs.c:92
msgid ""
"If a long option shows an argument as mandatory, then it is mandatory\n"
"for the equivalent short option also. Similarly for optional arguments.\n"
msgstr ""
"Om en lång flagga visar ett argument som obligatoriskt är det\n"
"obligatoriskt för den motsvarande korta flaggan också. Motsvarande\n"
"för valfria argument.\n"
#: src/getargs.c:98
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
" -V, --version output version information and exit\n"
" -y, --yacc emulate POSIX yacc\n"
msgstr ""
"Arbetslägen:\n"
" -h, --help visa denna hjälptext och avsluta\n"
" -V, --version visa versionsinformation och avsluta\n"
" -y, --yacc emulera POSIX-yacc\n"
#: src/getargs.c:105
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
" -t, --debug instrument the parser for debugging\n"
" --locations enable locations computation\n"
" -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n"
" -l, --no-lines don't generate `#line' directives\n"
" -n, --no-parser generate the tables only\n"
" -k, --token-table include a table of token names\n"
msgstr ""
"Tolk:\n"
" -S, --skeleton=FIL ange skelettfilen som skall användas\n"
" -t, --debug instrumentera tolken för felsökning\n"
" --locations aktivera lägesberäkning\n"
" -p, --name-prefix=PREFIX lägg till PREFIX före externa symboler\n"
" -l, --no-lines generera inte \"#line\"-direktiv\n"
" -n, --no-parser generera endast tabellerna\n"
" -k, --token-table inkludera en tabell över elementnamn\n"
#: src/getargs.c:117
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
" -v, --verbose also produce an explanation of the automaton\n"
" -b, --file-prefix=PREFIX specify a PREFIX for output files\n"
" -o, --output=FILE leave output to FILE\n"
" -g, --graph also produce a VCG description of the "
"automaton\n"
msgstr ""
"Utdata:\n"
" -d, --defines skapa också en huvudfil\n"
" -v, --verbose skapa också en förklaring av automaten\n"
" -b, --file-prefix=PREFIX ange ett PREFIX för utdatafiler\n"
" -o, --output=FIL lägg utdata i FIL\n"
" -g, --graph skapa också en VCG-beskrivning av automaten\n"
#: src/getargs.c:127
msgid "Report bugs to <[email protected]>.\n"
msgstr ""
"Rapportera fel till <[email protected]>.\n"
"Rapportera anmärkningar på översättningen till <[email protected]>.\n"
#. Some efforts were made to ease the translators' task, please
#. continue.
#: src/getargs.c:141
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:146
msgid ""
"Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"
msgstr ""
"Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"
#: src/getargs.c:150
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
msgstr ""
"Detta är fri programvara, se källkoden för kopieringsvillkor. Det\n"
"finns INGEN garanti, inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR ETT\n"
"SPECIELLT ÄNDAMÅL.\n"
#: src/getargs.c:223 src/lex.c:694
#, c-format
msgid "`%s' is no longer supported"
msgstr "\"%s\" stöds inte längre"
#: src/getargs.c:247
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Försök med \"%s --help\" för mer information.\n"
#: src/getargs.c:254
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: ingen grammatikfil angiven\n"
#: src/getargs.c:258
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: extra argument ignorerade efter \"%s\"\n"
#: src/lalr.c:256
#, c-format
msgid "too many gotos (max %d)"
msgstr "för många goto (max %d)"
#: src/lex.c:76
msgid "unexpected `/' found and ignored"
msgstr "oväntat \"/\" hittat och ignorerat"
#: src/lex.c:105 src/reader.c:280
msgid "unterminated comment"
msgstr "oavslutad kommentar"
#: src/lex.c:137
msgid "unexpected end of file"
msgstr "oväntat filslut"
#: src/lex.c:166
msgid "unescaped newline in constant"
msgstr "oskyddat nyradstecken i konstant"
#: src/lex.c:208
#, c-format
msgid "octal value outside range 0...255: `\\%o'"
msgstr "oktalt värde utanför intervallet 0-255: \"\\%o\""
#: src/lex.c:233
#, c-format
msgid "hexadecimal value above 255: `\\x%x'"
msgstr "hexadecimalt värde över 255: \"\\x%x\""
#: src/lex.c:245
#, c-format
msgid "unknown escape sequence: `\\' followed by `%s'"
msgstr "okänd specialsekvens: \"\\\" följt av \"%s\""
#: src/lex.c:342
msgid "unterminated type name at end of file"
msgstr "oavslutat typnamn vid filslut"
#: src/lex.c:345
msgid "unterminated type name"
msgstr "oavslutat typnamn"
#: src/lex.c:438
msgid "use \"...\" for multi-character literal tokens"
msgstr "använd \"...\" för bokstavliga element med mer än ett tecken"
#: src/lex.c:667
#, c-format
msgid "`%s' supports no argument: %s"
msgstr "\"%s\" stödjer inga argument: %s"
#: src/lex.c:683
#, c-format
msgid "`%s' requires an argument"
msgstr "\"%s\" behöver ett argument"
#: src/output.c:951
#, c-format
msgid "maximum table size (%d) exceeded"
msgstr "maximal tabellstorlek (%d) överskriden"
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " typ %d är %s\n"
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (regel %d)"
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $standard\tacceptera\n"
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " INGA ÅTGÄRDER\n"
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tgå till tillstånd %d\n"
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tskifta, och gå till tillstånd %d\n"
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tfel (ickeassociativ)\n"
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tgå till tillstånd %d\n"
#: src/print.c:180
#, c-format
msgid "state %d"
msgstr "tillstånd %d"
#. rule # : LHS -> RHS
#: src/print.c:211
msgid "Grammar"
msgstr "Grammatik"
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr "Nummer, Rad, Regel"
#: src/print.c:217
#, c-format
msgid " %3d %3d %s ->"
msgstr " %3d %3d %s ->"
#: src/print.c:224
msgid "empty"
msgstr "tom"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:231
msgid "Terminals, with rules where they appear"
msgstr "Terminaler, med regler där de förekommer"
#: src/print.c:256
msgid "Nonterminals, with rules where they appear"
msgstr "Icketerminaler, med regler där de förekommer"
#: src/print.c:282
msgid " on left:"
msgstr " till vänster:"
#: src/print.c:297
msgid " on right:"
msgstr " till höger:"
#. If something has been added in the NODE_OBSTACK after
#. the declaration of the label, then we need a `\n'.
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:146
#, c-format
msgid "%-4s\terror (nonassociative)"
msgstr "%-4s\tfel (ickeassociativ)"
#.
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:161
#, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr "$standard\treducera med regel %d (%s)"
#: src/reader.c:89
msgid " Skipping to next \\n"
msgstr " Hoppar över till nästa \\n"
#: src/reader.c:91
#, c-format
msgid " Skipping to next %c"
msgstr " Hoppar över till nästa %c"
#: src/reader.c:142 src/reader.c:154
msgid "invalid $ value"
msgstr "felaktigt $-värde"
#: src/reader.c:180 src/reader.c:195
msgid "unterminated string at end of file"
msgstr "oavslutad sträng vid filslut"
#: src/reader.c:183
msgid "unterminated string"
msgstr "oavslutad sträng"
#: src/reader.c:336 src/reader.c:400
#, c-format
msgid "%s is invalid"
msgstr "%s är felaktigt"
#: src/reader.c:376
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ för \"%s\" har ingen deklarerad typ"
#: src/reader.c:393
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d för \"%s\" har ingen deklarerad typ"
#: src/reader.c:447
msgid "unterminated `%{' definition"
msgstr "oavslutad \"%{\"-definition"
#: src/reader.c:492 src/reader.c:607 src/reader.c:657
#, c-format
msgid "Premature EOF after %s"
msgstr "Förtida filslut efter %s"
#: src/reader.c:509
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "symbolen \"%s\" används mer än en gång som en bokstavlig sträng"
#: src/reader.c:512
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "symbolen \"%s\" har fått mer än en bokstavlig sträng"
#: src/reader.c:533 src/reader.c:676
#, c-format
msgid "symbol %s redefined"
msgstr "symbolen %s omdefinierad"
#: src/reader.c:543 src/reader.c:622 src/reader.c:683 src/reader.c:1298
#, c-format
msgid "type redeclaration for %s"
msgstr "typen omdeklarerad för %s"
#: src/reader.c:552
#, c-format
msgid "`%s' is invalid in %s"
msgstr "\"%s\" är felaktig i %s"
#: src/reader.c:570 src/reader.c:735
#, c-format
msgid "multiple %s declarations"
msgstr "flera %s-deklarationer"
#: src/reader.c:572 src/reader.c:914 src/reader.c:939 src/reader.c:1276
#, c-format
msgid "invalid %s declaration"
msgstr "felaktig %s-deklaration"
#: src/reader.c:592
msgid "%type declaration has no <typename>"
msgstr "%type-deklaration har inget <typnamn>"
#: src/reader.c:627
#, c-format
msgid "invalid %%type declaration due to item: %s"
msgstr "felaktig %%type-deklaration på grund av objekt: %s"
#: src/reader.c:672
#, c-format
msgid "redefining precedence of %s"
msgstr "omdefinition av precedens för %s"
#: src/reader.c:695
#, c-format
msgid "invalid text (%s) - number should be after identifier"
msgstr "felaktig text (%s) - tal skulle följa efter identifierare"
#: src/reader.c:705
#, c-format
msgid "unexpected item: %s"
msgstr "oväntat objekt: %s"
#: src/reader.c:778 src/reader.c:1110 src/reader.c:1187
#, c-format
msgid "unmatched %s"
msgstr "ensam %s"
#: src/reader.c:810
#, c-format
msgid "argument of %%expect is not an integer"
msgstr "argument till %%expect är inte ett heltal"
#: src/reader.c:856
#, c-format
msgid "unrecognized item %s, expected an identifier"
msgstr "oväntat objekt %s, förväntade en identifierare"
#: src/reader.c:878
#, c-format
msgid "expected string constant instead of %s"
msgstr "förväntade strängkonstant istället för %s"
#: src/reader.c:1026
#, c-format
msgid "unrecognized: %s"
msgstr "okänt: %s"
#: src/reader.c:1031
msgid "no input grammar"
msgstr "ingen ingrammatik"
#: src/reader.c:1036
#, c-format
msgid "unknown character: %s"
msgstr "okänt tecken: %s"
#: src/reader.c:1210
#, c-format
msgid "unterminated %guard clause"
msgstr "oavlutad %guard-sats"
#: src/reader.c:1363
msgid "ill-formed rule: initial symbol not followed by colon"
msgstr "felskriven regel: första symbolen följs inte av ett kolon"
#: src/reader.c:1370
msgid "grammar starts with vertical bar"
msgstr "grammatiken startar med ett vertikalt streck"
#: src/reader.c:1398
#, c-format
msgid "rule given for %s, which is a token"
msgstr "regel given för %s, som är ett element"
#: src/reader.c:1498
msgid "two @prec's in a row"
msgstr "två @prec i rad"
#: src/reader.c:1506
#, c-format
msgid "%%guard present but %%semantic_parser not specified"
msgstr "%%guard finns men %%semantic_parser är inte angiven"
#: src/reader.c:1515
msgid "two actions at end of one rule"
msgstr "två åtgärder vid slutet av en regel"
#: src/reader.c:1529
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "typkonflikt (\"%s\" \"%s\") för standardåtgärd"
#: src/reader.c:1535
msgid "empty rule for typed nonterminal, and no action"
msgstr "tom regel för typad icketerminal, och ingen åtgärd"
#: src/reader.c:1579
#, c-format
msgid "invalid input: %s"
msgstr "felaktig indata: %s"
#: src/reader.c:1587
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "för många symboler (element plus icketerminaler); max %d"
#: src/reader.c:1590
msgid "no rules in the input grammar"
msgstr "inga regler i ingrammatiken"
#: src/reader.c:1614
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"symbolen %s används, men är inte definierad som ett element och har inga "
"regler"
#: src/reader.c:1749
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "elementen %s och %s har båda fått nummer %d"
#: src/reader.c:1802
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "motstridiga precedenser mellan %s och %s"
#: src/reader.c:1814
#, c-format
msgid "conflicting assoc values for %s and %s"
msgstr "motstridiga assoc-värden mellan %s och %s"
#: src/reader.c:1853
#, c-format
msgid "the start symbol %s is undefined"
msgstr "startsymbolen %s är odefinierad"
#: src/reader.c:1855
#, c-format
msgid "the start symbol %s is a token"
msgstr "startsymbolen %s är ett element"
#: src/reduce.c:409
msgid "Useless nonterminals:"
msgstr "Oanvändbara icketerminaler:"
#: src/reduce.c:422
msgid "Terminals which are not used:"
msgstr "Terminaler som inte används:"
#: src/reduce.c:433
msgid "Useless rules:"
msgstr "Oanvändbara regler:"
#: src/reduce.c:503
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d regel reduceras aldrig\n"
msgstr[1] "%d regler reduceras aldrig\n"
#: src/reduce.c:511
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d oanvändbar icketerminal"
msgstr[1] "%d oanvändbara icketerminaler"
#: src/reduce.c:517
msgid " and "
msgstr " och "
#: src/reduce.c:520
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d oanvändbar regel"
msgstr[1] "%d oanvändbara regler"
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "Startsymbolen %s genererar inga meningar"
#: lib/getopt.c:694
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: flaggan \"%s\" är tvetydig\n"
#: lib/getopt.c:719
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: flaggan \"--%s\" tar inget argument\n"
#: lib/getopt.c:724
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: flaggan \"%c%s\" tar inget argument\n"
#: lib/getopt.c:742 lib/getopt.c:915
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: flaggan \"%s\" behöver ett argument\n"
#. --option
#: lib/getopt.c:771
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: okänd flagga \"--%s\"\n"
#. +option or -option
#: lib/getopt.c:775
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: okänd flagga \"%c%s\"\n"
#. 1003.2 specifies the format of this message.
#: lib/getopt.c:801
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: otillåten flagga -- %c\n"
#: lib/getopt.c:804
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: ogiltig flagga --%c\n"
#. 1003.2 specifies the format of this message.
#: lib/getopt.c:834 lib/getopt.c:964
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: flaggan behöver ett argument -- %c\n"
#: lib/getopt.c:881
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: flaggan \"-W %s\" är tvetydig\n"
#: lib/getopt.c:899
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
#. If XALLOC_FAIL_FUNC is NULL, or does return, display this message
#. before exiting when memory is exhausted. Goes through gettext.
#: lib/obstack.c:494 lib/obstack.c:497 lib/xmalloc.c:66
msgid "memory exhausted"
msgstr "minnet slut"
# När vi går över till Unicode mer allmänt kanske vi bör översätta båda dessa
# med U+201D (RIGHT DOUBLE QUOTATION MARK) på svenska. Eller?
#
#. Get translations for open and closing quotation marks.
#.
#. The message catalog should translate "`" to a left
#. quotation mark suitable for the locale, and similarly for
#. "'". If the catalog has no translation,
#. locale_quoting_style quotes `like this', and
#. clocale_quoting_style quotes "like this".
#.
#. For example, an American English Unicode locale should
#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
#. MARK). A British English Unicode locale should instead
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
#: lib/quotearg.c:274
msgid "`"
msgstr "\""
#: lib/quotearg.c:275
msgid "'"
msgstr "\""
+229 -302
View File
File diff suppressed because it is too large Load Diff
+200 -288
View File
@@ -1,5 +1,5 @@
/* Generate the nondeterministic finite state machine for bison, /* Generate the nondeterministic finite state machine for bison,
Copyright 1984, 1986, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1986, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -23,12 +23,14 @@
The entry point is generate_states. */ The entry point is generate_states. */
#include "system.h" #include "system.h"
#include "getargs.h"
#include "reader.h"
#include "gram.h" #include "gram.h"
#include "state.h" #include "state.h"
#include "complain.h" #include "complain.h"
#include "closure.h" #include "closure.h"
#include "LR0.h" #include "LR0.h"
#include "reduce.h"
int nstates; int nstates;
int final_state; int final_state;
@@ -48,7 +50,7 @@ static short *redset = NULL;
static short *shiftset = NULL; static short *shiftset = NULL;
static short **kernel_base = NULL; static short **kernel_base = NULL;
static short **kernel_end = NULL; static int *kernel_size = NULL;
static short *kernel_items = NULL; static short *kernel_items = NULL;
/* hash table for states, to recognize equivalent ones. */ /* hash table for states, to recognize equivalent ones. */
@@ -60,26 +62,21 @@ static core **state_table = NULL;
static void static void
allocate_itemsets (void) allocate_itemsets (void)
{ {
short *itemp = NULL;
int symbol;
int i; int i;
int count;
short *symbol_count = NULL;
count = 0; /* Count the number of occurrences of all the symbols in RITEMS.
symbol_count = XCALLOC (short, nsyms); Note that useless productions (hence useless nonterminals) are
browsed too, hence we need to allocate room for _all_ the
symbols. */
int count = 0;
short *symbol_count = XCALLOC (short, nsyms + nuseless_nonterminals);
itemp = ritem; for (i = 0; ritem[i]; ++i)
symbol = *itemp++; if (ritem[i] > 0)
while (symbol) {
{ count++;
if (symbol > 0) symbol_count[ritem[i]]++;
{ }
count++;
symbol_count[symbol]++;
}
symbol = *itemp++;
}
/* See comments before new_itemsets. All the vectors of items /* See comments before new_itemsets. All the vectors of items
live inside KERNEL_ITEMS. The number of active items after live inside KERNEL_ITEMS. The number of active items after
@@ -98,8 +95,8 @@ allocate_itemsets (void)
count += symbol_count[i]; count += symbol_count[i];
} }
shift_symbol = symbol_count; free (symbol_count);
kernel_end = XCALLOC (short *, nsyms); kernel_size = XCALLOC (int, nsyms);
} }
@@ -117,13 +114,13 @@ allocate_storage (void)
static void static void
free_storage (void) free_storage (void)
{ {
XFREE (shift_symbol); free (shift_symbol);
XFREE (redset); free (redset);
XFREE (shiftset); free (shiftset);
XFREE (kernel_base); free (kernel_base);
XFREE (kernel_end); free (kernel_size);
XFREE (kernel_items); XFREE (kernel_items);
XFREE (state_table); free (state_table);
} }
@@ -137,50 +134,39 @@ free_storage (void)
| shift_symbol is set to a vector of the symbols that can be | | shift_symbol is set to a vector of the symbols that can be |
| shifted. For each symbol in the grammar, kernel_base[symbol] | | shifted. For each symbol in the grammar, kernel_base[symbol] |
| points to a vector of item numbers activated if that symbol is | | points to a vector of item numbers activated if that symbol is |
| shifted, and kernel_end[symbol] points after the end of that | | shifted, and kernel_size[symbol] is their numbers. |
| vector. |
`----------------------------------------------------------------*/ `----------------------------------------------------------------*/
static void static void
new_itemsets (void) new_itemsets (void)
{ {
int i; int i;
int shiftcount;
short *isp;
short *ksp;
int symbol;
#if TRACE if (trace_flag)
fprintf (stderr, "Entering new_itemsets\n"); fprintf (stderr, "Entering new_itemsets, state = %d\n",
#endif this_state->number);
for (i = 0; i < nsyms; i++) for (i = 0; i < nsyms; i++)
kernel_end[i] = NULL; kernel_size[i] = 0;
shiftcount = 0; shift_symbol = XCALLOC (short, nsyms);
nshifts = 0;
isp = itemset; for (i = 0; i < nitemset; ++i)
while (isp < itemsetend)
{ {
i = *isp++; int symbol = ritem[itemset[i]];
symbol = ritem[i];
if (symbol > 0) if (symbol > 0)
{ {
ksp = kernel_end[symbol]; if (!kernel_size[symbol])
if (!ksp)
{ {
shift_symbol[shiftcount++] = symbol; shift_symbol[nshifts] = symbol;
ksp = kernel_base[symbol]; nshifts++;
} }
*ksp++ = i + 1; kernel_base[symbol][kernel_size[symbol]] = itemset[i] + 1;
kernel_end[symbol] = ksp; kernel_size[symbol]++;
} }
} }
nshifts = shiftcount;
} }
@@ -193,36 +179,24 @@ new_itemsets (void)
static core * static core *
new_state (int symbol) new_state (int symbol)
{ {
int n;
core *p; core *p;
short *isp1;
short *isp2;
short *iend;
#if TRACE if (trace_flag)
fprintf (stderr, "Entering new_state, symbol = %d\n", symbol); fprintf (stderr, "Entering new_state, state = %d, symbol = %d (%s)\n",
#endif this_state->number, symbol, tags[symbol]);
if (nstates >= MAXSHORT) if (nstates >= MAXSHORT)
fatal (_("too many states (max %d)"), MAXSHORT); fatal (_("too many states (max %d)"), MAXSHORT);
isp1 = kernel_base[symbol]; p = CORE_ALLOC (kernel_size[symbol]);
iend = kernel_end[symbol];
n = iend - isp1;
p =
(core *) xcalloc ((unsigned) (sizeof (core) + (n - 1) * sizeof (short)), 1);
p->accessing_symbol = symbol; p->accessing_symbol = symbol;
p->number = nstates; p->number = nstates;
p->nitems = n; p->nitems = kernel_size[symbol];
isp2 = p->items; shortcpy (p->items, kernel_base[symbol], kernel_size[symbol]);
while (isp1 < iend)
*isp2++ = *isp1++;
last_state->next = p; last_state->next = p;
last_state = p; last_state = p;
nstates++; nstates++;
return p; return p;
@@ -232,54 +206,39 @@ new_state (int symbol)
/*--------------------------------------------------------------. /*--------------------------------------------------------------.
| Find the state number for the state we would get to (from the | | Find the state number for the state we would get to (from the |
| current state) by shifting symbol. Create a new state if no | | current state) by shifting symbol. Create a new state if no |
| equivalent one exists already. Used by append_states. | | equivalent one exists already. Used by append_states. |
`--------------------------------------------------------------*/ `--------------------------------------------------------------*/
static int static int
get_state (int symbol) get_state (int symbol)
{ {
int key; int key;
short *isp1; int i;
short *isp2;
short *iend;
core *sp; core *sp;
int found;
int n; if (trace_flag)
fprintf (stderr, "Entering get_state, state = %d, symbol = %d (%s)\n",
this_state->number, symbol, tags[symbol]);
#if TRACE /* Add up the target state's active item numbers to get a hash key.
fprintf (stderr, "Entering get_state, symbol = %d\n", symbol); */
#endif
isp1 = kernel_base[symbol];
iend = kernel_end[symbol];
n = iend - isp1;
/* add up the target state's active item numbers to get a hash key */
key = 0; key = 0;
while (isp1 < iend) for (i = 0; i < kernel_size[symbol]; ++i)
key += *isp1++; key += kernel_base[symbol][i];
key = key % STATE_TABLE_SIZE; key = key % STATE_TABLE_SIZE;
sp = state_table[key]; sp = state_table[key];
if (sp) if (sp)
{ {
found = 0; int found = 0;
while (!found) while (!found)
{ {
if (sp->nitems == n) if (sp->nitems == kernel_size[symbol])
{ {
found = 1; found = 1;
isp1 = kernel_base[symbol]; for (i = 0; i < kernel_size[symbol]; ++i)
isp2 = sp->items; if (kernel_base[symbol][i] != sp->items[i])
found = 0;
while (found && isp1 < iend)
{
if (*isp1++ != *isp2++)
found = 0;
}
} }
if (!found) if (!found)
@@ -301,6 +260,9 @@ get_state (int symbol)
state_table[key] = sp = new_state (symbol); state_table[key] = sp = new_state (symbol);
} }
if (trace_flag)
fprintf (stderr, "Exiting get_state => %d\n", sp->number);
return sp->number; return sp->number;
} }
@@ -318,9 +280,9 @@ append_states (void)
int j; int j;
int symbol; int symbol;
#if TRACE if (trace_flag)
fprintf (stderr, "Entering append_states\n"); fprintf (stderr, "Entering append_states, state = %d\n",
#endif this_state->number);
/* first sort shift_symbol into increasing order */ /* first sort shift_symbol into increasing order */
@@ -337,55 +299,36 @@ append_states (void)
} }
for (i = 0; i < nshifts; i++) for (i = 0; i < nshifts; i++)
{ shiftset[i] = get_state (shift_symbol[i]);
symbol = shift_symbol[i];
shiftset[i] = get_state (symbol);
}
} }
static void static void
new_states (void) new_states (void)
{ {
core *p; first_state = last_state = this_state = CORE_ALLOC (0);
p = (core *) xcalloc ((unsigned) (sizeof (core) - sizeof (short)), 1);
first_state = last_state = this_state = p;
nstates = 1; nstates = 1;
} }
/*------------------------------------------------------------.
| Save the NSHIFTS of SHIFTSET into the current linked list. |
`------------------------------------------------------------*/
static void static void
save_shifts (void) save_shifts (void)
{ {
shifts *p; shifts *p = shifts_new (nshifts);
short *sp1;
short *sp2;
short *send;
p = (shifts *) xcalloc ((unsigned) (sizeof (shifts) +
(nshifts - 1) * sizeof (short)), 1);
p->number = this_state->number; p->number = this_state->number;
p->nshifts = nshifts;
sp1 = shiftset; shortcpy (p->shifts, shiftset, nshifts);
sp2 = p->shifts;
send = shiftset + nshifts;
while (sp1 < send)
*sp2++ = *sp1++;
if (last_shift) if (last_shift)
{ last_shift->next = p;
last_shift->next = p;
last_shift = p;
}
else else
{ first_shift = p;
first_shift = p; last_shift = p;
last_shift = p;
}
} }
@@ -400,7 +343,7 @@ insert_start_shift (void)
core *statep; core *statep;
shifts *sp; shifts *sp;
statep = (core *) xcalloc ((unsigned) (sizeof (core) - sizeof (short)), 1); statep = CORE_ALLOC (0);
statep->number = nstates; statep->number = nstates;
statep->accessing_symbol = start_symbol; statep->accessing_symbol = start_symbol;
@@ -408,9 +351,8 @@ insert_start_shift (void)
last_state = statep; last_state = statep;
/* Make a shift from this state to (what will be) the final state. */ /* Make a shift from this state to (what will be) the final state. */
sp = XCALLOC (shifts, 1); sp = shifts_new (1);
sp->number = nstates++; sp->number = nstates++;
sp->nshifts = 1;
sp->shifts[0] = nstates; sp->shifts[0] = nstates;
last_shift->next = sp; last_shift->next = sp;
@@ -429,135 +371,18 @@ insert_start_shift (void)
static void static void
augment_automaton (void) augment_automaton (void)
{ {
int i;
int k;
core *statep; core *statep;
shifts *sp; shifts *sp;
shifts *sp2;
shifts *sp1 = NULL; shifts *sp1 = NULL;
sp = first_shift; sp = first_shift;
if (sp) if (!sp->nshifts)
{ {
if (sp->number == 0) /* There are no shifts for any state. Make one shift, from the
{ initial state to the next-to-final state. */
k = sp->nshifts;
statep = first_state->next;
/* The states reached by shifts from first_state are numbered 1...K. sp = shifts_new (1);
Look for one reached by start_symbol. */
while (statep->accessing_symbol < start_symbol
&& statep->number < k)
statep = statep->next;
if (statep->accessing_symbol == start_symbol)
{
/* We already have a next-to-final state.
Make sure it has a shift to what will be the final state. */
k = statep->number;
while (sp && sp->number < k)
{
sp1 = sp;
sp = sp->next;
}
if (sp && sp->number == k)
{
sp2 = (shifts *) xcalloc ((unsigned) (sizeof (shifts)
+
sp->nshifts *
sizeof (short)), 1);
sp2->number = k;
sp2->nshifts = sp->nshifts + 1;
sp2->shifts[0] = nstates;
for (i = sp->nshifts; i > 0; i--)
sp2->shifts[i] = sp->shifts[i - 1];
/* Patch sp2 into the chain of shifts in place of sp,
following sp1. */
sp2->next = sp->next;
sp1->next = sp2;
if (sp == last_shift)
last_shift = sp2;
XFREE (sp);
}
else
{
sp2 = XCALLOC (shifts, 1);
sp2->number = k;
sp2->nshifts = 1;
sp2->shifts[0] = nstates;
/* Patch sp2 into the chain of shifts between sp1 and sp. */
sp2->next = sp;
sp1->next = sp2;
if (sp == 0)
last_shift = sp2;
}
}
else
{
/* There is no next-to-final state as yet. */
/* Add one more shift in first_shift,
going to the next-to-final state (yet to be made). */
sp = first_shift;
sp2 = (shifts *) xcalloc (sizeof (shifts)
+ sp->nshifts * sizeof (short), 1);
sp2->nshifts = sp->nshifts + 1;
/* Stick this shift into the vector at the proper place. */
statep = first_state->next;
for (k = 0, i = 0; i < sp->nshifts; k++, i++)
{
if (statep->accessing_symbol > start_symbol && i == k)
sp2->shifts[k++] = nstates;
sp2->shifts[k] = sp->shifts[i];
statep = statep->next;
}
if (i == k)
sp2->shifts[k++] = nstates;
/* Patch sp2 into the chain of shifts
in place of sp, at the beginning. */
sp2->next = sp->next;
first_shift = sp2;
if (last_shift == sp)
last_shift = sp2;
XFREE (sp);
/* Create the next-to-final state, with shift to
what will be the final state. */
insert_start_shift ();
}
}
else
{
/* The initial state didn't even have any shifts.
Give it one shift, to the next-to-final state. */
sp = XCALLOC (shifts, 1);
sp->nshifts = 1;
sp->shifts[0] = nstates;
/* Patch sp into the chain of shifts at the beginning. */
sp->next = first_shift;
first_shift = sp;
/* Create the next-to-final state, with shift to
what will be the final state. */
insert_start_shift ();
}
}
else
{
/* There are no shifts for any state.
Make one shift, from the initial state to the next-to-final state. */
sp = XCALLOC (shifts, 1);
sp->nshifts = 1;
sp->shifts[0] = nstates; sp->shifts[0] = nstates;
/* Initialize the chain of shifts with sp. */ /* Initialize the chain of shifts with sp. */
@@ -568,19 +393,121 @@ augment_automaton (void)
what will be the final state. */ what will be the final state. */
insert_start_shift (); insert_start_shift ();
} }
else if (sp->number == 0)
{
statep = first_state->next;
/* The states reached by shifts from FIRST_STATE are numbered
1..(SP->NSHIFTS). Look for one reached by START_SYMBOL. */
while (statep->accessing_symbol < start_symbol
&& statep->number < sp->nshifts)
statep = statep->next;
if (statep->accessing_symbol == start_symbol)
{
/* We already have a next-to-final state.
Make sure it has a shift to what will be the final state. */
while (sp && sp->number < statep->number)
{
sp1 = sp;
sp = sp->next;
}
if (sp && sp->number == statep->number)
{
int i;
shifts *sp2 = shifts_new (sp->nshifts + 1);
sp2->number = statep->number;
sp2->shifts[0] = nstates;
for (i = sp->nshifts; i > 0; i--)
sp2->shifts[i] = sp->shifts[i - 1];
/* Patch sp2 into the chain of shifts in place of sp,
following sp1. */
sp2->next = sp->next;
sp1->next = sp2;
if (sp == last_shift)
last_shift = sp2;
XFREE (sp);
}
else
{
shifts *sp2 = shifts_new (1);
sp2->number = statep->number;
sp2->shifts[0] = nstates;
/* Patch sp2 into the chain of shifts between sp1 and sp. */
sp2->next = sp;
sp1->next = sp2;
if (sp == 0)
last_shift = sp2;
}
}
else
{
int i, k;
shifts *sp2;
/* There is no next-to-final state as yet. */
/* Add one more shift in first_shift,
going to the next-to-final state (yet to be made). */
sp = first_shift;
sp2 = shifts_new (sp->nshifts + 1);
/* Stick this shift into the vector at the proper place. */
statep = first_state->next;
for (k = 0, i = 0; i < sp->nshifts; k++, i++)
{
if (statep->accessing_symbol > start_symbol && i == k)
sp2->shifts[k++] = nstates;
sp2->shifts[k] = sp->shifts[i];
statep = statep->next;
}
if (i == k)
sp2->shifts[k++] = nstates;
/* Patch sp2 into the chain of shifts
in place of sp, at the beginning. */
sp2->next = sp->next;
first_shift = sp2;
if (last_shift == sp)
last_shift = sp2;
XFREE (sp);
/* Create the next-to-final state, with shift to
what will be the final state. */
insert_start_shift ();
}
}
else
{
/* The initial state didn't even have any shifts.
Give it one shift, to the next-to-final state. */
sp = shifts_new (1);
sp->shifts[0] = nstates;
/* Patch sp into the chain of shifts at the beginning. */
sp->next = first_shift;
first_shift = sp;
/* Create the next-to-final state, with shift to
what will be the final state. */
insert_start_shift ();
}
/* Make the final state--the one that follows a shift from the /* Make the final state--the one that follows a shift from the
next-to-final state. next-to-final state.
The symbol for that shift is 0 (end-of-file). */ The symbol for that shift is 0 (end-of-file). */
statep = (core *) xcalloc ((unsigned) (sizeof (core) - sizeof (short)), 1); statep = CORE_ALLOC (0);
statep->number = nstates; statep->number = nstates;
last_state->next = statep; last_state->next = statep;
last_state = statep; last_state = statep;
/* Make the shift from the final state to the termination state. */ /* Make the shift from the final state to the termination state. */
sp = XCALLOC (shifts, 1); sp = shifts_new (1);
sp->number = nstates++; sp->number = nstates++;
sp->nshifts = 1;
sp->shifts[0] = nstates; sp->shifts[0] = nstates;
last_shift->next = sp; last_shift->next = sp;
last_shift = sp; last_shift = sp;
@@ -590,7 +517,7 @@ augment_automaton (void)
final_state = nstates; final_state = nstates;
/* Make the termination state. */ /* Make the termination state. */
statep = (core *) xcalloc ((unsigned) (sizeof (core) - sizeof (short)), 1); statep = CORE_ALLOC (0);
statep->number = nstates++; statep->number = nstates++;
last_state->next = statep; last_state->next = statep;
last_state = statep; last_state = statep;
@@ -606,21 +533,15 @@ augment_automaton (void)
static void static void
save_reductions (void) save_reductions (void)
{ {
short *isp;
short *rp1;
short *rp2;
int item;
int count; int count;
reductions *p; int i;
short *rend;
/* Find and count the active items that represent ends of rules. */ /* Find and count the active items that represent ends of rules. */
count = 0; count = 0;
for (isp = itemset; isp < itemsetend; isp++) for (i = 0; i < nitemset; ++i)
{ {
item = ritem[*isp]; int item = ritem[itemset[i]];
if (item < 0) if (item < 0)
redset[count++] = -item; redset[count++] = -item;
} }
@@ -629,29 +550,18 @@ save_reductions (void)
if (count) if (count)
{ {
p = (reductions *) xcalloc ((unsigned) (sizeof (reductions) + reductions *p = REDUCTIONS_ALLOC (count);
(count - 1) * sizeof (short)), 1);
p->number = this_state->number; p->number = this_state->number;
p->nreds = count; p->nreds = count;
rp1 = redset; shortcpy (p->rules, redset, count);
rp2 = p->rules;
rend = rp1 + count;
for (/* nothing */; rp1 < rend; ++rp1, ++rp2)
*rp2 = *rp1;
if (last_reduction) if (last_reduction)
{ last_reduction->next = p;
last_reduction->next = p;
last_reduction = p;
}
else else
{ first_reduction = p;
first_reduction = p; last_reduction = p;
last_reduction = p;
}
} }
} }
@@ -670,6 +580,9 @@ generate_states (void)
while (this_state) while (this_state)
{ {
if (trace_flag)
fprintf (stderr, "Processing state %d (reached by %s)\n",
this_state->number, tags[this_state->accessing_symbol]);
/* Set up ruleset and itemset for the transitions out of this /* Set up ruleset and itemset for the transitions out of this
state. ruleset gets a 1 bit for each rule that could reduce state. ruleset gets a 1 bit for each rule that could reduce
now. itemset gets a vector of all the items that could be now. itemset gets a vector of all the items that could be
@@ -684,8 +597,7 @@ generate_states (void)
/* create the shifts structures for the shifts to those states, /* create the shifts structures for the shifts to those states,
now that the state numbers transitioning to are known */ now that the state numbers transitioning to are known */
if (nshifts > 0) save_shifts ();
save_shifts ();
/* states are queued when they are created; process them all */ /* states are queued when they are created; process them all */
this_state = this_state->next; this_state = this_state->next;
+31 -6
View File
@@ -1,19 +1,45 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*- ## Copyright 2001, 2002 Free Software Foundation, Inc.
AUTOMAKE_OPTIONS = 1.4 ../lib/ansi2knr
## 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
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## This program 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 this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
## 02111-1307 USA
AUTOMAKE_OPTIONS = ../lib/ansi2knr
DEFS = @DEFS@ \ DEFS = @DEFS@ \
-DBISON_SIMPLE=\"$(pkgdatadir)/bison.simple\" \ -DBISON_SIMPLE=\"$(pkgdatadir)/bison.simple\" \
-DBISON_HAIRY=\"$(pkgdatadir)/bison.hairy\" \ -DBISON_HAIRY=\"$(pkgdatadir)/bison.hairy\" \
-DLOCALEDIR=\"$(datadir)/locale\" -DLOCALEDIR=\"$(datadir)/locale\"
INCLUDES = -I../intl -I$(top_srcdir)/lib -I.. CFLAGS = @CFLAGS@ $(WARNING_CFLAGS) $(WERROR_CFLAGS)
LDADD = @INTLLIBS@ ../lib/libbison.a
# libintl.h in is build/intl, intl/libgettext.h in src/,
# config.h in build/.
INCLUDES = -I$(top_builddir)/intl \
-I$(top_builddir) \
-I$(top_srcdir)/intl \
-I$(top_srcdir)/lib
LDADD = $(INTLLIBS) ../lib/libbison.a
bin_PROGRAMS = bison bin_PROGRAMS = bison
bison_SOURCES = LR0.c closure.c complain.c conflicts.c \ bison_SOURCES = LR0.c closure.c complain.c conflicts.c \
derives.c \ derives.c \
files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \ files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
output.c \ output.h output.c \
state.h state.c \
print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c
EXTRA_bison_SOURCES = vmsgetargs.c EXTRA_bison_SOURCES = vmsgetargs.c
@@ -21,7 +47,6 @@ EXTRA_bison_SOURCES = vmsgetargs.c
noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \ noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \
derives.h \ derives.h \
files.h getargs.h gram.h lalr.h lex.h nullable.h \ files.h getargs.h gram.h lalr.h lex.h nullable.h \
output.h state.h \
print.h reader.h reduce.h symtab.h warshall.h system.h types.h \ print.h reader.h reduce.h symtab.h warshall.h system.h types.h \
vcg.h vcg_defaults.h print_graph.h vcg.h vcg_defaults.h print_graph.h
+43 -29
View File
@@ -1,4 +1,5 @@
# Makefile.in generated automatically by automake 1.5a from Makefile.am. # Makefile.in generated by automake 1.5c from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
@@ -12,7 +13,6 @@
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@ @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
@@ -47,6 +47,7 @@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA) INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@ transform = @program_transform_name@
@@ -83,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@ INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@ INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LIB = @LIB@
LIBICONV = @LIBICONV@ LIBICONV = @LIBICONV@
LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@ MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@ MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
@@ -96,26 +97,38 @@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@ USE_NLS = @USE_NLS@
VERSION = @VERSION@ VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CFLAGS = @WARNING_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
am__include = @am__include@ am__include = @am__include@
am__quote = @am__quote@ am__quote = @am__quote@
install_sh = @install_sh@ install_sh = @install_sh@
AUTOMAKE_OPTIONS = 1.4 ../lib/ansi2knr AUTOMAKE_OPTIONS = ../lib/ansi2knr
DEFS = @DEFS@ \ DEFS = @DEFS@ \
-DBISON_SIMPLE=\"$(pkgdatadir)/bison.simple\" \ -DBISON_SIMPLE=\"$(pkgdatadir)/bison.simple\" \
-DBISON_HAIRY=\"$(pkgdatadir)/bison.hairy\" \ -DBISON_HAIRY=\"$(pkgdatadir)/bison.hairy\" \
-DLOCALEDIR=\"$(datadir)/locale\" -DLOCALEDIR=\"$(datadir)/locale\"
INCLUDES = -I../intl -I$(top_srcdir)/lib -I.. CFLAGS = @CFLAGS@ $(WARNING_CFLAGS) $(WERROR_CFLAGS)
LDADD = @INTLLIBS@ ../lib/libbison.a
# libintl.h in is build/intl, intl/libgettext.h in src/,
# config.h in build/.
INCLUDES = -I$(top_builddir)/intl \
-I$(top_builddir) \
-I$(top_srcdir)/intl \
-I$(top_srcdir)/lib
LDADD = $(INTLLIBS) ../lib/libbison.a
bin_PROGRAMS = bison bin_PROGRAMS = bison
bison_SOURCES = LR0.c closure.c complain.c conflicts.c \ bison_SOURCES = LR0.c closure.c complain.c conflicts.c \
derives.c \ derives.c \
files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \ files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
output.c \ output.h output.c \
state.h state.c \
print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c
@@ -124,7 +137,6 @@ EXTRA_bison_SOURCES = vmsgetargs.c
noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \ noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \
derives.h \ derives.h \
files.h getargs.h gram.h lalr.h lex.h nullable.h \ files.h getargs.h gram.h lalr.h lex.h nullable.h \
output.h state.h \
print.h reader.h reduce.h symtab.h warshall.h system.h types.h \ print.h reader.h reduce.h symtab.h warshall.h system.h types.h \
vcg.h vcg_defaults.h print_graph.h vcg.h vcg_defaults.h print_graph.h
@@ -143,9 +155,10 @@ am_bison_OBJECTS = LR0$U.$(OBJEXT) closure$U.$(OBJEXT) \
complain$U.$(OBJEXT) conflicts$U.$(OBJEXT) derives$U.$(OBJEXT) \ complain$U.$(OBJEXT) conflicts$U.$(OBJEXT) derives$U.$(OBJEXT) \
files$U.$(OBJEXT) getargs$U.$(OBJEXT) gram$U.$(OBJEXT) \ files$U.$(OBJEXT) getargs$U.$(OBJEXT) gram$U.$(OBJEXT) \
lalr$U.$(OBJEXT) lex$U.$(OBJEXT) main$U.$(OBJEXT) \ lalr$U.$(OBJEXT) lex$U.$(OBJEXT) main$U.$(OBJEXT) \
nullable$U.$(OBJEXT) output$U.$(OBJEXT) print$U.$(OBJEXT) \ nullable$U.$(OBJEXT) output$U.$(OBJEXT) state$U.$(OBJEXT) \
reader$U.$(OBJEXT) reduce$U.$(OBJEXT) symtab$U.$(OBJEXT) \ print$U.$(OBJEXT) reader$U.$(OBJEXT) reduce$U.$(OBJEXT) \
warshall$U.$(OBJEXT) vcg$U.$(OBJEXT) print_graph$U.$(OBJEXT) symtab$U.$(OBJEXT) warshall$U.$(OBJEXT) vcg$U.$(OBJEXT) \
print_graph$U.$(OBJEXT)
bison_OBJECTS = $(am_bison_OBJECTS) bison_OBJECTS = $(am_bison_OBJECTS)
bison_LDADD = $(LDADD) bison_LDADD = $(LDADD)
bison_DEPENDENCIES = ../lib/libbison.a bison_DEPENDENCIES = ../lib/libbison.a
@@ -163,14 +176,13 @@ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
@AMDEP_TRUE@ $(DEPDIR)/main$U.Po $(DEPDIR)/nullable$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/main$U.Po $(DEPDIR)/nullable$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/output$U.Po $(DEPDIR)/print$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/output$U.Po $(DEPDIR)/print$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/print_graph$U.Po $(DEPDIR)/reader$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/print_graph$U.Po $(DEPDIR)/reader$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/reduce$U.Po $(DEPDIR)/symtab$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/reduce$U.Po $(DEPDIR)/state$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/vcg$U.Po $(DEPDIR)/vmsgetargs$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/symtab$U.Po $(DEPDIR)/vcg$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/warshall$U.Po @AMDEP_TRUE@ $(DEPDIR)/vmsgetargs$U.Po $(DEPDIR)/warshall$U.Po
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC) CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
DIST_SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES) DIST_SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES)
DATA = $(pkgdata_DATA) DATA = $(pkgdata_DATA)
@@ -187,9 +199,7 @@ $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \ cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile $(AUTOMAKE) --gnu src/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
install-binPROGRAMS: $(bin_PROGRAMS) install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir) $(mkinstalldirs) $(DESTDIR)$(bindir)
@@ -228,7 +238,7 @@ ANSI2KNR = ../lib/ansi2knr
cd ../lib && $(MAKE) $(AM_MAKEFLAGS) ansi2knr cd ../lib && $(MAKE) $(AM_MAKEFLAGS) ansi2knr
mostlyclean-kr: mostlyclean-kr:
-rm -f *_.c -test "$U" = "" || rm -f *_.c
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/LR0$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/LR0$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/closure$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/closure$U.Po@am__quote@
@@ -247,6 +257,7 @@ mostlyclean-kr:
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/print_graph$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/print_graph$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/reader$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/reader$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/reduce$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/reduce$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/state$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/symtab$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/symtab$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vcg$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vcg$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vmsgetargs$U.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vmsgetargs$U.Po@am__quote@
@@ -301,6 +312,8 @@ reader_.c: reader.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/reader.c; then echo $(srcdir)/reader.c; else echo reader.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > reader_.c || rm -f reader_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/reader.c; then echo $(srcdir)/reader.c; else echo reader.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > reader_.c || rm -f reader_.c
reduce_.c: reduce.c $(ANSI2KNR) reduce_.c: reduce.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/reduce.c; then echo $(srcdir)/reduce.c; else echo reduce.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > reduce_.c || rm -f reduce_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/reduce.c; then echo $(srcdir)/reduce.c; else echo reduce.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > reduce_.c || rm -f reduce_.c
state_.c: state.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/state.c; then echo $(srcdir)/state.c; else echo state.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > state_.c || rm -f state_.c
symtab_.c: symtab.c $(ANSI2KNR) symtab_.c: symtab.c $(ANSI2KNR)
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/symtab.c; then echo $(srcdir)/symtab.c; else echo symtab.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > symtab_.c || rm -f symtab_.c $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/symtab.c; then echo $(srcdir)/symtab.c; else echo symtab.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > symtab_.c || rm -f symtab_.c
vcg_.c: vcg.c $(ANSI2KNR) vcg_.c: vcg.c $(ANSI2KNR)
@@ -314,17 +327,18 @@ conflicts_.$(OBJEXT) derives_.$(OBJEXT) files_.$(OBJEXT) \
getargs_.$(OBJEXT) gram_.$(OBJEXT) lalr_.$(OBJEXT) lex_.$(OBJEXT) \ getargs_.$(OBJEXT) gram_.$(OBJEXT) lalr_.$(OBJEXT) lex_.$(OBJEXT) \
main_.$(OBJEXT) nullable_.$(OBJEXT) output_.$(OBJEXT) print_.$(OBJEXT) \ main_.$(OBJEXT) nullable_.$(OBJEXT) output_.$(OBJEXT) print_.$(OBJEXT) \
print_graph_.$(OBJEXT) reader_.$(OBJEXT) reduce_.$(OBJEXT) \ print_graph_.$(OBJEXT) reader_.$(OBJEXT) reduce_.$(OBJEXT) \
symtab_.$(OBJEXT) vcg_.$(OBJEXT) vmsgetargs_.$(OBJEXT) \ state_.$(OBJEXT) symtab_.$(OBJEXT) vcg_.$(OBJEXT) vmsgetargs_.$(OBJEXT) \
warshall_.$(OBJEXT) : $(ANSI2KNR) warshall_.$(OBJEXT) : $(ANSI2KNR)
uninstall-info-am: uninstall-info-am:
pkgdataDATA_INSTALL = $(INSTALL_DATA)
install-pkgdataDATA: $(pkgdata_DATA) install-pkgdataDATA: $(pkgdata_DATA)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(pkgdatadir) $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
@list='$(pkgdata_DATA)'; for p in $$list; do \ @list='$(pkgdata_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \ f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgdatadir)/$$f"; \ echo " $(pkgdataDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgdatadir)/$$f"; \
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgdatadir)/$$f; \ $(pkgdataDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgdatadir)/$$f; \
done done
uninstall-pkgdataDATA: uninstall-pkgdataDATA:
@@ -338,26 +352,26 @@ uninstall-pkgdataDATA:
tags: TAGS tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) ' { files[$$0] = 1; } \ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
mkid -fID $$unique $(LISP) mkid -fID $$unique
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
tags=; \ tags=; \
here=`pwd`; \ here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) ' { files[$$0] = 1; } \ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP) || etags $(ETAGS_ARGS) $$tags $$unique
GTAGS: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \ here=`$(am__cd) $(top_builddir) && pwd` \
@@ -366,7 +380,6 @@ GTAGS:
distclean-tags: distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .. top_distdir = ..
@@ -374,7 +387,7 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES) distdir: $(DISTFILES)
@for file in $(DISTFILES); do \ @for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
$(mkinstalldirs) "$(distdir)/$$dir"; \ $(mkinstalldirs) "$(distdir)/$$dir"; \
@@ -406,6 +419,7 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \ `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
+321 -203
View File
@@ -1,7 +1,7 @@
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line #line
/* Skeleton output parser for bison, /* Skeleton output parser for bison,
Copyright 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1984, 1989, 1990, 2000, 2001 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
@@ -28,58 +28,120 @@
It was written by Richard Stallman by simplifying the hairy parser It was written by Richard Stallman by simplifying the hairy parser
used when %semantic_parser is specified. */ used when %semantic_parser is specified. */
#ifndef YYSTACK_USE_ALLOCA /* All symbols defined below should begin with yy or YY, to avoid
# ifdef alloca infringing on user name space. This should be done even for local
# define YYSTACK_USE_ALLOCA 1 variables, as they might otherwise be expanded by user macros.
# else /* alloca not defined */ There are some unavoidable exceptions within include files to
# ifdef __GNUC__ define necessary library symbols; they are noted "INFRINGES ON
# define YYSTACK_USE_ALLOCA 1 USER NAME SPACE" below. */
# define alloca __builtin_alloca
# else /* not GNU C. */
# if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
# define YYSTACK_USE_ALLOCA 1
# include <alloca.h>
# else /* not sparc */
/* We think this test detects Watcom and Microsoft C. */
/* This used to test MSDOS, but that is a bad idea since that
symbol is in the user namespace. */
# if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
# if 0
/* No need for malloc.h, which pollutes the namespace; instead,
just don't use alloca. */
# include <malloc.h>
# endif
# else /* not MSDOS, or __TURBOC__ */
# if defined(_AIX)
/* I don't know what this was needed for, but it pollutes the
namespace. So I turned it off. rms, 2 May 1997. */
/* #include <malloc.h> */
#pragma alloca
# define YYSTACK_USE_ALLOCA 1
# else /* not MSDOS, or __TURBOC__, or _AIX */
# if 0
/* [email protected] says this works for HPUX 9.05 and up, and on
HPUX 10. Eventually we can turn this on. */
# ifdef __hpux
# define YYSTACK_USE_ALLOCA 1
# define alloca __builtin_alloca
# endif /* __hpux */
# endif
# endif /* not _AIX */
# endif /* not MSDOS, or __TURBOC__ */
# endif /* not sparc */
# endif /* not GNU C */
# endif /* alloca not defined */
#endif /* YYSTACK_USE_ALLOCA not defined */
#ifndef YYSTACK_USE_ALLOCA #ifdef __cplusplus
# define YYSTACK_USE_ALLOCA 0 # define YYSTD(x) std::x
#else
# define YYSTD(x) x
#endif #endif
#if YYSTACK_USE_ALLOCA #if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
# define YYSTACK_ALLOC alloca
#else /* The parser invokes alloca or malloc; define the necessary symbols. */
# define YYSTACK_ALLOC malloc
# if YYSTACK_USE_ALLOCA
# define YYSTACK_ALLOC alloca
# define YYSIZE_T YYSTD (size_t)
# else
# ifndef YYSTACK_USE_ALLOCA
# if defined (alloca) || defined (_ALLOCA_H)
# define YYSTACK_ALLOC alloca
# define YYSIZE_T YYSTD (size_t)
# else
# ifdef __GNUC__
# define YYSTACK_ALLOC __builtin_alloca
# endif
# endif
# endif
# endif
# ifdef YYSTACK_ALLOC
/* Pacify GCC's `empty if-body' warning. */
# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
# else
# ifdef __cplusplus
# include <cstdlib> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T std::size_t
# else
# ifdef __STDC__
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
# endif
# define YYSTACK_ALLOC YYSTD (malloc)
# define YYSTACK_FREE YYSTD (free)
# endif
/* A type that is properly aligned for any stack member. */
union yyalloc
{
short yyss;
YYSTYPE yyvs;
# if YYLSP_NEEDED
YYLTYPE yyls;
# endif
};
/* The size of the maximum gap between one aligned stack and the next. */
# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# if YYLSP_NEEDED
# define YYSTACK_BYTES(N) \
((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+ 2 * YYSTACK_GAP_MAX)
# else
# define YYSTACK_BYTES(N) \
((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAX)
# endif
/* Relocate the TYPE STACK from its old location to the new one. The
local variables YYSIZE and YYSTACKSIZE give the old and new number of
elements in the stack, and YYPTR gives the new location of the
stack. Advance YYPTR to a properly aligned location for the next
stack. */
# define YYSTACK_RELOCATE(Type, Stack) \
do \
{ \
YYSIZE_T yynewbytes; \
yymemcpy ((char *) yyptr, (char *) (Stack), \
yysize * (YYSIZE_T) sizeof (Type)); \
Stack = &yyptr->Stack; \
yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX; \
yyptr += yynewbytes / sizeof (*yyptr); \
} \
while (0)
#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
#endif
#if ! defined (YYSIZE_T) && defined (size_t)
# define YYSIZE_T size_t
#endif
#if ! defined (YYSIZE_T)
# ifdef __cplusplus
# include <cstddef> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T std::size_t
# else
# ifdef __STDC__
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
# endif
#endif
#if ! defined (YYSIZE_T)
# define YYSIZE_T unsigned int
#endif #endif
#define yyerrok (yyerrstatus = 0) #define yyerrok (yyerrstatus = 0)
@@ -152,10 +214,20 @@ while (0)
/* Enable debugging if requested. */ /* Enable debugging if requested. */
#if YYDEBUG #if YYDEBUG
# ifndef YYFPRINTF
# ifdef __cplusplus
# include <cstdio> /* INFRINGES ON USER NAME SPACE */
# else
# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
# endif
# define YYFPRINTF YYSTD (fprintf)
# endif
# define YYDPRINTF(Args) \ # define YYDPRINTF(Args) \
do { \ do { \
if (yydebug) \ if (yydebug) \
fprintf Args; \ YYFPRINTF Args; \
} while (0) } while (0)
/* Nonzero means print parse trace. [The following comment makes no /* Nonzero means print parse trace. [The following comment makes no
sense to me. Could someone clarify it? --akim] Since this is sense to me. Could someone clarify it? --akim] Since this is
@@ -172,7 +244,12 @@ int yydebug;
#endif #endif
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
if the built-in stack extension method is used). */ if the built-in stack extension method is used).
Do not make this value too large; the results are undefined if
SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
evaluated with infinite-precision integer arithmetic. */
#if YYMAXDEPTH == 0 #if YYMAXDEPTH == 0
# undef YYMAXDEPTH # undef YYMAXDEPTH
#endif #endif
@@ -181,35 +258,83 @@ int yydebug;
# define YYMAXDEPTH 10000 # define YYMAXDEPTH 10000
#endif #endif
/* Define __yy_memcpy. Note that the size argument #if ! defined (yyoverflow) && ! defined (yymemcpy)
should be passed with type unsigned int, because that is what the non-GCC # if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
definitions require. With GCC, __builtin_memcpy takes an arg # define yymemcpy __builtin_memcpy
of type size_t, but it can handle unsigned int. */ # else /* not GNU C or C++ */
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
# define __yy_memcpy(To, From, Count) __builtin_memcpy (To, From, Count)
#else /* not GNU C or C++ */
/* This is the most reliable way to avoid incompatibilities /* This is the most reliable way to avoid incompatibilities
in available built-in functions on various systems. */ in available built-in functions on various systems. */
static void static void
# ifndef __cplusplus # if defined (__STDC__) || defined (__cplusplus)
__yy_memcpy (to, from, count) yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
char *to; # else
const char *from; yymemcpy (yyto, yyfrom, yycount)
unsigned int count; char *yyto;
# else /* __cplusplus */ const char *yyfrom;
__yy_memcpy (char *to, const char *from, unsigned int count) YYSIZE_T yycount;
# endif # endif
{ {
register const char *f = from; register const char *yyf = yyfrom;
register char *t = to; register char *yyt = yyto;
register int i = count; register YYSIZE_T yyi = yycount;
while (i-- > 0) while (yyi-- != 0)
*t++ = *f++; *yyt++ = *yyf++;
} }
# endif
#endif
#ifdef YYERROR_VERBOSE
# ifndef yystrlen
# if defined (__GLIBC__) && defined (_STRING_H)
# define yystrlen strlen
# else
/* Return the length of YYSTR. */
static YYSIZE_T
# if defined (__STDC__) || defined (__cplusplus)
yystrlen (const char *yystr)
# else
yystrlen (yystr)
const char *yystr;
# endif
{
register const char *yys = yystr;
while (*yys++ != '\0')
continue;
return yys - yystr - 1;
}
# endif
# endif
# ifndef yystpcpy
# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
# define yystpcpy stpcpy
# else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
YYDEST. */
static char *
# if defined (__STDC__) || defined (__cplusplus)
yystpcpy (char *yydest, const char *yysrc)
# else
yystpcpy (yydest, yysrc)
char *yydest;
const char *yysrc;
# endif
{
register char *yyd = yydest;
register const char *yys = yysrc;
while ((*yyd++ = *yys++) != '\0')
continue;
return yyd - 1;
}
# endif
# endif
#endif #endif
#line #line
@@ -245,7 +370,7 @@ int yyparse (void);
/* YY_DECL_VARIABLES -- depending whether we use a pure parser, /* YY_DECL_VARIABLES -- depending whether we use a pure parser,
variables are global, or local to YYPARSE. */ variables are global, or local to YYPARSE. */
#define _YY_DECL_VARIABLES \ #define YY_DECL_NON_LSP_VARIABLES \
/* The lookahead symbol. */ \ /* The lookahead symbol. */ \
int yychar; \ int yychar; \
\ \
@@ -257,13 +382,13 @@ int yynerrs;
#if YYLSP_NEEDED #if YYLSP_NEEDED
# define YY_DECL_VARIABLES \ # define YY_DECL_VARIABLES \
_YY_DECL_VARIABLES \ YY_DECL_NON_LSP_VARIABLES \
\ \
/* Location data for the lookahead symbol. */ \ /* Location data for the lookahead symbol. */ \
YYLTYPE yylloc; YYLTYPE yylloc;
#else #else
# define YY_DECL_VARIABLES \ # define YY_DECL_VARIABLES \
_YY_DECL_VARIABLES YY_DECL_NON_LSP_VARIABLES
#endif #endif
@@ -284,6 +409,7 @@ yyparse (YYPARSE_PARAM_ARG)
register int yystate; register int yystate;
register int yyn; register int yyn;
int yyresult;
/* Number of tokens to shift before error messages enabled. */ /* Number of tokens to shift before error messages enabled. */
int yyerrstatus; int yyerrstatus;
/* Lookahead token as an internal (translated) token number. */ /* Lookahead token as an internal (translated) token number. */
@@ -291,7 +417,7 @@ yyparse (YYPARSE_PARAM_ARG)
/* Three stacks and their tools: /* Three stacks and their tools:
`yyss': related to states, `yyss': related to states,
`yysv': related to semantic values, `yyvs': related to semantic values,
`yyls': related to locations. `yyls': related to locations.
Refer to the stacks thru separate pointers, to allow yyoverflow Refer to the stacks thru separate pointers, to allow yyoverflow
@@ -320,16 +446,15 @@ yyparse (YYPARSE_PARAM_ARG)
# define YYPOPSTACK (yyvsp--, yyssp--) # define YYPOPSTACK (yyvsp--, yyssp--)
#endif #endif
int yystacksize = YYINITDEPTH; YYSIZE_T yystacksize = YYINITDEPTH;
int yyfree_stacks = 0;
/* The variables used to return semantic value and location from the /* The variables used to return semantic value and location from the
action routines. */ action routines. */
YYSTYPE yyval; YYSTYPE yyval;
# if YYLSP_NEEDED #if YYLSP_NEEDED
YYLTYPE yyloc; YYLTYPE yyloc;
# endif #endif
/* When reducing, the number of symbols on the RHS of the reduced /* When reducing, the number of symbols on the RHS of the reduced
rule. */ rule. */
@@ -368,81 +493,71 @@ yyparse (YYPARSE_PARAM_ARG)
if (yyssp >= yyss + yystacksize - 1) if (yyssp >= yyss + yystacksize - 1)
{ {
/* Give user a chance to reallocate the stack. Use copies of
these so that the &'s don't force the real ones into memory.
*/
YYSTYPE *yyvs1 = yyvs;
short *yyss1 = yyss;
#if YYLSP_NEEDED
YYLTYPE *yyls1 = yyls;
#endif
/* Get the current used size of the three stacks, in elements. */ /* Get the current used size of the three stacks, in elements. */
int size = yyssp - yyss + 1; YYSIZE_T yysize = yyssp - yyss + 1;
#ifdef yyoverflow #ifdef yyoverflow
/* Each stack pointer address is followed by the size of the {
data in use in that stack, in bytes. */ /* Give user a chance to reallocate the stack. Use copies of
# if YYLSP_NEEDED these so that the &'s don't force the real ones into
/* This used to be a conditional around just the two extra args, memory. */
but that might be undefined if yyoverflow is a macro. */ YYSTYPE *yyvs1 = yyvs;
yyoverflow ("parser stack overflow", short *yyss1 = yyss;
&yyss1, size * sizeof (*yyssp),
&yyvs1, size * sizeof (*yyvsp),
&yyls1, size * sizeof (*yylsp),
&yystacksize);
# else
yyoverflow ("parser stack overflow",
&yyss1, size * sizeof (*yyssp),
&yyvs1, size * sizeof (*yyvsp),
&yystacksize);
# endif
yyss = yyss1; yyvs = yyvs1; /* Each stack pointer address is followed by the size of the
data in use in that stack, in bytes. */
# if YYLSP_NEEDED # if YYLSP_NEEDED
yyls = yyls1; YYLTYPE *yyls1 = yyls;
/* This used to be a conditional around just the two extra args,
but that might be undefined if yyoverflow is a macro. */
yyoverflow ("parser stack overflow",
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yyls1, yysize * sizeof (*yylsp),
&yystacksize);
yyls = yyls1;
# else
yyoverflow ("parser stack overflow",
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yystacksize);
# endif # endif
yyss = yyss1;
yyvs = yyvs1;
}
#else /* no yyoverflow */ #else /* no yyoverflow */
/* Extend the stack our own way. */ /* Extend the stack our own way. */
if (yystacksize >= YYMAXDEPTH) if (yystacksize >= YYMAXDEPTH)
{ goto yyoverflowlab;
yyerror ("parser stack overflow");
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
# if YYLSP_NEEDED
free (yyls);
# endif
}
return 2;
}
yystacksize *= 2; yystacksize *= 2;
if (yystacksize > YYMAXDEPTH) if (yystacksize > YYMAXDEPTH)
yystacksize = YYMAXDEPTH; yystacksize = YYMAXDEPTH;
# if !YYSTACK_USE_ALLOCA
yyfree_stacks = 1; {
# endif short *yyss1 = yyss;
yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); union yyalloc *yyptr =
__yy_memcpy ((char *)yyss, (char *)yyss1, (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
size * (unsigned int) sizeof (*yyssp)); if (! yyptr)
yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); goto yyoverflowlab;
__yy_memcpy ((char *)yyvs, (char *)yyvs1, YYSTACK_RELOCATE (short, yyss);
size * (unsigned int) sizeof (*yyvsp)); YYSTACK_RELOCATE (YYSTYPE, yyvs);
# if YYLSP_NEEDED # if YYLSP_NEEDED
yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); YYSTACK_RELOCATE (YYLTYPE, yyls);
__yy_memcpy ((char *)yyls, (char *)yyls1,
size * (unsigned int) sizeof (*yylsp));
# endif # endif
# undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
}
#endif /* no yyoverflow */ #endif /* no yyoverflow */
yyssp = yyss + size - 1; yyssp = yyss + yysize - 1;
yyvsp = yyvs + size - 1; yyvsp = yyvs + yysize - 1;
#if YYLSP_NEEDED #if YYLSP_NEEDED
yylsp = yyls + size - 1; yylsp = yyls + yysize - 1;
#endif #endif
YYDPRINTF ((stderr, "Stack size increased to %d\n", yystacksize)); YYDPRINTF ((stderr, "Stack size increased to %lu\n",
(unsigned long int) yystacksize));
if (yyssp >= yyss + yystacksize - 1) if (yyssp >= yyss + yystacksize - 1)
YYABORT; YYABORT;
@@ -497,13 +612,14 @@ yybackup:
which are defined only if `YYDEBUG' is set. */ which are defined only if `YYDEBUG' is set. */
if (yydebug) if (yydebug)
{ {
fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); YYFPRINTF (stderr, "Next token is %d (%s",
yychar, yytname[yychar1]);
/* Give the individual parser a way to print the precise /* Give the individual parser a way to print the precise
meaning of a token, for further debugging info. */ meaning of a token, for further debugging info. */
# ifdef YYPRINT # ifdef YYPRINT
YYPRINT (stderr, yychar, yylval); YYPRINT (stderr, yychar, yylval);
# endif # endif
fprintf (stderr, ")\n"); YYFPRINTF (stderr, ")\n");
} }
#endif #endif
} }
@@ -535,7 +651,8 @@ yybackup:
YYACCEPT; YYACCEPT;
/* Shift the lookahead token. */ /* Shift the lookahead token. */
YYDPRINTF ((stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1])); YYDPRINTF ((stderr, "Shifting token %d (%s), ",
yychar, yytname[yychar1]));
/* Discard the token being shifted unless it is eof. */ /* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF) if (yychar != YYEOF)
@@ -594,15 +711,15 @@ yyreduce:
are defined only if `YYDEBUG' is set. */ are defined only if `YYDEBUG' is set. */
if (yydebug) if (yydebug)
{ {
int i; int yyi;
fprintf (stderr, "Reducing via rule %d (line %d), ", YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
yyn, yyrline[yyn]); yyn, yyrline[yyn]);
/* Print the symbols being reduced, and their result. */ /* Print the symbols being reduced, and their result. */
for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
fprintf (stderr, "%s ", yytname[yyrhs[i]]); YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
} }
#endif #endif
%% actions /* The action file replaces this line. */ %% actions /* The action file replaces this line. */
@@ -617,11 +734,11 @@ yyreduce:
#if YYDEBUG #if YYDEBUG
if (yydebug) if (yydebug)
{ {
short *ssp1 = yyss - 1; short *yyssp1 = yyss - 1;
fprintf (stderr, "state stack now"); YYFPRINTF (stderr, "state stack now");
while (ssp1 != yyssp) while (yyssp1 != yyssp)
fprintf (stderr, " %d", *++ssp1); YYFPRINTF (stderr, " %d", *++yyssp1);
fprintf (stderr, "\n"); YYFPRINTF (stderr, "\n");
} }
#endif #endif
@@ -659,46 +776,47 @@ yyerrlab:
if (yyn > YYFLAG && yyn < YYLAST) if (yyn > YYFLAG && yyn < YYLAST)
{ {
int size = 0; YYSIZE_T yysize = 0;
char *msg; char *yymsg;
int x, count; int yyx, yycount;
count = 0; yycount = 0;
/* Start X at -yyn if nec to avoid negative indexes in yycheck. */ /* Start YYX at -YYN if negative to avoid negative indexes in
for (x = (yyn < 0 ? -yyn : 0); YYCHECK. */
x < (int) (sizeof (yytname) / sizeof (char *)); x++) for (yyx = yyn < 0 ? -yyn : 0;
if (yycheck[x + yyn] == x) yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
size += strlen (yytname[x]) + 15, count++; if (yycheck[yyx + yyn] == yyx)
size += strlen ("parse error, unexpected `") + 1; yysize += yystrlen (yytname[yyx]) + 15, yycount++;
size += strlen (yytname[YYTRANSLATE (yychar)]); yysize += yystrlen ("parse error, unexpected ") + 1;
msg = (char *) malloc (size); yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
if (msg != 0) yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{ {
strcpy (msg, "parse error, unexpected `"); char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
strcat (msg, yytname[YYTRANSLATE (yychar)]); yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
strcat (msg, "'");
if (count < 5) if (yycount < 5)
{ {
count = 0; yycount = 0;
for (x = (yyn < 0 ? -yyn : 0); for (yyx = yyn < 0 ? -yyn : 0;
x < (int) (sizeof (yytname) / sizeof (char *)); x++) yyx < (int) (sizeof (yytname) / sizeof (char *));
if (yycheck[x + yyn] == x) yyx++)
if (yycheck[yyx + yyn] == yyx)
{ {
strcat (msg, count == 0 ? ", expecting `" : " or `"); const char *yyq = ! yycount ? ", expecting " : " or ";
strcat (msg, yytname[x]); yyp = yystpcpy (yyp, yyq);
strcat (msg, "'"); yyp = yystpcpy (yyp, yytname[yyx]);
count++; yycount++;
} }
} }
yyerror (msg); yyerror (yymsg);
free (msg); YYSTACK_FREE (yymsg);
} }
else else
yyerror ("parse error; also virtual memory exceeded"); yyerror ("parse error; also virtual memory exhausted");
} }
else else
#endif /* YYERROR_VERBOSE */ #endif /* defined (YYERROR_VERBOSE) */
yyerror ("parse error"); yyerror ("parse error");
} }
goto yyerrlab1; goto yyerrlab1;
@@ -761,11 +879,11 @@ yyerrpop:
#if YYDEBUG #if YYDEBUG
if (yydebug) if (yydebug)
{ {
short *ssp1 = yyss - 1; short *yyssp1 = yyss - 1;
fprintf (stderr, "Error: state stack now"); YYFPRINTF (stderr, "Error: state stack now");
while (ssp1 != yyssp) while (yyssp1 != yyssp)
fprintf (stderr, " %d", *++ssp1); YYFPRINTF (stderr, " %d", *++yyssp1);
fprintf (stderr, "\n"); YYFPRINTF (stderr, "\n");
} }
#endif #endif
@@ -810,28 +928,28 @@ yyerrhandle:
| yyacceptlab -- YYACCEPT comes here. | | yyacceptlab -- YYACCEPT comes here. |
`-------------------------------------*/ `-------------------------------------*/
yyacceptlab: yyacceptlab:
if (yyfree_stacks) yyresult = 0;
{ goto yyreturn;
free (yyss);
free (yyvs);
#if YYLSP_NEEDED
free (yyls);
#endif
}
return 0;
/*-----------------------------------. /*-----------------------------------.
| yyabortlab -- YYABORT comes here. | | yyabortlab -- YYABORT comes here. |
`-----------------------------------*/ `-----------------------------------*/
yyabortlab: yyabortlab:
if (yyfree_stacks) yyresult = 1;
{ goto yyreturn;
free (yyss);
free (yyvs); /*---------------------------------------------.
#if YYLSP_NEEDED | yyoverflowab -- parser overflow comes here. |
free (yyls); `---------------------------------------------*/
yyoverflowlab:
yyerror ("parser stack overflow");
yyresult = 2;
/* Fall through. */
yyreturn:
#ifndef yyoverflow
if (yyss != yyssa)
YYSTACK_FREE (yyss);
#endif #endif
} return yyresult;
return 1;
} }
+99 -160
View File
@@ -1,5 +1,5 @@
/* Subroutines for bison /* Subroutines for bison
Copyright 1984, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -19,61 +19,69 @@
02111-1307, USA. */ 02111-1307, USA. */
#include "system.h" #include "system.h"
#include "getargs.h"
#include "gram.h" #include "gram.h"
#include "reader.h"
#include "closure.h" #include "closure.h"
#include "derives.h" #include "derives.h"
#include "warshall.h" #include "warshall.h"
/* NITEMSET is the size of the array ITEMSET. */
short *itemset; short *itemset;
short *itemsetend; int nitemset;
static unsigned *ruleset; static unsigned *ruleset;
/* internal data. See comments before set_fderives and set_firsts. */ /* internal data. See comments before set_fderives and set_firsts. */
static unsigned *fderives; static unsigned *fderives;
static unsigned *firsts; static unsigned *firsts;
/* Retrieve the FDERIVES/FIRSTS sets of the nonterminals numbered Var. */
#define FDERIVES(Var) (fderives + ((Var) - ntokens) * rulesetsize)
#define FIRSTS(Var) (firsts + ((Var) - ntokens) * varsetsize)
/* number of words required to hold a bit for each rule */ /* number of words required to hold a bit for each rule */
static int rulesetsize; static int rulesetsize;
/* number of words required to hold a bit for each variable */ /* number of words required to hold a bit for each variable */
static int varsetsize; static int varsetsize;
#if DEBUG
/*-----------------. /*-----------------.
| Debugging code. | | Debugging code. |
`-----------------*/ `-----------------*/
static void static void
print_closure (int n) print_closure (const char *title, short *array, size_t size)
{ {
short *isp; size_t i;
fprintf (stderr, "Closure: %s\n", title);
printf ("\n\nn = %d\n\n", n); for (i = 0; i < size; ++i)
for (isp = itemset; isp < itemsetend; isp++) {
printf (" %d\n", *isp); short *rp;
fprintf (stderr, " %2d: .", array[i]);
for (rp = &ritem[array[i]]; *rp > 0; ++rp)
fprintf (stderr, " %s", tags[*rp]);
fprintf (stderr, " (rule %d)\n", -*rp);
}
fputs ("\n\n", stderr);
} }
static void static void
print_firsts (void) print_firsts (void)
{ {
int i; int i, j;
int j;
unsigned *rowp;
printf ("\n\n\nFIRSTS\n\n");
fprintf (stderr, "FIRSTS\n");
for (i = ntokens; i < nsyms; i++) for (i = ntokens; i < nsyms; i++)
{ {
printf ("\n\n%s firsts\n\n", tags[i]); fprintf (stderr, "\t%s firsts\n", tags[i]);
rowp = firsts + ((i - ntokens) * varsetsize);
for (j = 0; j < nvars; j++) for (j = 0; j < nvars; j++)
if (BITISSET (rowp, j)) if (BITISSET (FIRSTS (i), j))
printf (" %s\n", tags[j + ntokens]); fprintf (stderr, "\t\t%d (%s)\n", j + ntokens, tags[j + ntokens]);
} }
fprintf (stderr, "\n\n");
} }
@@ -82,23 +90,24 @@ print_fderives (void)
{ {
int i; int i;
int j; int j;
unsigned *rp;
printf ("\n\n\nFDERIVES\n"); fprintf (stderr, "FDERIVES\n");
for (i = ntokens; i < nsyms; i++) for (i = ntokens; i < nsyms; i++)
{ {
printf ("\n\n%s derives\n\n", tags[i]); fprintf (stderr, "\t%s derives\n", tags[i]);
rp = fderives + i * rulesetsize;
for (j = 0; j <= nrules; j++) for (j = 0; j <= nrules; j++)
if (BITISSET (rp, j)) if (BITISSET (FDERIVES (i), j))
printf (" %d\n", j); {
short *rhsp;
fprintf (stderr, "\t\t%d:", j);
for (rhsp = ritem + rule_table[j].rhs; *rhsp > 0; ++rhsp)
fprintf (stderr, " %s", tags[*rhsp]);
fputc ('\n', stderr);
}
} }
fprintf (stderr, "\n\n");
fflush (stdout);
} }
#endif
/*-------------------------------------------------------------------. /*-------------------------------------------------------------------.
| Set FIRSTS to be an NVARS by NVARS bit matrix indicating which | | Set FIRSTS to be an NVARS by NVARS bit matrix indicating which |
@@ -113,39 +122,24 @@ print_fderives (void)
static void static void
set_firsts (void) set_firsts (void)
{ {
unsigned *row; int i, j;
int symbol;
short *sp;
int rowsize;
int i; varsetsize = WORDSIZE (nvars);
varsetsize = rowsize = WORDSIZE (nvars); firsts = XCALLOC (unsigned, nvars * varsetsize);
firsts = XCALLOC (unsigned, nvars * rowsize);
row = firsts;
for (i = ntokens; i < nsyms; i++) for (i = ntokens; i < nsyms; i++)
{ for (j = 0; derives[i][j] >= 0; ++j)
sp = derives[i]; {
while (*sp >= 0) int symbol = ritem[rule_table[derives[i][j]].rhs];
{ if (ISVAR (symbol))
symbol = ritem[rrhs[*sp++]]; SETBIT (FIRSTS (i), symbol - ntokens);
if (ISVAR (symbol)) }
{
symbol -= ntokens;
SETBIT (row, symbol);
}
}
row += rowsize;
}
RTC (firsts, nvars); RTC (firsts, nvars);
#ifdef DEBUG if (trace_flag)
print_firsts (); print_firsts ();
#endif
} }
/*-------------------------------------------------------------------. /*-------------------------------------------------------------------.
@@ -161,52 +155,20 @@ set_firsts (void)
static void static void
set_fderives (void) set_fderives (void)
{ {
unsigned *rrow; int i, j, k;
unsigned *vrow;
int j;
unsigned cword;
short *rp;
int b;
int ruleno; fderives = XCALLOC (unsigned, nvars * rulesetsize);
int i;
fderives = XCALLOC (unsigned, nvars * rulesetsize) - ntokens * rulesetsize;
set_firsts (); set_firsts ();
rrow = fderives + ntokens * rulesetsize; for (i = ntokens; i < nsyms; ++i)
for (j = ntokens; j < nsyms; ++j)
if (BITISSET (FIRSTS (i), j - ntokens))
for (k = 0; derives[j][k] > 0; ++k)
SETBIT (FDERIVES (i), derives[j][k]);
for (i = ntokens; i < nsyms; i++) if (trace_flag)
{ print_fderives ();
vrow = firsts + ((i - ntokens) * varsetsize);
cword = *vrow++;
b = 0;
for (j = ntokens; j < nsyms; j++)
{
if (cword & (1 << b))
{
rp = derives[j];
while ((ruleno = *rp++) > 0)
{
SETBIT (rrow, ruleno);
}
}
b++;
if (b >= BITS_PER_WORD && j + 1 < nsyms)
{
cword = *vrow++;
b = 0;
}
}
rrow += rulesetsize;
}
#ifdef DEBUG
print_fderives ();
#endif
XFREE (firsts); XFREE (firsts);
} }
@@ -228,82 +190,59 @@ new_closure (int n)
void void
closure (short *core, int n) closure (short *core, int n)
{ {
/* Index over CORE. */
int c;
/* Index over RULESET. */
int r;
/* A bit index over RULESET. */
int ruleno; int ruleno;
unsigned word;
short *csp;
unsigned *dsp;
unsigned *rsp;
short *csend; if (trace_flag)
unsigned *rsend; print_closure ("input", core, n);
int symbol;
int itemno;
rsp = ruleset;
rsend = ruleset + rulesetsize;
csend = core + n;
if (n == 0) if (n == 0)
{ {
dsp = fderives + start_symbol * rulesetsize; for (r = 0; r < rulesetsize; ++r)
while (rsp < rsend) ruleset[r] = FDERIVES (start_symbol)[r];
*rsp++ = *dsp++;
} }
else else
{ {
while (rsp < rsend) for (r = 0; r < rulesetsize; ++r)
*rsp++ = 0; ruleset[r] = 0;
csp = core; for (c = 0; c < n; ++c)
while (csp < csend) if (ISVAR (ritem[core[c]]))
{ for (r = 0; r < rulesetsize; ++r)
symbol = ritem[*csp++]; ruleset[r] |= FDERIVES (ritem[core[c]])[r];
if (ISVAR (symbol))
{
dsp = fderives + symbol * rulesetsize;
rsp = ruleset;
while (rsp < rsend)
*rsp++ |= *dsp++;
}
}
} }
ruleno = 0; nitemset = 0;
itemsetend = itemset; c = 0;
csp = core; for (ruleno = 0; ruleno < rulesetsize * BITS_PER_WORD; ++ruleno)
rsp = ruleset; if (BITISSET (ruleset, ruleno))
while (rsp < rsend) {
int itemno = rule_table[ruleno].rhs;
while (c < n && core[c] < itemno)
{
itemset[nitemset] = core[c];
nitemset++;
c++;
}
itemset[nitemset] = itemno;
nitemset++;
}
while (c < n)
{ {
word = *rsp++; itemset[nitemset] = core[c];
if (word == 0) nitemset++;
{ c++;
ruleno += BITS_PER_WORD;
}
else
{
int b;
for (b = 0; b < BITS_PER_WORD; b++)
{
if (word & (1 << b))
{
itemno = rrhs[ruleno];
while (csp < csend && *csp < itemno)
*itemsetend++ = *csp++;
*itemsetend++ = itemno;
}
ruleno++;
}
}
} }
while (csp < csend) if (trace_flag)
*itemsetend++ = *csp++; print_closure ("output", itemset, nitemset);
#if DEBUG
print_closure (n);
#endif
} }
@@ -312,5 +251,5 @@ free_closure (void)
{ {
XFREE (itemset); XFREE (itemset);
XFREE (ruleset); XFREE (ruleset);
XFREE (fderives + ntokens * rulesetsize); XFREE (fderives);
} }
+10 -9
View File
@@ -1,5 +1,5 @@
/* Subroutines for bison /* Subroutines for bison
Copyright 1984, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -30,18 +30,19 @@
void new_closure PARAMS ((int n)); void new_closure PARAMS ((int n));
/* Given a vector of item numbers ITEMS, of length N, set up ruleset /* Given the kernel (aka core) of a state (a vector of item numbers
and itemset to indicate what rules could be run and which items ITEMS, of length N), set up ruleset and itemset to indicate what
could be accepted when those items are the active ones. rules could be run and which items could be accepted when those
items are the active ones.
ruleset contains a bit for each rule. closure sets the bits for ruleset contains a bit for each rule. closure sets the bits for
all rules which could potentially describe the next input to be all rules which could potentially describe the next input to be
read. read.
itemset is a vector of item numbers; itemsetend points to just ITEMSET is a vector of item numbers; NITEMSET is its size
beyond the end of the part of it that is significant. closure 9actually, points to just beyond the end of the part of it that is
places there the indices of all items which represent units of significant). closure places there the indices of all items which
input that could arrive next. */ represent units of input that could arrive next. */
void closure PARAMS ((short *items, int n)); void closure PARAMS ((short *items, int n));
@@ -51,6 +52,6 @@ void closure PARAMS ((short *items, int n));
void free_closure PARAMS ((void)); void free_closure PARAMS ((void));
extern short *itemset; extern short *itemset;
extern short *itemsetend; extern int nitemset;
#endif /* !CLOSURE_H_ */ #endif /* !CLOSURE_H_ */
+4 -63
View File
@@ -1,5 +1,5 @@
/* Declaration for error-reporting function for Bison. /* Declaration for error-reporting function for Bison.
Copyright 2000 Free Software Foundation, Inc. Copyright 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it 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 the under the terms of the GNU General Public License as published by the
@@ -41,6 +41,9 @@
void exit (); void exit ();
#endif #endif
/* To get error_one_per_line. */
#include "error.h"
#include "complain.h" #include "complain.h"
#ifndef HAVE_DECL_STRERROR_R #ifndef HAVE_DECL_STRERROR_R
@@ -106,9 +109,6 @@ unsigned int warn_message_count;
/* This variable is incremented each time `complain' is called. */ /* This variable is incremented each time `complain' is called. */
unsigned int complain_message_count; unsigned int complain_message_count;
/* Sometimes we want to have at most one error per line. This
variable controls whether this mode is selected or not. */
int error_one_per_line;
/*--------------------------------. /*--------------------------------.
| Report a warning, and proceed. | | Report a warning, and proceed. |
@@ -248,62 +248,3 @@ fatal (message, va_alist)
fflush (stderr); fflush (stderr);
exit (1); exit (1);
} }
/*------------------------------------------------------------------.
| A severe error has occurred, we cannot proceed. Exit with STATUS, |
| and report the error message of the errno ERRNUM. |
`------------------------------------------------------------------*/
void
#if defined VA_START && defined __STDC__
error (int status, int errnum,
const char *message, ...)
#else
error (status, errnum, message, va_alist)
int status;
int errnum;
char *message;
va_dcl
#endif
{
#ifdef VA_START
va_list args;
#endif
fflush (stdout);
if (infile != NULL)
fprintf (stderr, "%s:%d: ", infile, lineno);
else
fprintf (stderr, "%s:", program_name);
fputs (_("fatal error: "), stderr);
#ifdef VA_START
VA_START (args, message);
vfprintf (stderr, message, args);
va_end (args);
#else
fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
#endif
if (errnum)
{
#if defined HAVE_STRERROR_R || _LIBC
char errbuf[1024];
# if HAVE_WORKING_STRERROR_R || _LIBC
fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf));
# else
/* Don't use __strerror_r's return value because on some systems
(at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */
__strerror_r (errnum, errbuf, sizeof errbuf);
fprintf (stderr, ": %s", errbuf);
# endif
#else
fprintf (stderr, ": %s", strerror (errnum));
#endif
}
putc ('\n', stderr);
fflush (stderr);
if (status)
exit (status);
}
+2 -14
View File
@@ -1,5 +1,5 @@
/* Declaration for error-reporting function for Bison. /* Declaration for error-reporting function for Bison.
Copyright 2000 Free Software Foundation, Inc. Copyright 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it 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 the under the terms of the GNU General Public License as published by the
@@ -40,18 +40,10 @@ extern void complain (const char *format, ...)
extern void fatal (const char *format, ...) extern void fatal (const char *format, ...)
__attribute__ ((__format__ (__printf__, 1, 2))); __attribute__ ((__format__ (__printf__, 1, 2)));
/* Print a message with `fprintf (stderr, FORMAT, ...)';
if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
If STATUS is nonzero, terminate the program with `exit (STATUS)'. */
extern void error (int status, int errnum,
const char *format, ...)
__attribute__ ((__format__ (__printf__, 3, 4)));
#else #else
void warn (); void warn ();
void complain (); void complain ();
void error (); void fatal ();
#endif #endif
/* Position in the current input file. */ /* Position in the current input file. */
@@ -64,10 +56,6 @@ extern unsigned int warn_message_count;
/* This variable is incremented each time `complain' is called. */ /* This variable is incremented each time `complain' is called. */
extern unsigned int complain_message_count; extern unsigned int complain_message_count;
/* Sometimes we want to have at most one error per line. This
variable controls whether this mode is selected or not. */
extern int error_one_per_line;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+253 -435
View File
@@ -19,6 +19,7 @@
02111-1307, USA. */ 02111-1307, USA. */
#include "system.h" #include "system.h"
#include "complain.h"
#include "getargs.h" #include "getargs.h"
#include "files.h" #include "files.h"
#include "gram.h" #include "gram.h"
@@ -28,17 +29,12 @@
#include "reader.h" #include "reader.h"
#include "LR0.h" #include "LR0.h"
int any_conflicts = 0; /* -1 stands for not specified. */
errs **err_table = NULL; int expected_conflicts = -1;
int expected_conflicts;
static char *conflicts = NULL; static char *conflicts = NULL;
static unsigned *shiftset = NULL; static unsigned *shiftset = NULL;
static unsigned *lookaheadset = NULL; static unsigned *lookaheadset = NULL;
static int src_total;
static int rrc_total;
static int src_count;
static int rrc_count;
static inline void static inline void
@@ -60,21 +56,12 @@ Conflict in state %d between rule %d and token %s resolved as %s.\n"),
static void static void
flush_shift (int state, int token) flush_shift (int state, int token)
{ {
shifts *shiftp; shifts *shiftp = state_table[state].shifts;
int k, i; int i;
shiftp = shift_table[state]; for (i = 0; i < shiftp->nshifts; i++)
if (!SHIFT_IS_DISABLED (shiftp, i) && SHIFT_SYMBOL (shiftp, i) == token)
if (shiftp) SHIFT_DISABLE (shiftp, i);
{
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (shiftp->shifts[i]
&& token == accessing_symbol[shiftp->shifts[i]])
(shiftp->shifts[i]) = 0;
}
}
} }
@@ -89,95 +76,79 @@ static void
resolve_sr_conflict (int state, int lookaheadnum) resolve_sr_conflict (int state, int lookaheadnum)
{ {
int i; int i;
int mask; /* find the rule to reduce by to get precedence of reduction */
unsigned *fp1; int redprec = rule_table[LAruleno[lookaheadnum]].prec;
unsigned *fp2; errs *errp = ERRS_ALLOC (ntokens + 1);
int redprec;
errs *errp = (errs *) xcalloc (sizeof (errs) + ntokens * sizeof (short), 1);
short *errtokens = errp->errs; short *errtokens = errp->errs;
/* find the rule to reduce by to get precedence of reduction */
redprec = rprec[LAruleno[lookaheadnum]];
mask = 1;
fp1 = LA + lookaheadnum * tokensetsize;
fp2 = lookaheadset;
for (i = 0; i < ntokens; i++) for (i = 0; i < ntokens; i++)
{ if (BITISSET (LA (lookaheadnum), i)
if ((mask & *fp2 & *fp1) && sprec[i]) && BITISSET (lookaheadset, i)
/* Shift-reduce conflict occurs for token number i && sprec[i])
and it has a precedence. /* Shift-reduce conflict occurs for token number i
The precedence of shifting is that of token i. */ and it has a precedence.
{ The precedence of shifting is that of token i. */
if (sprec[i] < redprec) {
{ if (sprec[i] < redprec)
log_resolution (state, lookaheadnum, i, _("reduce")); {
*fp2 &= ~mask; /* flush the shift for this token */ log_resolution (state, lookaheadnum, i, _("reduce"));
flush_shift (state, i); /* flush the shift for this token */
} RESETBIT (lookaheadset, i);
else if (sprec[i] > redprec) flush_shift (state, i);
{ }
log_resolution (state, lookaheadnum, i, _("shift")); else if (sprec[i] > redprec)
*fp1 &= ~mask; /* flush the reduce for this token */ {
} log_resolution (state, lookaheadnum, i, _("shift"));
else /* flush the reduce for this token */
{ RESETBIT (LA (lookaheadnum), i);
/* Matching precedence levels. }
For left association, keep only the reduction. else
For right association, keep only the shift. {
For nonassociation, keep neither. */ /* Matching precedence levels.
For left association, keep only the reduction.
For right association, keep only the shift.
For nonassociation, keep neither. */
switch (sassoc[i]) switch (sassoc[i])
{ {
case right_assoc: case right_assoc:
log_resolution (state, lookaheadnum, i, _("shift")); log_resolution (state, lookaheadnum, i, _("shift"));
break; break;
case left_assoc: case left_assoc:
log_resolution (state, lookaheadnum, i, _("reduce")); log_resolution (state, lookaheadnum, i, _("reduce"));
break; break;
case non_assoc: case non_assoc:
log_resolution (state, lookaheadnum, i, _("an error")); log_resolution (state, lookaheadnum, i, _("an error"));
break; break;
} }
if (sassoc[i] != right_assoc) if (sassoc[i] != right_assoc)
{ {
*fp2 &= ~mask; /* flush the shift for this token */ /* flush the shift for this token */
flush_shift (state, i); RESETBIT (lookaheadset, i);
} flush_shift (state, i);
if (sassoc[i] != left_assoc) }
{ if (sassoc[i] != left_assoc)
*fp1 &= ~mask; /* flush the reduce for this token */ {
} /* flush the reduce for this token */
if (sassoc[i] == non_assoc) RESETBIT (LA (lookaheadnum), i);
{ }
/* Record an explicit error for this token. */ if (sassoc[i] == non_assoc)
*errtokens++ = i; {
} /* Record an explicit error for this token. */
} *errtokens++ = i;
} }
}
}
mask <<= 1;
if (mask == 0)
{
mask = 1;
fp2++;
fp1++;
}
}
errp->nerrs = errtokens - errp->errs; errp->nerrs = errtokens - errp->errs;
if (errp->nerrs) /* Some tokens have been explicitly made errors. Allocate a
{ permanent errs structure for this state, to record them. */
/* Some tokens have been explicitly made errors. Allocate i = (char *) errtokens - (char *) errp;
a permanent errs structure for this state, to record them. */ state_table[state].errs = ERRS_ALLOC (i + 1);
i = (char *) errtokens - (char *) errp; memcpy (state_table[state].errs, errp, i);
err_table[state] = (errs *) xcalloc ((unsigned int) i, 1);
bcopy (errp, err_table[state], i);
}
else
err_table[state] = 0;
free (errp); free (errp);
} }
@@ -185,80 +156,47 @@ resolve_sr_conflict (int state, int lookaheadnum)
static void static void
set_conflicts (int state) set_conflicts (int state)
{ {
int i; int i, j;
int k;
shifts *shiftp; shifts *shiftp;
unsigned *fp2;
unsigned *fp3;
unsigned *fp4;
unsigned *fp1;
int symbol;
if (consistent[state]) if (state_table[state].consistent)
return; return;
for (i = 0; i < tokensetsize; i++) for (i = 0; i < tokensetsize; i++)
lookaheadset[i] = 0; lookaheadset[i] = 0;
shiftp = shift_table[state]; shiftp = state_table[state].shifts;
if (shiftp) for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
{ if (!SHIFT_IS_DISABLED (shiftp, i))
k = shiftp->nshifts; SETBIT (lookaheadset, SHIFT_SYMBOL (shiftp, i));
for (i = 0; i < k; i++)
{
symbol = accessing_symbol[shiftp->shifts[i]];
if (ISVAR (symbol))
break;
SETBIT (lookaheadset, symbol);
}
}
k = lookaheads[state + 1];
fp4 = lookaheadset + tokensetsize;
/* Loop over all rules which require lookahead in this state. First /* Loop over all rules which require lookahead in this state. First
check for shift-reduce conflict, and try to resolve using check for shift-reduce conflict, and try to resolve using
precedence */ precedence */
for (i = lookaheads[state]; i < k; i++) for (i = state_table[state].lookaheads;
if (rprec[LAruleno[i]]) i < state_table[state + 1].lookaheads;
{ ++i)
fp1 = LA + i * tokensetsize; if (rule_table[LAruleno[i]].prec)
fp2 = fp1; for (j = 0; j < tokensetsize; ++j)
fp3 = lookaheadset; if (LA (i)[j] & lookaheadset[j])
while (fp3 < fp4)
{ {
if (*fp2++ & *fp3++) resolve_sr_conflict (state, i);
{ break;
resolve_sr_conflict (state, i);
break;
}
} }
}
/* Loop over all rules which require lookahead in this state. Check /* Loop over all rules which require lookahead in this state. Check
for conflicts not resolved above. */ for conflicts not resolved above. */
for (i = lookaheads[state]; i < k; i++) for (i = state_table[state].lookaheads;
i < state_table[state + 1].lookaheads;
++i)
{ {
fp1 = LA + i * tokensetsize; for (j = 0; j < tokensetsize; ++j)
fp2 = fp1; if (LA (i)[j] & lookaheadset[j])
fp3 = lookaheadset; conflicts[state] = 1;
while (fp3 < fp4) for (j = 0; j < tokensetsize; ++j)
{ lookaheadset[j] |= LA (i)[j];
if (*fp2++ & *fp3++)
{
conflicts[state] = 1;
any_conflicts = 1;
}
}
fp2 = fp1;
fp3 = lookaheadset;
while (fp3 < fp4)
*fp3++ |= *fp2++;
} }
} }
@@ -271,10 +209,6 @@ solve_conflicts (void)
shiftset = XCALLOC (unsigned, tokensetsize); shiftset = XCALLOC (unsigned, tokensetsize);
lookaheadset = XCALLOC (unsigned, tokensetsize); lookaheadset = XCALLOC (unsigned, tokensetsize);
err_table = XCALLOC (errs *, nstates);
any_conflicts = 0;
for (i = 0; i < nstates; i++) for (i = 0; i < nstates; i++)
set_conflicts (i); set_conflicts (i);
} }
@@ -284,23 +218,15 @@ solve_conflicts (void)
| Count the number of shift/reduce conflicts. | | Count the number of shift/reduce conflicts. |
`---------------------------------------------*/ `---------------------------------------------*/
static void static int
count_sr_conflicts (int state) count_sr_conflicts (int state)
{ {
int i; int i, k;
int k; int src_count = 0;
int mask; shifts *shiftp = state_table[state].shifts;
shifts *shiftp;
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
int symbol;
src_count = 0;
shiftp = shift_table[state];
if (!shiftp) if (!shiftp)
return; return 0;
for (i = 0; i < tokensetsize; i++) for (i = 0; i < tokensetsize; i++)
{ {
@@ -308,49 +234,24 @@ count_sr_conflicts (int state)
lookaheadset[i] = 0; lookaheadset[i] = 0;
} }
k = shiftp->nshifts; for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
for (i = 0; i < k; i++) if (!SHIFT_IS_DISABLED (shiftp, i))
{ SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
if (!shiftp->shifts[i])
continue;
symbol = accessing_symbol[shiftp->shifts[i]];
if (ISVAR (symbol))
break;
SETBIT (shiftset, symbol);
}
k = lookaheads[state + 1]; for (i = state_table[state].lookaheads;
fp3 = lookaheadset + tokensetsize; i < state_table[state + 1].lookaheads;
++i)
for (k = 0; k < tokensetsize; ++k)
lookaheadset[k] |= LA (i)[k];
for (i = lookaheads[state]; i < k; i++) for (k = 0; k < tokensetsize; ++k)
{ lookaheadset[k] &= shiftset[k];
fp1 = LA + i * tokensetsize;
fp2 = lookaheadset;
while (fp2 < fp3)
*fp2++ |= *fp1++;
}
fp1 = shiftset;
fp2 = lookaheadset;
while (fp2 < fp3)
*fp2++ &= *fp1++;
mask = 1;
fp2 = lookaheadset;
for (i = 0; i < ntokens; i++) for (i = 0; i < ntokens; i++)
{ if (BITISSET (lookaheadset, i))
if (mask & *fp2) src_count++;
src_count++;
mask <<= 1; return src_count;
if (mask == 0)
{
mask = 1;
fp2++;
}
}
} }
@@ -358,51 +259,31 @@ count_sr_conflicts (int state)
| Count the number of reduce/reduce conflicts. | | Count the number of reduce/reduce conflicts. |
`----------------------------------------------*/ `----------------------------------------------*/
static void static int
count_rr_conflicts (int state) count_rr_conflicts (int state)
{ {
int i; int i;
int j; int rrc_count = 0;
int count;
unsigned mask;
unsigned *baseword;
unsigned *wordp;
int m;
int n;
rrc_count = 0; int m = state_table[state].lookaheads;
int n = state_table[state + 1].lookaheads;
m = lookaheads[state];
n = lookaheads[state + 1];
if (n - m < 2) if (n - m < 2)
return; return 0;
mask = 1;
baseword = LA + m * tokensetsize;
for (i = 0; i < ntokens; i++) for (i = 0; i < ntokens; i++)
{ {
wordp = baseword; int count = 0;
int j;
count = 0;
for (j = m; j < n; j++) for (j = m; j < n; j++)
{ if (BITISSET (LA (j), i))
if (mask & *wordp) count++;
count++;
wordp += tokensetsize;
}
if (count >= 2) if (count >= 2)
rrc_count++; rrc_count++;
mask <<= 1;
if (mask == 0)
{
mask = 1;
baseword++;
}
} }
return rrc_count;
} }
/*--------------------------------------------------------------. /*--------------------------------------------------------------.
@@ -416,31 +297,23 @@ conflict_report (int src_num, int rrc_num)
static char res[4096]; static char res[4096];
char *cp = res; char *cp = res;
if (src_num == 1) if (src_num >= 1)
{ {
sprintf (cp, _(" 1 shift/reduce conflict")); sprintf (cp, ngettext ("%d shift/reduce conflict",
cp += strlen (cp); "%d shift/reduce conflicts", src_num), src_num);
}
else if (src_num > 1)
{
sprintf (cp, _(" %d shift/reduce conflicts"), src_num);
cp += strlen (cp); cp += strlen (cp);
} }
if (src_num > 0 && rrc_num > 0) if (src_num > 0 && rrc_num > 0)
{ {
sprintf (cp, _(" and")); sprintf (cp, " %s ", _("and"));
cp += strlen (cp); cp += strlen (cp);
} }
if (rrc_num == 1) if (rrc_num >= 1)
{ {
sprintf (cp, _(" 1 reduce/reduce conflict")); sprintf (cp, ngettext ("%d reduce/reduce conflict",
cp += strlen (cp); "%d reduce/reduce conflicts", rrc_num), rrc_num);
}
else if (rrc_num > 1)
{
sprintf (cp, _(" %d reduce/reduce conflicts"), rrc_num);
cp += strlen (cp); cp += strlen (cp);
} }
@@ -452,36 +325,59 @@ conflict_report (int src_num, int rrc_num)
} }
/*---------------------------------------------. /*-----------------------------------------------------------.
| Compute and give a report on the conflicts. | | Output the detailed description of states with conflicts. |
`---------------------------------------------*/ `-----------------------------------------------------------*/
void void
print_conflicts (FILE *out) conflicts_output (FILE *out)
{
bool printed_sth = FALSE;
int i;
for (i = 0; i < nstates; i++)
if (conflicts[i])
{
fprintf (out, _("State %d contains "), i);
fputs (conflict_report (count_sr_conflicts (i),
count_rr_conflicts (i)), out);
printed_sth = TRUE;
}
if (printed_sth)
fputs ("\n\n", out);
}
/*------------------------------------------.
| Reporting the total number of conflicts. |
`------------------------------------------*/
void
conflicts_print (void)
{ {
int i; int i;
src_total = 0; /* Is the number of SR conflicts OK? Either EXPECTED_CONFLICTS is
rrc_total = 0; not set, and then we want 0 SR, or else it is specified, in which
case we want equality. */
int src_ok = 0;
/* Count the total number of conflicts, and if wanted, give a int src_total = 0;
detailed report in FOUTPUT. */ int rrc_total = 0;
/* Conflicts by state. */
for (i = 0; i < nstates; i++) for (i = 0; i < nstates; i++)
{ if (conflicts[i])
if (conflicts[i]) {
{ src_total += count_sr_conflicts (i);
count_sr_conflicts (i); rrc_total += count_rr_conflicts (i);
count_rr_conflicts (i); }
src_total += src_count;
rrc_total += rrc_count;
if (verbose_flag) src_ok = src_total == (expected_conflicts == -1 ? 0 : expected_conflicts);
{
fprintf (out, _("State %d contains"), i); /* If there are no RR conflicts, and as many SR conflicts as
fputs (conflict_report (src_count, rrc_count), out); expected, then there is nothing to report. */
} if (!rrc_total && src_ok)
} return;
}
/* Report the total number of conflicts on STDERR. */ /* Report the total number of conflicts on STDERR. */
if (yacc_flag) if (yacc_flag)
@@ -499,31 +395,34 @@ print_conflicts (FILE *out)
} }
else else
{ {
fprintf (stderr, _("%s contains"), infile); fprintf (stderr, _("%s contains "), infile);
fputs (conflict_report (src_total, rrc_total), stderr); fputs (conflict_report (src_total, rrc_total), stderr);
} }
if (expected_conflicts != -1 && !src_ok)
{
/* FIXME: BIG ATTROCIOUS HACK. For flames, complaints and so
on, see Bruno Haible. GNU Gettext's plural.y's %expect is
wrong, and newer Bison reject it. But then, Bruno will be
overwhelmed by bug reports, until a fixed Gettext is
released. So for the 1.3x generation only, we leave a puke
puke hack. */
if (!strsuffix (infile, "plural.y"))
complain_message_count++;
fprintf (stderr, ngettext ("expected %d shift/reduce conflict\n",
"expected %d shift/reduce conflicts\n",
expected_conflicts),
expected_conflicts);
}
} }
void void
print_reductions (int state) print_reductions (FILE *out, int state)
{ {
int i; int i;
int j;
int k;
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
unsigned *fp4;
int rule;
int symbol;
unsigned mask;
int m; int m;
int n; int n;
int default_LA;
int default_rule = 0;
int cmax;
int count;
shifts *shiftp; shifts *shiftp;
errs *errp; errs *errp;
int nodefault = 0; int nodefault = 0;
@@ -531,106 +430,61 @@ print_reductions (int state)
for (i = 0; i < tokensetsize; i++) for (i = 0; i < tokensetsize; i++)
shiftset[i] = 0; shiftset[i] = 0;
shiftp = shift_table[state]; shiftp = state_table[state].shifts;
if (shiftp) for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
{ if (!SHIFT_IS_DISABLED (shiftp, i))
k = shiftp->nshifts; {
for (i = 0; i < k; i++) /* if this state has a shift for the error token, don't use a
{ default rule. */
if (!shiftp->shifts[i]) if (SHIFT_IS_ERROR (shiftp, i))
continue; nodefault = 1;
symbol = accessing_symbol[shiftp->shifts[i]]; SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
if (ISVAR (symbol)) }
break;
/* if this state has a shift for the error token,
don't use a default rule. */
if (symbol == error_token_number)
nodefault = 1;
SETBIT (shiftset, symbol);
}
}
errp = err_table[state]; errp = state_table[state].errs;
if (errp) if (errp)
{ for (i = 0; i < errp->nerrs; i++)
k = errp->nerrs; if (errp->errs[i])
for (i = 0; i < k; i++) SETBIT (shiftset, errp->errs[i]);
{
if (!errp->errs[i])
continue;
symbol = errp->errs[i];
SETBIT (shiftset, symbol);
}
}
m = lookaheads[state]; m = state_table[state].lookaheads;
n = lookaheads[state + 1]; n = state_table[state + 1].lookaheads;
if (n - m == 1 && !nodefault) if (n - m == 1 && !nodefault)
{ {
default_rule = LAruleno[m]; int k;
int default_rule = LAruleno[m];
fp1 = LA + m * tokensetsize; for (k = 0; k < tokensetsize; ++k)
fp2 = shiftset; lookaheadset[k] = LA (m)[k] & shiftset[k];
fp3 = lookaheadset;
fp4 = lookaheadset + tokensetsize;
while (fp3 < fp4)
*fp3++ = *fp1++ & *fp2++;
mask = 1;
fp3 = lookaheadset;
for (i = 0; i < ntokens; i++) for (i = 0; i < ntokens; i++)
{ if (BITISSET (lookaheadset, i))
if (mask & *fp3) fprintf (out, _(" %-4s\t[reduce using rule %d (%s)]\n"),
obstack_fgrow3 (&output_obstack, tags[i], default_rule,
_(" %-4s\t[reduce using rule %d (%s)]\n"), tags[rule_table[default_rule].lhs]);
tags[i], default_rule, tags[rlhs[default_rule]]);
mask <<= 1; fprintf (out, _(" $default\treduce using rule %d (%s)\n\n"),
if (mask == 0) default_rule, tags[rule_table[default_rule].lhs]);
{
mask = 1;
fp3++;
}
}
obstack_fgrow2 (&output_obstack,
_(" $default\treduce using rule %d (%s)\n\n"),
default_rule, tags[rlhs[default_rule]]);
} }
else if (n - m >= 1) else if (n - m >= 1)
{ {
cmax = 0; int cmax = 0;
default_LA = -1; int default_LA = -1;
fp4 = lookaheadset + tokensetsize; int default_rule = 0;
if (!nodefault) if (!nodefault)
for (i = m; i < n; i++) for (i = m; i < n; i++)
{ {
fp1 = LA + i * tokensetsize; int count = 0;
fp2 = shiftset; int j, k;
fp3 = lookaheadset;
while (fp3 < fp4) for (k = 0; k < tokensetsize; ++k)
*fp3++ = *fp1++ & (~(*fp2++)); lookaheadset[k] = LA (i)[k] & ~shiftset[k];
count = 0;
mask = 1;
fp3 = lookaheadset;
for (j = 0; j < ntokens; j++) for (j = 0; j < ntokens; j++)
{ if (BITISSET (lookaheadset, j))
if (mask & *fp3) count++;
count++;
mask <<= 1;
if (mask == 0)
{
mask = 1;
fp3++;
}
}
if (count > cmax) if (count > cmax)
{ {
@@ -639,56 +493,35 @@ print_reductions (int state)
default_rule = LAruleno[i]; default_rule = LAruleno[i];
} }
fp2 = shiftset; for (k = 0; k < tokensetsize; ++k)
fp3 = lookaheadset; shiftset[k] |= lookaheadset[k];
while (fp3 < fp4)
*fp2++ |= *fp3++;
} }
for (i = 0; i < tokensetsize; i++) for (i = 0; i < tokensetsize; i++)
shiftset[i] = 0; shiftset[i] = 0;
if (shiftp) for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
{ if (!SHIFT_IS_DISABLED (shiftp, i))
k = shiftp->nshifts; SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
for (i = 0; i < k; i++)
{
if (!shiftp->shifts[i])
continue;
symbol = accessing_symbol[shiftp->shifts[i]];
if (ISVAR (symbol))
break;
SETBIT (shiftset, symbol);
}
}
mask = 1;
fp1 = LA + m * tokensetsize;
fp2 = shiftset;
for (i = 0; i < ntokens; i++) for (i = 0; i < ntokens; i++)
{ {
int j;
int defaulted = 0; int defaulted = 0;
int count = BITISSET (shiftset, i);
if (mask & *fp2)
count = 1;
else
count = 0;
fp3 = fp1;
for (j = m; j < n; j++) for (j = m; j < n; j++)
{ {
if (mask & *fp3) if (BITISSET (LA (j), i))
{ {
if (count == 0) if (count == 0)
{ {
if (j != default_LA) if (j != default_LA)
{ fprintf (out,
rule = LAruleno[j]; _(" %-4s\treduce using rule %d (%s)\n"),
obstack_fgrow3 (&output_obstack, tags[i],
_(" %-4s\treduce using rule %d (%s)\n"), LAruleno[j],
tags[i], rule, tags[rlhs[rule]]); tags[rule_table[LAruleno[j]].lhs]);
}
else else
defaulted = 1; defaulted = 1;
@@ -697,40 +530,25 @@ print_reductions (int state)
else else
{ {
if (defaulted) if (defaulted)
{ fprintf (out,
rule = LAruleno[default_LA]; _(" %-4s\treduce using rule %d (%s)\n"),
obstack_fgrow3 (&output_obstack, tags[i],
_(" %-4s\treduce using rule %d (%s)\n"), LAruleno[default_LA],
tags[i], rule, tags[rlhs[rule]]); tags[rule_table[LAruleno[default_LA]].lhs]);
defaulted = 0; defaulted = 0;
} fprintf (out,
rule = LAruleno[j];
obstack_fgrow3 (&output_obstack,
_(" %-4s\t[reduce using rule %d (%s)]\n"), _(" %-4s\t[reduce using rule %d (%s)]\n"),
tags[i], rule, tags[rlhs[rule]]); tags[i],
LAruleno[j],
tags[rule_table[LAruleno[j]].lhs]);
} }
} }
fp3 += tokensetsize;
}
mask <<= 1;
if (mask == 0)
{
mask = 1;
/* We tried incrementing just fp1, and just fp2; both seem wrong.
It seems necessary to increment both in sync. */
fp1++;
fp2++;
} }
} }
if (default_LA >= 0) if (default_LA >= 0)
obstack_fgrow2 (&output_obstack, fprintf (out, _(" $default\treduce using rule %d (%s)\n"),
_(" $default\treduce using rule %d (%s)\n"), default_rule, tags[rule_table[default_rule].lhs]);
default_rule, tags[rlhs[default_rule]]);
obstack_1grow (&output_obstack, '\n');
} }
} }
+4 -5
View File
@@ -1,5 +1,5 @@
/* Find and resolve or report look-ahead conflicts for bison, /* Find and resolve or report look-ahead conflicts for bison,
Copyright 2000 Free Software Foundation, Inc. Copyright 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -23,12 +23,11 @@
# include "state.h" # include "state.h"
void solve_conflicts PARAMS ((void)); void solve_conflicts PARAMS ((void));
void print_conflicts PARAMS ((FILE *out)); void conflicts_print PARAMS ((void));
void print_reductions PARAMS ((int)); void conflicts_output PARAMS ((FILE *out));
void print_reductions PARAMS ((FILE*out, int state));
void free_conflicts PARAMS ((void)); void free_conflicts PARAMS ((void));
/* Were there conflicts? */ /* Were there conflicts? */
extern int any_conflicts;
extern errs **err_table;
extern int expected_conflicts; extern int expected_conflicts;
#endif /* !CONFLICTS_H_ */ #endif /* !CONFLICTS_H_ */
+23 -32
View File
@@ -1,5 +1,5 @@
/* Match rules with nonterminals for bison, /* Match rules with nonterminals for bison,
Copyright 1984, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -19,50 +19,44 @@
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
/* set_derives finds, for each variable (nonterminal), which rules can
derive it. It sets up the value of derives so that derives[i -
ntokens] points to a vector of rule numbers, terminated with -1.
*/
#include "system.h" #include "system.h"
#include "getargs.h"
#include "types.h" #include "types.h"
#include "reader.h"
#include "gram.h" #include "gram.h"
#include "derives.h" #include "derives.h"
short **derives; short **derives = NULL;
#if DEBUG
static void static void
print_derives (void) print_derives (void)
{ {
int i; int i;
short *sp;
fputs ("\n\n\n", stdout); fputs ("DERIVES\n", stderr);
printf (_("DERIVES"));
fputs ("\n\n", stdout);
for (i = ntokens; i < nsyms; i++) for (i = ntokens; i < nsyms; i++)
{ {
printf (_("%s derives"), tags[i]); short *sp;
fprintf (stderr, "\t%s derives\n", tags[i]);
for (sp = derives[i]; *sp > 0; sp++) for (sp = derives[i]; *sp > 0; sp++)
{ {
printf (" %d", *sp); short *rhsp;
fprintf (stderr, "\t\t%d:", *sp);
for (rhsp = ritem + rule_table[*sp].rhs; *rhsp > 0; ++rhsp)
fprintf (stderr, " %s", tags[*rhsp]);
fprintf (stderr, " (rule %d)\n", -*rhsp);
} }
putchar ('\n');
} }
putchar ('\n'); fputs ("\n\n", stderr);
} }
#endif
void void
set_derives (void) set_derives (void)
{ {
int i; int i;
int lhs;
shorts *p; shorts *p;
short *q; short *q;
shorts **dset; shorts **dset;
@@ -73,16 +67,14 @@ set_derives (void)
p = delts; p = delts;
for (i = nrules; i > 0; i--) for (i = nrules; i > 0; i--)
{ if (rule_table[i].useful)
lhs = rlhs[i]; {
if (lhs >= 0) int lhs = rule_table[i].lhs;
{ p->next = dset[lhs];
p->next = dset[lhs]; p->value = i;
p->value = i; dset[lhs] = p;
dset[lhs] = p; p++;
p++; }
}
}
derives = XCALLOC (short *, nvars) - ntokens; derives = XCALLOC (short *, nvars) - ntokens;
q = XCALLOC (short, nvars + nrules); q = XCALLOC (short, nvars + nrules);
@@ -99,9 +91,8 @@ set_derives (void)
*q++ = -1; *q++ = -1;
} }
#if DEBUG if (trace_flag)
print_derives (); print_derives ();
#endif
XFREE (dset + ntokens); XFREE (dset + ntokens);
XFREE (delts); XFREE (delts);
+4 -5
View File
@@ -1,5 +1,5 @@
/* Match rules with nonterminals for bison, /* Match rules with nonterminals for bison,
Copyright 1984, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -21,12 +21,11 @@
#ifndef DERIVES_H_ #ifndef DERIVES_H_
# define DERIVES_H_ # define DERIVES_H_
/* DERIVES[SYMBOL - NTOKENS] points to a vector of the number of the
rules that SYMBOL derives, terminated with -1. */
extern short **derives; extern short **derives;
/* set_derives finds, for each variable (nonterminal), which rules can /* Compute DERIVES. */
derive it. It sets up the value of derives so that derives[i -
ntokens] points to a vector of rule numbers, terminated with -1.
*/
void set_derives PARAMS((void)); void set_derives PARAMS((void));
void free_derives PARAMS((void)); void free_derives PARAMS((void));
+129 -116
View File
@@ -1,5 +1,6 @@
/* Open and close files for bison, /* Open and close files for bison,
Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc. Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -23,8 +24,14 @@
#include "getargs.h" #include "getargs.h"
#include "files.h" #include "files.h"
#include "gram.h" #include "gram.h"
#include "error.h"
#include "complain.h" #include "complain.h"
/* From basename.c. Almost a lie, as it returns a char *. */
const char *base_name PARAMS ((char const *name));
/* From xstrndup.c. */
char *xstrndup PARAMS ((const char *s, size_t n));
FILE *finput = NULL; FILE *finput = NULL;
struct obstack action_obstack; struct obstack action_obstack;
@@ -44,7 +51,7 @@ char *spec_defines_file = NULL; /* for --defines. */
char *infile = NULL; char *infile = NULL;
char *attrsfile = NULL; char *attrsfile = NULL;
static char *base_name = NULL; static char *full_base_name = NULL;
static char *short_base_name = NULL; static char *short_base_name = NULL;
/* C source file extension (the parser source). */ /* C source file extension (the parser source). */
@@ -57,7 +64,7 @@ const char *header_extension = NULL;
| Is SUFFIX ending STRING? | | Is SUFFIX ending STRING? |
`--------------------------*/ `--------------------------*/
static int int
strsuffix (const char *string, const char *suffix) strsuffix (const char *string, const char *suffix)
{ {
size_t string_len = strlen (string); size_t string_len = strlen (string);
@@ -86,26 +93,36 @@ stringappend (const char *string1, const char *string2)
} }
/*---------------------------------------------------------------. /*-----------------------------------------------------------------.
| Computes the macro name used to avoid double inclusion in the | | Computes the macro name used to avoid double inclusion in the |
| header of the parser and store it in header_macro_name. | | header of the parser and store it in header_macro_name. Be sure |
`---------------------------------------------------------------*/ | to produce valid CPP names (don't start with digit, remain |
| alphanumerical + underscore). |
`-----------------------------------------------------------------*/
static char * static char *
compute_header_macro (void) compute_header_macro (void)
{ {
const char *prefix = "BISON_";
char *macro_name, *cp; char *macro_name, *cp;
if (spec_defines_file) if (spec_defines_file)
macro_name = xstrdup (spec_defines_file); {
macro_name = XMALLOC (char,
strlen (prefix) +
strlen (spec_defines_file) + 1);
cp = stpcpy (macro_name, prefix);
cp = stpcpy (cp, spec_defines_file);
}
else else
{ {
macro_name = XMALLOC (char, macro_name = XMALLOC (char,
strlen (base_name) + strlen (prefix) +
strlen (full_base_name) +
strlen (header_extension) + 1); strlen (header_extension) + 1);
cp = stpcpy (macro_name, prefix);
stpcpy (macro_name, base_name); cp = stpcpy (cp, full_base_name);
strcat (macro_name, header_extension); cp = stpcpy (cp, header_extension);
} }
for (cp = macro_name; *cp; ++cp) for (cp = macro_name; *cp; ++cp)
@@ -201,9 +218,9 @@ skeleton_find (const char *envvar, const char *skeleton_name)
if (!res) if (!res)
{ {
/* Skeleton file name without path */ /* Skeleton file name without path */
const char *skel_name = strrchr(skeleton_name, '/'); const char *skel_name = strrchr (skeleton_name, '/');
if (!skel_name) if (!skel_name)
skel_name = strrchr(skeleton_name, '\\'); skel_name = strrchr (skeleton_name, '\\');
if (!skel_name) if (!skel_name)
skel_name = skeleton_name; skel_name = skeleton_name;
else else
@@ -263,27 +280,6 @@ tr (const char *in, char from, char to)
return (temp); return (temp);
} }
/* Gets the extension index in FILENAME. Returns 0 if fails to
find an extension. */
static int
get_extension_index (const char *filename)
{
int len;
len = strlen (filename);
if (filename[len-- - 1] == '.')
return (0);
while ((len > 0) && (filename[len - 1] != '.'))
if (filename[len - 1] == '/')
return (0);
else
len--;
return (len - 1);
}
/* Computes extensions from the grammar file extension. */ /* Computes extensions from the grammar file extension. */
static void static void
compute_exts_from_gf (const char *ext) compute_exts_from_gf (const char *ext)
@@ -306,14 +302,61 @@ compute_exts_from_src (const char *ext)
header_extension = tr (header_extension, 'C', 'H'); header_extension = tr (header_extension, 'C', 'H');
} }
/* Decompose FILENAME in four parts: *BASE, *TAB, and *EXT, the fourth
part, (the directory) is ranging from FILENAME to the char before
*BASE, so we don't need an additional parameter.
*EXT points to the last period in the basename, or NULL if none.
If there is no *EXT, *TAB is NULL. Otherwise, *TAB points to
`.tab' or `_tab' if present right before *EXT, or is NULL. *TAB
cannot be equal to *BASE.
None are allocated, they are simply pointers to parts of FILENAME.
Examples:
'/tmp/foo.tab.c' -> *BASE = 'foo.tab.c', *TAB = '.tab.c', *EXT =
'.c'
'foo.c' -> *BASE = 'foo.c', *TAB = NULL, *EXT = '.c'
'tab.c' -> *BASE = 'tab.c', *TAB = NULL, *EXT = '.c'
'.tab.c' -> *BASE = '.tab.c', *TAB = NULL, *EXT = '.c'
'foo.tab' -> *BASE = 'foo.tab', *TAB = NULL, *EXT = '.tab'
'foo_tab' -> *BASE = 'foo_tab', *TAB = NULL, *EXT = NULL
'foo' -> *BASE = 'foo', *TAB = NULL, *EXT = NULL. */
static void
filename_split (const char *filename,
const char **base, const char **tab, const char **ext)
{
*base = base_name (filename);
/* Look for the extension, i.e., look for the last dot. */
*ext = strrchr (*base, '.');
*tab = NULL;
/* If there is an exentension, check if there is a `.tab' part right
before. */
if (*ext
&& (*ext - *base) > (int) strlen (".tab")
&& (!strncmp (*ext - strlen (".tab"), ".tab", strlen (".tab"))
|| !strncmp (*ext - strlen ("_tab"), "_tab", strlen ("_tab"))))
*tab = *ext - strlen (".tab");
}
/* FIXME: Should use xstrndup. */ /* FIXME: Should use xstrndup. */
static void static void
compute_base_names (void) compute_base_names (void)
{ {
size_t base_length; const char *base, *tab, *ext;
size_t short_base_length;
size_t ext_index;
/* If --output=foo.c was specified (SPEC_OUTFILE == foo.c), /* If --output=foo.c was specified (SPEC_OUTFILE == foo.c),
BASE_NAME and SHORT_BASE_NAME are `foo'. BASE_NAME and SHORT_BASE_NAME are `foo'.
@@ -325,94 +368,63 @@ compute_base_names (void)
files, remove the ".c" or ".tab.c" suffix. */ files, remove the ".c" or ".tab.c" suffix. */
if (spec_outfile) if (spec_outfile)
{ {
#ifdef MSDOS filename_split (spec_outfile, &base, &tab, &ext);
strlwr (spec_outfile);
#endif /* MSDOS */
/* BASE_LENGTH includes ".tab" but not ".c". */
base_length = strlen (spec_outfile);
ext_index = get_extension_index (spec_outfile); /* The full base name goes up the EXT, excluding it. */
/* If the initial segment of extension contains 'c' or a 'C', I assume full_base_name =
that it is a C or C++ source file. */ xstrndup (spec_outfile,
if (ext_index) (strlen (spec_outfile) - (ext ? strlen (ext) : 0)));
ext_index = /* The short base name goes up to TAB, excluding it. */
(strspn (spec_outfile + ext_index + 1, "cC")) ? ext_index : 0; short_base_name =
if (ext_index) xstrndup (spec_outfile,
{ (strlen (spec_outfile)
base_length -= strlen (spec_outfile + ext_index); - (tab ? strlen (tab) : (ext ? strlen (ext) : 0))));
compute_exts_from_src (spec_outfile + ext_index);
}
base_name = strndup (spec_outfile, base_length); if (ext)
/* SHORT_BASE_LENGTH includes neither ".tab" nor ".c". */ compute_exts_from_src (ext);
short_base_length = base_length;
if (strsuffix (base_name, ".tab") || strsuffix (base_name, "_tab"))
short_base_length -= 4;
short_base_name = strndup (spec_outfile, short_base_length);
return;
} }
/* If --file-prefix=foo was specified, BASE_NAME and SHORT_BASE_NAME /* If --file-prefix=foo was specified, FULL_BASE_NAME = `foo.tab'
are `foo'. and SHORT_BASE_NAME = `foo'.
Construct names from it. */ Construct names from it. */
if (spec_file_prefix) else
{ {
#ifdef MSDOS if (spec_file_prefix)
strlwr (spec_file_prefix); {
#endif /* MSDOS */ /* If --file-prefix=foo was specified, SHORT_BASE_NAME =
short_base_name = xstrdup (spec_file_prefix); `foo'. */
base_name = XMALLOC (char, short_base_name = xstrdup (spec_file_prefix);
strlen (short_base_name) + strlen (EXT_TAB) + 1); }
stpcpy (stpcpy (base_name, short_base_name), EXT_TAB); else if (yacc_flag)
{
/* If --yacc, then the output is `y.tab.c'. */
short_base_name = xstrdup ("y");
}
else
{
/* Otherwise, the short base name is computed from the input
grammar: `foo.yy' => `foo'. */
filename_split (infile, &base, &tab, &ext);
short_base_name =
xstrndup (infile,
(strlen (infile) - (ext ? strlen (ext) : 0)));
}
/* Computes the extensions from the garmmar file name. */ /* In these cases, always append `.tab'. */
ext_index = get_extension_index (infile); full_base_name = XMALLOC (char,
/* If the initial segment of extension contains a 'y' or a 'Y', I assume strlen (short_base_name)
that it is a yacc or bison grammar file. */ + strlen (EXT_TAB) + 1);
if (ext_index) stpcpy (stpcpy (full_base_name, short_base_name), EXT_TAB);
ext_index = (strspn (infile + ext_index + 1, "yY")) ? ext_index : 0;
if (ext_index)
compute_exts_from_gf (infile + ext_index);
return; /* Computes the extensions from the grammar file name. */
filename_split (infile, &base, &tab, &ext);
if (ext)
compute_exts_from_gf (ext);
} }
/* If neither -o nor --file-prefix were specified, and the input
file is foo.y, BASE_NAME is `foo.tab', and SHORT_BASE_NAME is
`foo'.
If --yacc is used, do as if the input file was `y.y'. */
{
const char *name_base = yacc_flag ? "y.y" : infile;
/* BASE_LENGTH gets length of BASE_NAME, sans ".y" suffix if any. */
base_length = strlen (name_base);
ext_index = get_extension_index (name_base);
/* If the initial segment of extension contains a 'y' or a 'Y', I assume
that it is a yacc or bison grammar file. */
if (ext_index)
ext_index = (strspn (name_base + ext_index + 1, "yY")) ? ext_index : 0;
if (ext_index)
{
base_length -= strlen (name_base + ext_index);
compute_exts_from_gf (name_base + ext_index);
}
short_base_length = base_length;
short_base_name = strndup (name_base, short_base_length);
base_name = XMALLOC (char,
strlen (short_base_name) + strlen (EXT_TAB) + 1);
stpcpy (stpcpy (base_name, short_base_name), EXT_TAB);
return;
}
} }
/*-------------------------------------------------------. /*-------------------------------------------------------.
| Close the open files, compute the output files names. | | Close the open files, compute the output files names. |
`-------------------------------------------------------*/ `-------------------------------------------------------*/
@@ -430,7 +442,7 @@ compute_output_file_names (void)
/* It the defines filename if not given, we create it. */ /* It the defines filename if not given, we create it. */
if (!spec_defines_file) if (!spec_defines_file)
spec_defines_file = stringappend (base_name, header_extension); spec_defines_file = stringappend (full_base_name, header_extension);
/* It the graph filename if not given, we create it. */ /* It the graph filename if not given, we create it. */
if (!spec_graph_file) if (!spec_graph_file)
@@ -487,7 +499,8 @@ output_files (void)
if (spec_outfile) if (spec_outfile)
obstack_save (&table_obstack, spec_outfile); obstack_save (&table_obstack, spec_outfile);
else else
obstack_save (&table_obstack, stringappend (base_name, src_extension)); obstack_save (&table_obstack,
stringappend (full_base_name, src_extension));
obstack_free (&table_obstack, NULL); obstack_free (&table_obstack, NULL);
/* Output the header file if wanted. */ /* Output the header file if wanted. */
+7 -3
View File
@@ -1,7 +1,5 @@
#ifndef FILES_H_
# define FILES_H_
/* File names and variables for bison, /* File names and variables for bison,
Copyright 1984, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1989, 2000, 2002 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -20,6 +18,9 @@
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#ifndef FILES_H_
# define FILES_H_
/* These two should be pathnames for opening the sample parser files. /* These two should be pathnames for opening the sample parser files.
When bison is installed, they should be absolute pathnames. When bison is installed, they should be absolute pathnames.
XPFILE1 and XPFILE2 normally come from config.h. */ XPFILE1 and XPFILE2 normally come from config.h. */
@@ -79,4 +80,7 @@ int xfclose PARAMS ((FILE *ptr));
const char *skeleton_find PARAMS ((const char *envvar, const char *skeleton_find PARAMS ((const char *envvar,
const char *skeleton_name)); const char *skeleton_name));
int strsuffix PARAMS ((const char *string, const char *suffix));
#endif /* !FILES_H_ */ #endif /* !FILES_H_ */
+19 -10
View File
@@ -32,9 +32,9 @@ int no_lines_flag = 0;
int no_parser_flag = 0; int no_parser_flag = 0;
int token_table_flag = 0; int token_table_flag = 0;
int verbose_flag = 0; int verbose_flag = 0;
int statistics_flag = 0;
int yacc_flag = 0; /* for -y */ int yacc_flag = 0; /* for -y */
int graph_flag = 0; int graph_flag = 0;
int trace_flag = 0;
const char *skeleton = NULL; const char *skeleton = NULL;
@@ -63,11 +63,12 @@ static struct option longopts[] =
{"defines", optional_argument, 0, 'd'}, {"defines", optional_argument, 0, 'd'},
{"verbose", no_argument, 0, 'v'}, {"verbose", no_argument, 0, 'v'},
{"file-prefix", required_argument, 0, 'b'}, {"file-prefix", required_argument, 0, 'b'},
{"output", required_argument, 0, 'o'},
{"output-file", required_argument, 0, 'o'}, {"output-file", required_argument, 0, 'o'},
{"graph", optional_argument, 0, 'g'}, {"graph", optional_argument, 0, 'g'},
/* Hidden. */ /* Hidden. */
{"statistics", no_argument, &statistics_flag, 1}, {"trace", no_argument, &trace_flag, 1},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
@@ -118,9 +119,9 @@ Output:\n\
-d, --defines also produce a header file\n\ -d, --defines also produce a header file\n\
-v, --verbose also produce an explanation of the automaton\n\ -v, --verbose also produce an explanation of the automaton\n\
-b, --file-prefix=PREFIX specify a PREFIX for output files\n\ -b, --file-prefix=PREFIX specify a PREFIX for output files\n\
-o, --output-file=FILE leave output to FILE\n\ -o, --output=FILE leave output to FILE\n\
-g, --graph also produce a VCG graph description of the \ -g, --graph also produce a VCG description of the automaton\n\
automaton\n"), stream); "), stream);
putc ('\n', stream); putc ('\n', stream);
fputs (_("\ fputs (_("\
@@ -158,6 +159,14 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
| Process the options. | | Process the options. |
`----------------------*/ `----------------------*/
/* Under DOS, there is no difference on the case. This can be
troublesome when looking for `.tab' etc. */
#ifdef MSDOS
# define AS_FILE_NAME(File) (strlwr (File), (File))
#else
# define AS_FILE_NAME(File) (File)
#endif
void void
getargs (int argc, char *argv[]) getargs (int argc, char *argv[])
{ {
@@ -185,7 +194,7 @@ getargs (int argc, char *argv[])
case 'g': case 'g':
/* Here, the -g and --graph=FILE options are differentiated. */ /* Here, the -g and --graph=FILE options are differentiated. */
graph_flag = 1; graph_flag = 1;
spec_graph_file = optarg; spec_graph_file = AS_FILE_NAME (optarg);
break; break;
case 'v': case 'v':
@@ -193,13 +202,13 @@ getargs (int argc, char *argv[])
break; break;
case 'S': case 'S':
skeleton = optarg; skeleton = AS_FILE_NAME (optarg);
break; break;
case 'd': case 'd':
/* Here, the -d and --defines options are differentiated. */ /* Here, the -d and --defines options are differentiated. */
defines_flag = 1; defines_flag = 1;
spec_defines_file = optarg; spec_defines_file = AS_FILE_NAME (optarg);
break; break;
case 'l': case 'l':
@@ -223,11 +232,11 @@ getargs (int argc, char *argv[])
break; break;
case 'o': case 'o':
spec_outfile = optarg; spec_outfile = AS_FILE_NAME (optarg);
break; break;
case 'b': case 'b':
spec_file_prefix = optarg; spec_file_prefix = AS_FILE_NAME (optarg);
break; break;
case 'p': case 'p':
+1 -1
View File
@@ -31,11 +31,11 @@ extern int defines_flag; /* for -d */
extern int locations_flag; extern int locations_flag;
extern int no_lines_flag; /* for -l */ extern int no_lines_flag; /* for -l */
extern int no_parser_flag; /* for -n */ extern int no_parser_flag; /* for -n */
extern int statistics_flag;
extern int token_table_flag; /* for -k */ extern int token_table_flag; /* for -k */
extern int verbose_flag; /* for -v */ extern int verbose_flag; /* for -v */
extern int graph_flag; /* for -g */ extern int graph_flag; /* for -g */
extern int yacc_flag; /* for -y */ extern int yacc_flag; /* for -y */
extern int trace_flag;
void getargs PARAMS ((int argc, char *argv[])); void getargs PARAMS ((int argc, char *argv[]));
+59 -22
View File
@@ -1,27 +1,27 @@
/* Allocate input grammar variables for bison, /* Allocate input grammar variables for bison,
Copyright 1984, 1986, 1989 Free Software Foundation, Inc. Copyright 1984, 1986, 1989, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
Bison is free software; you can redistribute it and/or modify Bison 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
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation; either version 2, or (at your option)
any later version. any later version.
Bison is distributed in the hope that it will be useful, Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#include "system.h" #include "system.h"
#include "gram.h"
void dummy PARAMS((void)); #include "reader.h"
/* comments for these variables are in gram.h */ /* comments for these variables are in gram.h */
@@ -32,15 +32,13 @@ int ntokens;
int nvars; int nvars;
short *ritem = NULL; short *ritem = NULL;
short *rlhs = NULL; rule_t *rule_table = NULL;
short *rrhs = NULL;
short *rprec = NULL; short *rprec = NULL;
short *rprecsym = NULL; short *rprecsym = NULL;
short *sprec = NULL; short *sprec = NULL;
short *rassoc = NULL; short *rassoc = NULL;
short *sassoc = NULL; short *sassoc = NULL;
short *token_translations = NULL; short *token_translations = NULL;
short *rline = NULL;
int start_symbol; int start_symbol;
@@ -52,10 +50,49 @@ int pure_parser;
int error_token_number; int error_token_number;
/* This is to avoid linker problems which occur on VMS when using GCC,
when the file in question contains data definitions only. */ /*------------------------.
| Dump RITEM for traces. |
`------------------------*/
void void
dummy (void) ritem_print (FILE *out)
{ {
int i;
fputs ("RITEM\n", out);
for (i = 0; ritem[i]; ++i)
if (ritem[i] > 0)
fprintf (out, " %s", tags[ritem[i]]);
else
fprintf (out, " (rule %d)\n", -ritem[i]);
fputs ("\n\n", out);
}
/*------------------------------------------.
| Return the size of the longest rule RHS. |
`------------------------------------------*/
size_t
ritem_longest_rhs (void)
{
short *itemp;
int length;
int max;
length = 0;
max = 0;
for (itemp = ritem; *itemp; itemp++)
if (*itemp > 0)
{
length++;
}
else
{
if (length > max)
max = length;
length = 0;
}
return max;
} }
+48 -19
View File
@@ -1,5 +1,5 @@
/* Data definitions for internal representation of bison's input, /* Data definitions for internal representation of bison's input,
Copyright 1984, 1986, 1989, 1992 Free Software Foundation, Inc. Copyright 1984, 1986, 1989, 1992, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -38,21 +38,38 @@
The rules receive rule numbers 1 to nrules in the order they are The rules receive rule numbers 1 to nrules in the order they are
written. Actions and guards are accessed via the rule number. written. Actions and guards are accessed via the rule number.
The rules themselves are described by three arrays: rrhs, rlhs and The rules themselves are described by several arrays: amongst which
ritem. rlhs[R] is the symbol number of the left hand side of rule RITEM, and RULE_TABLE.
R. The right hand side is stored as symbol numbers in a portion of
ritem. rrhs[R] contains the index in ritem of the beginning of the RULE_TABLE is an array of struct rule_s, which members are:
RULE_TABLE[R].lhs -- the symbol number of the left hand side of
rule R. If -1, the rule has been thrown out by reduce.c and should
be ignored.
RULE_TABLE[R].rhs -- the index in RITEM of the beginning of the
portion for rule R. portion for rule R.
If rlhs[R] is -1, the rule has been thrown out by reduce.c and RULE_TABLE[R].prec -- the precedence level of R.
should be ignored.
RULE_TABLE[R].precsym -- the symbol-number of the symbol in %prec
for R (if any).
RULE_TABLE[R].assoc -- the associativity of R.
RULE_TABLE[R].line -- the line where R was defined.
RULE_TABLE[R].useful -- TRUE iff the rule is used.
The right hand side is stored as symbol numbers in a portion of
RITEM.
The length of the portion is one greater than the number of symbols The length of the portion is one greater than the number of symbols
in the rule's right hand side. The last element in the portion in the rule's right hand side. The last element in the portion
contains minus R, which identifies it as the end of a portion and contains minus R, which identifies it as the end of a portion and
says which rule it is for. says which rule it is for.
The portions of ritem come in order of increasing rule number and The portions of RITEM come in order of increasing rule number and
are followed by an element which is zero to mark the end. nitems are followed by an element which is zero to mark the end. nitems
is the total length of ritem, not counting the final zero. Each is the total length of ritem, not counting the final zero. Each
element of ritem is called an "item" and its index in ritem is an element of ritem is called an "item" and its index in ritem is an
@@ -61,10 +78,7 @@
Item numbers are used in the finite state machine to represent Item numbers are used in the finite state machine to represent
places that parsing can get to. places that parsing can get to.
Precedence levels are recorded in the vectors sprec and rprec. SPREC records the precedence level of each symbol.
sprec records the precedence level of each symbol, rprec the
precedence level of each rule. rprecsym is the symbol-number of
the symbol in %prec for this rule (if any).
Precedence levels are assigned in increasing order starting with 1 Precedence levels are assigned in increasing order starting with 1
so that numerically higher precedence values mean tighter binding so that numerically higher precedence values mean tighter binding
@@ -84,18 +98,12 @@ extern int ntokens;
extern int nvars; extern int nvars;
extern short *ritem; extern short *ritem;
extern short *rlhs;
extern short *rrhs;
extern short *rprec;
extern short *rprecsym;
extern short *sprec; extern short *sprec;
extern short *rassoc;
extern short *sassoc; extern short *sassoc;
extern short *rline; /* Source line number of each rule */
extern int start_symbol; extern int start_symbol;
/* associativity values in elements of rassoc, sassoc. */ /* associativity values in elements of rassoc, sassoc. */
typedef enum typedef enum
{ {
@@ -105,6 +113,19 @@ typedef enum
} associativity; } associativity;
typedef struct rule_s
{
short lhs;
short rhs;
short prec;
short precsym;
short assoc;
short line;
bool useful;
} rule_t;
extern struct rule_s *rule_table;
/* token translation table: indexed by a token number as returned by /* token translation table: indexed by a token number as returned by
the user's yylex routine, it yields the internal token number used the user's yylex routine, it yields the internal token number used
by the parser and throughout bison. */ by the parser and throughout bison. */
@@ -126,4 +147,12 @@ extern int pure_parser;
/* ERROR_TOKEN_NUMBER is the token number of the error token. */ /* ERROR_TOKEN_NUMBER is the token number of the error token. */
extern int error_token_number; extern int error_token_number;
/* Dump RITEM for traces. */
void ritem_print PARAMS ((FILE *out));
/* Return the size of the longest rule RHS. */
size_t ritem_longest_rhs PARAMS ((void));
#endif /* !GRAM_H_ */ #endif /* !GRAM_H_ */
+262 -364
View File
@@ -1,5 +1,5 @@
/* Compute look-ahead criteria for bison, /* Compute look-ahead criteria for bison,
Copyright 1984, 1986, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1986, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -31,88 +31,80 @@
#include "lalr.h" #include "lalr.h"
#include "nullable.h" #include "nullable.h"
#include "derives.h" #include "derives.h"
#include "getargs.h"
/* All the decorated states, indexed by the state number. Warning:
there is a state_TABLE in LR0.c, but it is different and static.
*/
state_t *state_table = NULL;
int tokensetsize; int tokensetsize;
short *lookaheads;
short *LAruleno; short *LAruleno;
unsigned *LA; unsigned *LA;
short *accessing_symbol;
char *consistent; static int ngotos;
core **state_table;
shifts **shift_table;
reductions **reduction_table;
short *goto_map; short *goto_map;
short *from_state; short *from_state;
short *to_state; short *to_state;
extern void berror PARAMS ((const char *)); /* And for the famous F variable, which name is so descriptive that a
comment is hardly needed. <grin>. */
static unsigned *F = NULL;
#define F(Rule) (F + (Rule) * tokensetsize)
static int infinity;
static int maxrhs;
static int ngotos;
static unsigned *F;
static short **includes; static short **includes;
static shorts **lookback; static shorts **lookback;
/*---------------------------------------------------------------.
| digraph & traverse. |
| |
| The following variables are used as common storage between the |
| two. |
`---------------------------------------------------------------*/
static short **R; static short **R;
static short *INDEX; static short *INDEX;
static short *VERTICES; static short *VERTICES;
static int top; static int top;
static int infinity;
static void static void
traverse (int i) traverse (int i)
{ {
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
int j; int j;
short *rp; size_t k;
int height; int height;
unsigned *base; size_t size = F (i + 1) - F(i);
VERTICES[++top] = i; VERTICES[++top] = i;
INDEX[i] = height = top; INDEX[i] = height = top;
base = F + i * tokensetsize; if (R[i])
fp3 = base + tokensetsize; for (j = 0; R[i][j] >= 0; ++j)
{
if (INDEX[R[i][j]] == 0)
traverse (R[i][j]);
rp = R[i]; if (INDEX[i] > INDEX[R[i][j]])
if (rp) INDEX[i] = INDEX[R[i][j]];
{
while ((j = *rp++) >= 0)
{
if (INDEX[j] == 0)
traverse (j);
if (INDEX[i] > INDEX[j]) for (k = 0; k < size; ++k)
INDEX[i] = INDEX[j]; F (i)[k] |= F (R[i][j])[k];
}
fp1 = base;
fp2 = F + j * tokensetsize;
while (fp1 < fp3)
*fp1++ |= *fp2++;
}
}
if (INDEX[i] == height) if (INDEX[i] == height)
{ for (;;)
for (;;) {
{ j = VERTICES[top--];
j = VERTICES[top--]; INDEX[j] = infinity;
INDEX[j] = infinity;
if (i == j) if (i == j)
break; break;
fp1 = base; for (k = 0; k < size; ++k)
fp2 = F + j * tokensetsize; F (j)[k] = F (i)[k];
}
while (fp1 < fp3)
*fp2++ = *fp1++;
}
}
} }
@@ -132,87 +124,85 @@ digraph (short **relation)
INDEX[i] = 0; INDEX[i] = 0;
for (i = 0; i < ngotos; i++) for (i = 0; i < ngotos; i++)
{ if (INDEX[i] == 0 && R[i])
if (INDEX[i] == 0 && R[i]) traverse (i);
traverse (i);
}
XFREE (INDEX); XFREE (INDEX);
XFREE (VERTICES); XFREE (VERTICES);
} }
/*--------------------.
| Build STATE_TABLE. |
`--------------------*/
static void static void
set_state_table (void) set_state_table (void)
{ {
core *sp; /* NSTATES + 1 because lookahead for the pseudo state number NSTATES
might be used (see conflicts.c). It is too opaque for me to
provide a probably less hacky implementation. --akim */
state_table = XCALLOC (state_t, nstates + 1);
state_table = XCALLOC (core *, nstates); {
core *sp;
for (sp = first_state; sp; sp = sp->next)
{
state_table[sp->number].state = sp;
state_table[sp->number].accessing_symbol = sp->accessing_symbol;
}
}
for (sp = first_state; sp; sp = sp->next) {
state_table[sp->number] = sp; shifts *sp;
} for (sp = first_shift; sp; sp = sp->next)
state_table[sp->number].shifts = sp;
}
{
reductions *rp;
for (rp = first_reduction; rp; rp = rp->next)
state_table[rp->number].reductions = rp;
}
static void /* Pessimization, but simplification of the code: make sense all the
set_accessing_symbol (void) states have a shifts, even if reduced to 0 shifts. */
{ {
core *sp; int i;
for (i = 0; i < nstates; i++)
if (!state_table[i].shifts)
state_table[i].shifts = shifts_new (0);
}
accessing_symbol = XCALLOC (short, nstates); /* Initializing the lookaheads members. Please note that it must be
performed after having set some of the other members which are
used below. Change with extreme caution. */
{
int i;
int count = 0;
for (i = 0; i < nstates; i++)
{
int k;
reductions *rp = state_table[i].reductions;
shifts *sp = state_table[i].shifts;
for (sp = first_state; sp; sp = sp->next) state_table[i].lookaheads = count;
accessing_symbol[sp->number] = sp->accessing_symbol;
}
if (rp
&& (rp->nreds > 1 || (sp->nshifts && SHIFT_IS_SHIFT (sp, 0))))
count += rp->nreds;
else
state_table[i].consistent = 1;
static void for (k = 0; k < sp->nshifts; k++)
set_shift_table (void) if (SHIFT_IS_ERROR (sp, k))
{ {
shifts *sp; state_table[i].consistent = 0;
break;
shift_table = XCALLOC (shifts *, nstates); }
}
for (sp = first_shift; sp; sp = sp->next) state_table[nstates].lookaheads = count;
shift_table[sp->number] = sp; }
}
static void
set_reduction_table (void)
{
reductions *rp;
reduction_table = XCALLOC (reductions *, nstates);
for (rp = first_reduction; rp; rp = rp->next)
reduction_table[rp->number] = rp;
}
static void
set_maxrhs (void)
{
short *itemp;
int length;
int max;
length = 0;
max = 0;
for (itemp = ritem; *itemp; itemp++)
{
if (*itemp > 0)
{
length++;
}
else
{
if (length > max)
max = length;
length = 0;
}
}
maxrhs = max;
} }
@@ -221,65 +211,23 @@ initialize_LA (void)
{ {
int i; int i;
int j; int j;
int count;
reductions *rp;
shifts *sp;
short *np; short *np;
reductions *rp;
consistent = XCALLOC (char, nstates); size_t nLA = state_table[nstates].lookaheads;
lookaheads = XCALLOC (short, nstates + 1); if (!nLA)
nLA = 1;
count = 0; LA = XCALLOC (unsigned, nLA * tokensetsize);
for (i = 0; i < nstates; i++) LAruleno = XCALLOC (short, nLA);
{ lookback = XCALLOC (shorts *, nLA);
int k;
lookaheads[i] = count;
rp = reduction_table[i];
sp = shift_table[i];
if (rp && (rp->nreds > 1
|| (sp && !ISVAR (accessing_symbol[sp->shifts[0]]))))
count += rp->nreds;
else
consistent[i] = 1;
if (sp)
for (k = 0; k < sp->nshifts; k++)
{
if (accessing_symbol[sp->shifts[k]] == error_token_number)
{
consistent[i] = 0;
break;
}
}
}
lookaheads[nstates] = count;
if (count == 0)
{
LA = XCALLOC (unsigned, 1 * tokensetsize);
LAruleno = XCALLOC (short, 1);
lookback = XCALLOC (shorts *, 1);
}
else
{
LA = XCALLOC (unsigned, count * tokensetsize);
LAruleno = XCALLOC (short, count);
lookback = XCALLOC (shorts *, count);
}
np = LAruleno; np = LAruleno;
for (i = 0; i < nstates; i++) for (i = 0; i < nstates; i++)
{ if (!state_table[i].consistent)
if (!consistent[i]) if ((rp = state_table[i].reductions))
{ for (j = 0; j < rp->nreds; j++)
if ((rp = reduction_table[i])) *np++ = rp->rules[j];
for (j = 0; j < rp->nreds; j++)
*np++ = rp->rules[j];
}
}
} }
@@ -299,13 +247,10 @@ set_goto_map (void)
ngotos = 0; ngotos = 0;
for (sp = first_shift; sp; sp = sp->next) for (sp = first_shift; sp; sp = sp->next)
{ if (sp->nshifts)
for (i = sp->nshifts - 1; i >= 0; i--) for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
{ {
symbol = accessing_symbol[sp->shifts[i]]; symbol = state_table[sp->shifts[i]].accessing_symbol;
if (ISTOKEN (symbol))
break;
if (ngotos == MAXSHORT) if (ngotos == MAXSHORT)
fatal (_("too many gotos (max %d)"), MAXSHORT); fatal (_("too many gotos (max %d)"), MAXSHORT);
@@ -313,7 +258,6 @@ set_goto_map (void)
ngotos++; ngotos++;
goto_map[symbol]++; goto_map[symbol]++;
} }
}
k = 0; k = 0;
for (i = ntokens; i < nsyms; i++) for (i = ntokens; i < nsyms; i++)
@@ -334,18 +278,16 @@ set_goto_map (void)
for (sp = first_shift; sp; sp = sp->next) for (sp = first_shift; sp; sp = sp->next)
{ {
state1 = sp->number; state1 = sp->number;
for (i = sp->nshifts - 1; i >= 0; i--) if (sp->nshifts)
{ for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
state2 = sp->shifts[i]; {
symbol = accessing_symbol[state2]; state2 = sp->shifts[i];
symbol = state_table[state2].accessing_symbol;
if (ISTOKEN (symbol)) k = temp_map[symbol]++;
break; from_state[k] = state1;
to_state[k] = state2;
k = temp_map[symbol]++; }
from_state[k] = state1;
to_state[k] = state2;
}
} }
XFREE (temp_map + ntokens); XFREE (temp_map + ntokens);
@@ -389,73 +331,46 @@ map_goto (int state, int symbol)
static void static void
initialize_F (void) initialize_F (void)
{ {
short **reads = XCALLOC (short *, ngotos);
short *edge = XCALLOC (short, ngotos + 1);
int nedges = 0;
int i; int i;
int j;
int k;
shifts *sp;
short *edge;
unsigned *rowp;
short *rp;
short **reads;
int nedges;
int stateno;
int symbol;
int nwords;
nwords = ngotos * tokensetsize; F = XCALLOC (unsigned, ngotos * tokensetsize);
F = XCALLOC (unsigned, nwords);
reads = XCALLOC (short *, ngotos);
edge = XCALLOC (short, ngotos + 1);
nedges = 0;
rowp = F;
for (i = 0; i < ngotos; i++) for (i = 0; i < ngotos; i++)
{ {
stateno = to_state[i]; int stateno = to_state[i];
sp = shift_table[stateno]; shifts *sp = state_table[stateno].shifts;
if (sp) int j;
for (j = 0; j < sp->nshifts && SHIFT_IS_SHIFT (sp, j); j++)
{ {
k = sp->nshifts; int symbol = state_table[sp->shifts[j]].accessing_symbol;
SETBIT (F (i), symbol);
for (j = 0; j < k; j++)
{
symbol = accessing_symbol[sp->shifts[j]];
if (ISVAR (symbol))
break;
SETBIT (rowp, symbol);
}
for (; j < k; j++)
{
symbol = accessing_symbol[sp->shifts[j]];
if (nullable[symbol])
edge[nedges++] = map_goto (stateno, symbol);
}
if (nedges)
{
reads[i] = rp = XCALLOC (short, nedges + 1);
for (j = 0; j < nedges; j++)
rp[j] = edge[j];
rp[nedges] = -1;
nedges = 0;
}
} }
rowp += tokensetsize; for (; j < sp->nshifts; j++)
{
int symbol = state_table[sp->shifts[j]].accessing_symbol;
if (nullable[symbol])
edge[nedges++] = map_goto (stateno, symbol);
}
if (nedges)
{
reads[i] = XCALLOC (short, nedges + 1);
shortcpy (reads[i], edge, nedges);
reads[i][nedges] = -1;
nedges = 0;
}
} }
digraph (reads); digraph (reads);
for (i = 0; i < ngotos; i++) for (i = 0; i < ngotos; i++)
{ XFREE (reads[i]);
if (reads[i])
XFREE (reads[i]);
}
XFREE (reads); XFREE (reads);
XFREE (edge); XFREE (edge);
@@ -470,8 +385,8 @@ add_lookback_edge (int stateno, int ruleno, int gotono)
int found; int found;
shorts *sp; shorts *sp;
i = lookaheads[stateno]; i = state_table[stateno].lookaheads;
k = lookaheads[stateno + 1]; k = state_table[stateno + 1].lookaheads;
found = 0; found = 0;
while (!found && i < k) while (!found && i < k)
{ {
@@ -490,56 +405,87 @@ add_lookback_edge (int stateno, int ruleno, int gotono)
} }
static void
matrix_print (FILE *out, short **matrix, int n)
{
int i, j;
for (i = 0; i < n; ++i)
{
fprintf (out, "%3d: ", i);
if (matrix[i])
for (j = 0; matrix[i][j] != -1; ++j)
fprintf (out, "%3d ", matrix[i][j]);
fputc ('\n', out);
}
fputc ('\n', out);
}
/*-------------------------------------------------------------------.
| Return the transpose of R_ARG, of size N. Destroy R_ARG, as it is |
| replaced with the result. |
| |
| R_ARG[I] is NULL or a -1 terminated list of numbers. |
| |
| RESULT[NUM] is NULL or the -1 terminated list of the I such as NUM |
| is in R_ARG[I]. |
`-------------------------------------------------------------------*/
static short ** static short **
transpose (short **R_arg, int n) transpose (short **R_arg, int n)
{ {
short **new_R; /* The result. */
short **temp_R; short **new_R = XCALLOC (short *, n);
short *nedges; /* END_R[I] -- next entry of NEW_R[I]. */
short *sp; short **end_R = XCALLOC (short *, n);
int i; /* NEDGES[I] -- total size of NEW_R[I]. */
int k; short *nedges = XCALLOC (short, n);
int i, j;
nedges = XCALLOC (short, n); if (trace_flag)
for (i = 0; i < n; i++)
{ {
sp = R_arg[i]; fputs ("transpose: input\n", stderr);
if (sp) matrix_print (stderr, R_arg, n);
{
while (*sp >= 0)
nedges[*sp++]++;
}
} }
new_R = XCALLOC (short *, n); /* Count. */
temp_R = XCALLOC (short *, n);
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ if (R_arg[i])
k = nedges[i]; for (j = 0; R_arg[i][j] >= 0; ++j)
if (k > 0) ++nedges[R_arg[i][j]];
{
sp = XCALLOC (short, k + 1);
new_R[i] = sp;
temp_R[i] = sp;
sp[k] = -1;
}
}
XFREE (nedges);
/* Allocate. */
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ if (nedges[i] > 0)
sp = R_arg[i]; {
if (sp) short *sp = XCALLOC (short, nedges[i] + 1);
{ sp[nedges[i]] = -1;
while (*sp >= 0) new_R[i] = sp;
*temp_R[*sp++]++ = i; end_R[i] = sp;
} }
}
XFREE (temp_R); /* Store. */
for (i = 0; i < n; i++)
if (R_arg[i])
for (j = 0; R_arg[i][j] >= 0; ++j)
{
*end_R[R_arg[i][j]] = i;
++end_R[R_arg[i][j]];
}
free (nedges);
free (end_R);
/* Free the input: it is replaced with the result. */
for (i = 0; i < n; i++)
XFREE (R_arg[i]);
free (R_arg);
if (trace_flag)
{
fputs ("transpose: output\n", stderr);
matrix_print (stderr, new_R, n);
}
return new_R; return new_R;
} }
@@ -548,57 +494,42 @@ transpose (short **R_arg, int n)
static void static void
build_relations (void) build_relations (void)
{ {
short *edge = XCALLOC (short, ngotos + 1);
short *states = XCALLOC (short, ritem_longest_rhs () + 1);
int i; int i;
int j;
int k;
short *rulep;
short *rp;
shifts *sp;
int length;
int nedges;
int done;
int state1;
int stateno;
int symbol1;
int symbol2;
short *shortp;
short *edge;
short *states;
short **new_includes;
includes = XCALLOC (short *, ngotos); includes = XCALLOC (short *, ngotos);
edge = XCALLOC (short, ngotos + 1);
states = XCALLOC (short, maxrhs + 1);
for (i = 0; i < ngotos; i++) for (i = 0; i < ngotos; i++)
{ {
nedges = 0; int nedges = 0;
state1 = from_state[i]; int state1 = from_state[i];
symbol1 = accessing_symbol[to_state[i]]; int symbol1 = state_table[to_state[i]].accessing_symbol;
short *rulep;
for (rulep = derives[symbol1]; *rulep > 0; rulep++) for (rulep = derives[symbol1]; *rulep > 0; rulep++)
{ {
length = 1; int done;
int length = 1;
int stateno = state1;
short *rp;
states[0] = state1; states[0] = state1;
stateno = state1;
for (rp = ritem + rrhs[*rulep]; *rp > 0; rp++) for (rp = ritem + rule_table[*rulep].rhs; *rp > 0; rp++)
{ {
symbol2 = *rp; shifts *sp = state_table[stateno].shifts;
sp = shift_table[stateno]; int j;
k = sp->nshifts; for (j = 0; j < sp->nshifts; j++)
for (j = 0; j < k; j++)
{ {
stateno = sp->shifts[j]; stateno = sp->shifts[j];
if (accessing_symbol[stateno] == symbol2) if (state_table[stateno].accessing_symbol == *rp)
break; break;
} }
states[length++] = stateno; states[length++] = stateno;
} }
if (!consistent[stateno]) if (!state_table[stateno].consistent)
add_lookback_edge (stateno, *rulep, i); add_lookback_edge (stateno, *rulep, i);
length--; length--;
@@ -620,25 +551,18 @@ build_relations (void)
if (nedges) if (nedges)
{ {
includes[i] = shortp = XCALLOC (short, nedges + 1); int j;
includes[i] = XCALLOC (short, nedges + 1);
for (j = 0; j < nedges; j++) for (j = 0; j < nedges; j++)
shortp[j] = edge[j]; includes[i][j] = edge[j];
shortp[nedges] = -1; includes[i][nedges] = -1;
} }
} }
new_includes = transpose (includes, ngotos);
for (i = 0; i < ngotos; i++)
if (includes[i])
XFREE (includes[i]);
XFREE (includes);
includes = new_includes;
XFREE (edge); XFREE (edge);
XFREE (states); XFREE (states);
includes = transpose (includes, ngotos);
} }
@@ -651,10 +575,7 @@ compute_FOLLOWS (void)
digraph (includes); digraph (includes);
for (i = 0; i < ngotos; i++) for (i = 0; i < ngotos; i++)
{ XFREE (includes[i]);
if (includes[i])
XFREE (includes[i]);
}
XFREE (includes); XFREE (includes);
} }
@@ -664,39 +585,20 @@ static void
compute_lookaheads (void) compute_lookaheads (void)
{ {
int i; int i;
int n;
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
shorts *sp; shorts *sp;
unsigned *rowp;
shorts *sptmp; /* JF */
rowp = LA; for (i = 0; i < state_table[nstates].lookaheads; i++)
n = lookaheads[nstates]; for (sp = lookback[i]; sp; sp = sp->next)
for (i = 0; i < n; i++) {
{ int size = LA (i + 1) - LA (i);
fp3 = rowp + tokensetsize; int j;
for (sp = lookback[i]; sp; sp = sp->next) for (j = 0; j < size; ++j)
{ LA (i)[j] |= F (sp->value)[j];
fp1 = rowp; }
fp2 = F + tokensetsize * sp->value;
while (fp1 < fp3)
*fp1++ |= *fp2++;
}
rowp = fp3; /* Free LOOKBACK. */
} for (i = 0; i < state_table[nstates].lookaheads; i++)
LIST_FREE (shorts, lookback[i]);
for (i = 0; i < n; i++)
{
/* JF removed ref to freed storage */
for (sp = lookback[i]; sp; sp = sptmp)
{
sptmp = sp->next;
XFREE (sp);
}
}
XFREE (lookback); XFREE (lookback);
XFREE (F); XFREE (F);
@@ -709,10 +611,6 @@ lalr (void)
tokensetsize = WORDSIZE (ntokens); tokensetsize = WORDSIZE (ntokens);
set_state_table (); set_state_table ();
set_accessing_symbol ();
set_shift_table ();
set_reduction_table ();
set_maxrhs ();
initialize_LA (); initialize_LA ();
set_goto_map (); set_goto_map ();
initialize_F (); initialize_F ();
+28 -13
View File
@@ -49,12 +49,6 @@ extern short *goto_map;
extern short *from_state; extern short *from_state;
extern short *to_state; extern short *to_state;
/* CONSISTENT[S] is nonzero if no lookahead is needed to decide what
to do in state S. */
extern char *consistent;
/* LARULENO is a vector which records the rules that need lookahead in /* LARULENO is a vector which records the rules that need lookahead in
various states. The elements of LARULENO that apply to state S are various states. The elements of LARULENO that apply to state S are
those from LOOKAHEADS[S] through LOOKAHEADS[S+1]-1. Each element those from LOOKAHEADS[S] through LOOKAHEADS[S+1]-1. Each element
@@ -72,15 +66,36 @@ extern short *LAruleno;
it is a conflict. */ it is a conflict. */
extern unsigned *LA; extern unsigned *LA;
#define LA(Rule) (LA + (Rule) * tokensetsize)
/* A structure decorating a state, with additional information. */
typedef struct state_s
{
/* A state. */
core *state;
/* Its accessing symbol. */
short accessing_symbol;
shifts *shifts;
reductions *reductions;
errs *errs;
/* Nonzero if no lookahead is needed to decide what to do in state
S. */
char consistent;
short lookaheads;
} state_t;
/* All the decorated states, indexed by the state number. Warning:
there is a state_TABLE in LR0.c, but it is different and static.
*/
extern state_t *state_table;
extern int tokensetsize; extern int tokensetsize;
extern short *lookaheads;
extern short *accessing_symbol;
extern core **state_table;
extern shifts **shift_table;
extern reductions **reduction_table;
/* The number of lookaheads. */
extern size_t nlookaheads;
#endif /* !LALR_H_ */ #endif /* !LALR_H_ */

Some files were not shown because too many files have changed in this diff Show More