Compare commits

..
70 Commits
Author SHA1 Message Date
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
59 changed files with 3156 additions and 2648 deletions
+415 -5
View File
@@ -1,3 +1,418 @@
2001-12-05 Akim Demaille <[email protected]>
Version 1.30f.
2001-12-05 Akim Demaille <[email protected]>
* tests/atlocal.in (CPPFLAGS): Do not leave a space between -I and
its argument.
Reported by Peter Hámorský.
2001-12-05 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/output.c (pack_vector): Use assert, not berror.
* src/main.c (berror): Remove, unused.
2001-12-05 Akim Demaille <[email protected]>
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 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/closure.c (print_closure): Improve.
(closure): Use it for printing input and output.
2001-12-05 Akim Demaille <[email protected]>
* src/closure.c (FIRSTS, FDERIVES): Adjust to reality: they are
indexed by nonterminals.
2001-12-05 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/closure.c (set_fderives): De-obfuscate.
2001-12-05 Akim Demaille <[email protected]>
* src/closure.c (print_firsts, print_fderives): De-obfuscate.
2001-12-05 Akim Demaille <[email protected]>
* src/closure.c (set_firsts): De-obfuscate.
2001-12-05 Akim Demaille <[email protected]>
* src/output.c (action_row): De-obfuscate
using the good o' techniques: arrays not pointers, variable
locality, BITISSET, RESETBIT etc.
2001-12-05 Akim Demaille <[email protected]>
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 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/state.h (SHIFT_SYMBOL): New.
* src/conflicts.c: Use it to deobfuscate.
2001-12-05 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/conflicts.c (print_reductions): Arrays, not pointers.
Use BITISSET.
2001-12-05 Akim Demaille <[email protected]>
* src/conflicts.c (print_reductions): Pessimize, but clarify.
2001-12-05 Akim Demaille <[email protected]>
* src/conflicts.c (print_reductions): Improve variable locality.
2001-12-05 Akim Demaille <[email protected]>
* src/conflicts.c (print_reductions): Pessimize, but clarify.
2001-12-05 Akim Demaille <[email protected]>
* src/conflicts.c (print_reductions): Improve variable locality.
2001-12-05 Akim Demaille <[email protected]>
* src/state.h (SHIFT_IS_ERROR, SHIFT_IS_GOTO, SHIFT_IS_SHIFT): New.
* src/lalr.c: Use them.
2001-12-05 Akim Demaille <[email protected]>
* src/LR0.c (augment_automaton): Formatting changes.
Better variable locality.
2001-12-05 Akim Demaille <[email protected]>
* src/lalr.c (matrix_print): New.
(transpose): Use it.
Use arrays instead of pointers.
2001-12-05 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/lalr.c (initialize_F): Improve variable locality.
Avoid variables used as mere abbreviations.
2001-12-05 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/lalr.c (traverse): Use arrays instead of pointers.
2001-12-05 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
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 Akim Demaille <[email protected]>
* src/nullable.c (set_nullable): Deobfuscate the handling of
ritem.
`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
2001-12-05 Akim Demaille <[email protected]>
* 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-04 Paul Eggert <[email protected]>
* 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.
(yystpcpy): Use prototype if __STDC__ is defined, not just
if __cplusplus is defined.
2001-11-30 Akim Demaille <[email protected]>
* 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 Paul Eggert <[email protected]>
* 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 Paul Eggert <[email protected]>
Name space cleanup in generated parser.
* doc/bison.texinfo (Bison Parser): Discuss system headers
and their effect on the user name space.
* src/bison.simple:
(YYSTACK_ALLOC, YYSTACK_FREE, union yyalloc, YYSTACK_GAP_MAX,
YYSTACK_BYTES, YYSTACK_RELOCATE): Do not define unless necessary,
i.e. unless ! defined (yyoverflow) || defined (YYERROR_VERBOSE).
(YYSIZE_T): New macro. Use it instead of size_t, to avoid infringing
on user names when possible.
(YYSTACK_USE_ALLOCA): Do not define; just use any existing defn.
Simplify test for whather <alloca.h> exists.
(<stdlib.h>): Include if we will use malloc, and if standard C or C++.
(<stdio.h>): Include if YYDEBUG.
(yymemcpy): Renamed from __yy_memcpy. Do not define unless
! defined (yyoverflow) && ! defined (yymemcpy).
(yymemcpy, yyparse): Rename local variables as needed so that
they all begin with 'yy'.
(yystrlen, yystpcpy): New functions.
(YY_DECL_NON_LSP_VARIABLES): Renamed from _YY_DECL_VARIABLES.
All uses changed.
(yyparse): size_t -> YYSIZE_T. Use yystrlen and yystpcpy
instead of relying on string.h functions. Use YYSTACK_ALLOC
and YYSTACK_FREE instead of malloc and free.
2001-11-30 Akim Demaille <[email protected]>
* src/bison.simple (YYSTACK_FREE): Use `do {;} while (0)' as empty
if body instead of `;' to pacify GCC's warnings.
2001-11-30 Akim Demaille <[email protected]>
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 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/reduce.c: Various comment/formatting changes.
(nonterminals_reduce): New, extracted from...
(reduce_grammar_tables): here.
(reduce_grammar): Call nonterminals_reduce.
2001-11-29 Paul Eggert <[email protected]>
* 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-28 Akim Demaille <[email protected]>
* src/LR0.c (shifts_new): New.
(save_shifts, insert_start_shift, augment_automaton): Use it.
2001-11-28 Akim Demaille <[email protected]>
* src/closure.c (closure): `b' and `ruleno' denote the same value:
keep ruleno only.
2001-11-28 Akim Demaille <[email protected]>
* src/closure.c (closure): Instead of looping over word in array
then bits in words, loop over bits in array.
2001-11-28 Akim Demaille <[email protected]>
* 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 Akim Demaille <[email protected]>
* src/closure.c (closure): `r' and `c' are new variables, used to
de-obfuscate accesses to RULESET and CORE.
2001-11-28 Akim Demaille <[email protected]>
* src/reduce.c (reduce_print): Use ngettext.
(dump_grammar): Improve the trace accuracy.
2001-11-28 Akim Demaille <[email protected]>
* src/reduce.c (dump_grammar): Don't translate trace messages.
2001-11-28 Akim Demaille <[email protected]>
* 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-27 Akim Demaille <[email protected]>
* src/system.h: Use intl/libgettext.h.
* src/Makefile.am (INCLUDES): Add -I $(top_srcdir).
2001-11-27 Paul Eggert <[email protected]>
* 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 Akim Demaille <[email protected]>
* tests/torture.at (Exploding the Stack Size with Malloc):
s/YYSTACK_USE_ALLOCA_ALLOCA/YYSTACK_USE_ALLOCA/.
2001-11-27 Akim Demaille <[email protected]>
* src/files.c: Include error.h.
From Hans Aberg.
2001-11-26 Akim Demaille <[email protected]>
Version 1.30e.
@@ -39,11 +454,6 @@
conflicts as expected.
* tests/regression.at (%expect right): Adjust.
2001-11-25 Marc Autret <[email protected]>
* doc/bison.texinfo (Mystery Conflicts): Hint '-v' use.
From Golubev I. N.
2001-11-23 Akim Demaille <[email protected]>
* lib/alloca.c: Update, from fileutils.
+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-*-
AUTOMAKE_OPTIONS = 1.5 check-news readme-alpha dist-bzip2
+8
View File
@@ -1,6 +1,14 @@
Bison News
----------
Changes in version 1.30f:
* Reduced Grammars
Fixed bugs when reporting useless nonterminals.
* 64 bit hosts
The parsers work properly on 64 bit hosts.
Changes in version 1.30e:
* Error messages
+2 -1
View File
@@ -8,8 +8,8 @@ Alexander Belopolsky [email protected]
Daniel Hagerty [email protected]
David J. MacKenzie [email protected]
Dick Streefland [email protected]
Enrico Scholz [email protected]
Fabrice Bauzac [email protected]
Golubev I. N [email protected]
Hans Aberg [email protected]
Jesse Thilo [email protected]
Jim Meyering [email protected]
@@ -22,6 +22,7 @@ Noah Friedman [email protected]
Pascal Bart [email protected]
Paul Eggert [email protected]
Per Allansson [email protected]
Peter Hámorský [email protected]
Piotr Gackiewicz [email protected]
Richard Stallman [email protected]
Robert Anisko [email protected]
+6 -5
View File
@@ -3,7 +3,7 @@
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
timestamp='2001-11-21'
timestamp='2001-12-03'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -249,9 +249,9 @@ case $basic_machine in
| sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
| strongarm \
| tahoe | thumb | tic80 | tron \
| v850 \
| v850 | v850e \
| we32k \
| x86 | xscale | xstormy16 \
| x86 | xscale | xstormy16 | xtensa \
| z8k)
basic_machine=$basic_machine-unknown
;;
@@ -307,9 +307,10 @@ case $basic_machine in
| sparc-* | sparc64-* | sparc86x-* | sparclite-* \
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* \
| t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
| v850-* | vax-* \
| v850-* | v850e-* | vax-* \
| we32k-* \
| x86-* | x86_64-* | xmp-* | xps100-* | xscale-* | xstormy16-* \
| xtensa-* \
| ymp-* \
| z8k-*)
;;
@@ -1074,7 +1075,7 @@ case $os in
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux*)
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
Vendored
+56 -11
View File
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.52g for GNU Bison 1.30e.
# Generated by GNU Autoconf 2.52g for GNU Bison 1.30f.
#
# Report bugs to <[email protected]>.
#
@@ -332,8 +332,8 @@ mandir='${prefix}/man'
# Identity of this package.
PACKAGE_NAME='GNU Bison'
PACKAGE_TARNAME='bison'
PACKAGE_VERSION='1.30e'
PACKAGE_STRING='GNU Bison 1.30e'
PACKAGE_VERSION='1.30f'
PACKAGE_STRING='GNU Bison 1.30f'
PACKAGE_BUGREPORT='[email protected]'
ac_prev=
@@ -760,7 +760,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures GNU Bison 1.30e to adapt to many kinds of systems.
\`configure' configures GNU Bison 1.30f to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -826,7 +826,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of GNU Bison 1.30e:";;
short | recursive ) echo "Configuration of GNU Bison 1.30f:";;
esac
cat <<\_ACEOF
@@ -921,7 +921,7 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
GNU Bison configure 1.30e
GNU Bison configure 1.30f
generated by GNU Autoconf 2.52g
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
@@ -936,7 +936,7 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by GNU Bison $as_me 1.30e, which was
It was created by GNU Bison $as_me 1.30f, which was
generated by GNU Autoconf 2.52g. Invocation command line was
$ $0 $@
@@ -1470,7 +1470,7 @@ fi
# Define the identity of the package.
PACKAGE=bison
VERSION=1.30e
VERSION=1.30f
cat >>confdefs.h <<_ACEOF
#define PACKAGE "$PACKAGE"
@@ -3734,7 +3734,52 @@ echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
CFLAGS="$ac_save_CFLAGS"
CFLAGS="$CFLAGS $WARNING_CFLAGS"
echo "$as_me:$LINENO: checking whether compiler accepts -Werror" >&5
echo $ECHO_N "checking whether compiler accepts -Werror... $ECHO_C" >&6
ac_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror"
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
#include "confdefs.h"
#ifdef F77_DUMMY_MAIN
# ifdef __cplusplus
extern "C"
# endif
int F77_DUMMY_MAIN() { return 1; }
#endif
int
main ()
{
int x;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
WARNING_CFLAGS="$WARNING_CFLAGS -Werror"
echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
CFLAGS="$ac_save_CFLAGS"
fi
# Checks for libraries.
@@ -9104,7 +9149,7 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
This file was extended by GNU Bison $as_me 1.30e, which was
This file was extended by GNU Bison $as_me 1.30f, which was
generated by GNU Autoconf 2.52g. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9166,7 +9211,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
GNU Bison config.status 1.30e
GNU Bison config.status 1.30f
configured by $0, generated by GNU Autoconf 2.52g,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+5 -3
View File
@@ -1,5 +1,7 @@
# Configure template for GNU Bison. -*-Autoconf-*-
#
# 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 of the License, or
@@ -18,10 +20,10 @@
# We need a recent Autoconf to run a recent Autotest.
AC_PREREQ(2.52g)
AC_INIT([GNU Bison], [1.30e], [[email protected]])
AC_INIT([GNU Bison], [1.30f], [[email protected]])
AC_CONFIG_AUX_DIR(config)
AM_INIT_AUTOMAKE([bison], [1.30e])
AM_INIT_AUTOMAKE([bison], [1.30f])
AM_CONFIG_HEADER(config.h:config.hin)
# Initialize the test suite.
@@ -59,7 +61,7 @@ if test "${enableval}" = yes; then
BISON_WARNING(-Wshadow)
BISON_WARNING(-Wstrict-prototypes)
BISON_WARNING(-Wwrite-strings)
CFLAGS="$CFLAGS $WARNING_CFLAGS"
BISON_WARNING(-Werror)
fi
# Checks for libraries.
+11 -4
View File
@@ -693,7 +693,7 @@ arrange for it to call @code{yyparse} or the parser will never run.
@xref{Interface, ,Parser C-Language Interface}.
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
such as the lexical analyzer function @code{yylex}, the error reporting
function @code{yyerror} and the parser function @code{yyparse} itself.
@@ -702,6 +702,14 @@ 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
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. On all hosts,
@code{<stdio.h>} is included if you define @code{YYDEBUG}
(@pxref{Debugging, ,Debugging Your Parser}).
@node Stages
@section Stages in Using Bison
@cindex stages in using Bison
@@ -4506,9 +4514,8 @@ produce parsers that are very large. In practice, Bison is more useful
as it is now.
When the problem arises, you can often fix it by identifying the two
parser states that are being confused (using @samp{-v}
(@pxref{Invocation, ,Invoking Bison}) can help), and adding something to
make them look distinct. In the above example, adding one rule to
parser states that are being confused, and adding something to make them
look distinct. In the above example, adding one rule to
@code{return_spec} as follows makes the problem go away:
@example
+3 -3
View File
@@ -1,4 +1,4 @@
@set UPDATED 26 November 2001
@set UPDATED 30 November 2001
@set UPDATED-MONTH November 2001
@set EDITION 1.30e
@set VERSION 1.30e
@set EDITION 1.30f
@set VERSION 1.30f
+18 -1
View File
@@ -1,7 +1,24 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
## 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 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
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS)
noinst_LIBRARIES = libbison.a
INCLUDES = -I.. -I$(srcdir) -I../intl
+2 -1
View File
@@ -103,6 +103,8 @@ install_sh = @install_sh@
AUTOMAKE_OPTIONS = ansi2knr
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS)
noinst_LIBRARIES = libbison.a
INCLUDES = -I.. -I$(srcdir) -I../intl
@@ -150,7 +152,6 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
DIST_SOURCES = $(libbison_a_SOURCES)
DIST_COMMON = Makefile.am Makefile.in alloca.c ansi2knr.1 ansi2knr.c \
error.c error.h malloc.c memchr.c obstack.c obstack.h realloc.c \
+23 -10
View File
@@ -44,9 +44,15 @@
#ifndef CHAR_BIT
# define CHAR_BIT 8
#endif
#ifndef SIZE_MAX
# define SIZE_MAX ((size_t) -1)
#endif
#ifndef UCHAR_MAX
# define UCHAR_MAX ((unsigned char) -1)
#endif
#ifndef UINT_MAX
# define UINT_MAX ((unsigned int) -1)
#endif
#if HAVE_C_BACKSLASH_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. */
static char slot0[256];
static unsigned int nslots = 1;
unsigned int n0 = n;
struct slotvec
{
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 *slotvec = &slotvec0;
if (nslots <= n)
if (n < 0)
abort ();
if (nslots <= n0)
{
int n1 = n + 1;
size_t s = n1 * sizeof (struct slotvec);
if (! (0 < n1 && n1 == s / sizeof (struct slotvec)))
abort ();
unsigned int n1 = n0 + 1;
size_t s = n1 * sizeof *slotvec;
if (SIZE_MAX / UINT_MAX <= sizeof *slotvec
&& n1 != s / sizeof *slotvec)
xalloc_die ();
if (slotvec == &slotvec0)
{
slotvec = (struct slotvec *) xmalloc (sizeof (struct slotvec));
slotvec = (struct slotvec *) xmalloc (sizeof *slotvec);
*slotvec = slotvec0;
}
slotvec = (struct slotvec *) xrealloc (slotvec, s);
memset (slotvec + nslots, 0, (n1 - nslots) * sizeof (struct slotvec));
nslots = n;
memset (slotvec + nslots, 0, (n1 - nslots) * sizeof *slotvec);
nslots = n1;
}
{
@@ -580,7 +593,7 @@ quotearg_n_options (int n, char const *arg,
}
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);
}
@@ -592,7 +605,7 @@ quotearg (char const *arg)
}
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;
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
reused by the next call to this function with the same value of N.
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). */
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.
This is like quotearg_n (N, ARG), except that it uses S with no other
options to specify the quoting method. */
char *quotearg_n_style PARAMS ((unsigned int n, enum quoting_style s,
char const *arg));
char *quotearg_n_style PARAMS ((int n, enum quoting_style s, char const *arg));
/* Equivalent to quotearg_n_style (0, S, ARG). */
char *quotearg_style PARAMS ((enum quoting_style s, char const *arg));
+2 -10
View File
@@ -1,5 +1,5 @@
/* 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
it under the terms of the GNU General Public License as published by
@@ -19,14 +19,6 @@
# include <config.h>
#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
# include <string.h>
#else
@@ -35,7 +27,7 @@
#include <sys/types.h>
char *xmalloc PARAMS ((size_t n));
#include "xalloc.h"
/* Return a newly allocated copy of STRING. */
-1
View File
@@ -5,7 +5,6 @@ src/files.c
src/getargs.c
src/lalr.c
src/lex.c
src/main.c
src/output.c
src/print.c
src/print_graph.c
+96 -99
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 1996-10-10 17:54 MET DST\n"
"Last-Translator: Ulrich Drepper <[email protected]>\n"
"Language-Team: German <[email protected]>\n"
@@ -31,78 +31,78 @@ msgstr ""
msgid "fatal error: "
msgstr "fataler Fehler: %s\n"
#: src/conflicts.c:45
#: src/conflicts.c:44
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr "Konflikt in Zustand %d zwischen Regel %d and Token %s wurde %s.\n"
#: src/conflicts.c:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "durch Reduzierung gelöst"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "durch Schieben gelöst"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "als Fehler betrachtet"
#: src/conflicts.c:389
#: src/conflicts.c:302
#, fuzzy, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] " %d Schiebe/Reduziere Konflikte"
#: src/conflicts.c:396
#: src/conflicts.c:309
#, fuzzy
msgid "and"
msgstr " und"
#: src/conflicts.c:402
#: src/conflicts.c:315
#, fuzzy, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] " %d Reduziere/Reduziere Konflikte"
#: src/conflicts.c:426
#: src/conflicts.c:340
#, fuzzy, c-format
msgid "State %d contains "
msgstr "Zustand %d enthält"
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "Konflikte: "
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d Schiebe/Reduziere"
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d Reduziere/Reduziere"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s enthält "
#: src/conflicts.c:488
#: src/conflicts.c:405
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d Schiebe/Reduziere Konflikte"
#: src/conflicts.c:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[reduziere mit Regel %d (%s)]\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -111,22 +111,22 @@ msgstr ""
" $default\treduziere mit Regel %d (%s)\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\treduziere mit Tegel %d (%s)\n"
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\treduziere mit Regel %d (%s)\n"
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr ""
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr ""
@@ -220,7 +220,7 @@ msgstr "%s: keine Grammatik-Datei angegeben\n"
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: zusätzliche Argumente nach »%s« werden ignoriert\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, c-format
msgid "too many gotos (max %d)"
msgstr ""
@@ -280,55 +280,50 @@ msgstr ""
msgid "`%s' requires an argument"
msgstr "%s: die Option »%s« erfordert ein Argument\n"
#: src/main.c:134
#, fuzzy, c-format
msgid "%s: internal error: %s\n"
msgstr "interner Fehler, %s\n"
#: src/output.c:979
#: src/output.c:949
#, fuzzy, c-format
msgid "maximum table size (%d) exceeded"
msgstr "maximale Tabellengröße (%s) überschritten"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " Typ %d ist %s\n"
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (Regel %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $default\takzeptiere\n"
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " KEINE AKTIONEN\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tgehe zu Zustand %d über\n"
#: src/print.c:123
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tSchiebe und gehe zu Zustand %d über\n"
#: src/print.c:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tFehler (nicht assoziativ)\n"
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tgehe zu Zustand %d über\n"
#: src/print.c:185
#: src/print.c:180
#, fuzzy, c-format
msgid "state %d"
msgstr ""
@@ -338,28 +333,28 @@ msgstr ""
"\n"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
#, fuzzy
msgid "Grammar"
msgstr ""
"\n"
"Grammatik\n"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
#: src/print.c:221
#: src/print.c:217
#, fuzzy, c-format
msgid " %3d %3d %s ->"
msgstr "Regel %-4d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr ""
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
#, fuzzy
msgid "Terminals, with rules where they appear"
msgstr ""
@@ -367,7 +362,7 @@ msgstr ""
"Terminale und die Regeln un denen sie verwendet werden\n"
"\n"
#: src/print.c:257
#: src/print.c:256
#, fuzzy
msgid "Nonterminals, with rules where they appear"
msgstr ""
@@ -375,11 +370,11 @@ msgstr ""
"Nicht-Terminal und die Regeln in denen sie verwendet werden\n"
"\n"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " auf der linken Seite:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " auf der rechten Seite:"
@@ -388,7 +383,7 @@ msgstr " auf der rechten Seite:"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, fuzzy, c-format
msgid "%-4s\terror (nonassociative)"
msgstr " %-4s\tFehler (nicht assoziativ)\n"
@@ -397,7 +392,7 @@ msgstr " %-4s\tFehler (nicht assoziativ)\n"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, fuzzy, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr " $default\treduziere mit Regel %d (%s)\n"
@@ -629,14 +624,14 @@ msgstr "das Startsymbol %s ist undefiniert"
msgid "the start symbol %s is a token"
msgstr "das Startsymbol %s ist ein Token"
#: src/reduce.c:400
#: src/reduce.c:409
#, fuzzy
msgid "Useless nonterminals:"
msgstr ""
"Nutzlose Nicht-Terminale:\n"
"\n"
#: src/reduce.c:414
#: src/reduce.c:422
#, fuzzy
msgid "Terminals which are not used:"
msgstr ""
@@ -645,7 +640,7 @@ msgstr ""
"Nicht genutzte Terminale:\n"
"\n"
#: src/reduce.c:425
#: src/reduce.c:433
#, fuzzy
msgid "Useless rules:"
msgstr ""
@@ -654,60 +649,29 @@ msgstr ""
"Ungenutzte Regeln:\n"
"\n"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Variablen\n"
"---------\n"
"\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d wurde niemals reduziert\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "Wert Sprec Sassoc Tag\n"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d ungenutzte Nicht-Terminal"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Regeln\n"
"------\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"interpretierete Regeln\n"
"----------------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d wurde niemals reduziert\n"
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d ungenutzte Nicht-Terminal"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr " und "
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d ungenutzte Regel"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d ungenutzte Regel"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "es lassen sich keine Sätze vom Startsymbol %s ableiten"
@@ -792,11 +756,11 @@ msgstr "%s: Hauptspeicher ersch
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr ""
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr ""
@@ -843,6 +807,9 @@ msgstr ""
#~ msgid "limit of %d exceeded, too many %s"
#~ msgstr "Grenze von %d erreicht, zu viele %s"
#~ msgid "internal error, %s\n"
#~ msgstr "interner Fehler, %s\n"
#~ msgid "Entering set_nullable"
#~ msgstr "Führe »set_nullable« aus"
@@ -878,3 +845,33 @@ msgstr ""
#~ msgstr ""
#~ "Reduzierung von %s definiert %d Terminal, %d Nicht-Terminal und %d "
#~ "Produktionen.\n"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variablen\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Wert Sprec Sassoc Tag\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Regeln\n"
#~ "------\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "interpretierete Regeln\n"
#~ "----------------------\n"
#~ "\n"
+96 -99
View File
@@ -30,7 +30,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.25\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 1998-09-21 10:19+0200\n"
"Last-Translator: Nicolás García-Pedrajas <[email protected]>\n"
"Language-Team: Spanish <[email protected]>\n"
@@ -63,50 +63,50 @@ msgstr ""
msgid "fatal error: "
msgstr "error grave: %s\n"
#: src/conflicts.c:45
#: src/conflicts.c:44
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr ""
"El conflicto en el estado %s entre la regla %d y el terminal %s se resuelve "
"como %s.\n"
#: src/conflicts.c:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "reduce"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "desplaza"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "un error"
#: src/conflicts.c:389
#: src/conflicts.c:302
#, fuzzy, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] " %d conflictos desplazamiento/reducción"
#: src/conflicts.c:396
#: src/conflicts.c:309
#, fuzzy
msgid "and"
msgstr " y"
#: src/conflicts.c:402
#: src/conflicts.c:315
#, fuzzy, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] " %d conflictos reducción/reducción"
#: src/conflicts.c:426
#: src/conflicts.c:340
#, fuzzy, c-format
msgid "State %d contains "
msgstr "El estado %d contiene"
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "conflictos: "
@@ -122,7 +122,7 @@ msgstr "conflictos: "
# ok
# ngp
#
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d desplazamiento(s)/reducción(ones)"
@@ -139,28 +139,28 @@ msgstr " %d desplazamiento(s)/reducci
#
# ok
# ngp
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d reducción(ones)/reducción(ones)"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s contiene "
#: src/conflicts.c:488
#: src/conflicts.c:405
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d conflictos desplazamiento/reducción"
#: src/conflicts.c:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[reduce usando la regla %d (%s)]\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -169,22 +169,22 @@ msgstr ""
" $default\treduce usando la regla %d (%s)\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\treduce usando la regla %d (%s)\n"
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\treduce usando la regla %d (%s)\n"
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr ""
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr ""
@@ -281,7 +281,7 @@ msgstr "%s: no se ha especificado ning
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: los argumentos extra después de '%s' no se tendrán en cuenta\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, c-format
msgid "too many gotos (max %d)"
msgstr ""
@@ -343,60 +343,55 @@ msgstr ""
msgid "`%s' requires an argument"
msgstr "%s: la opción `%s' requiere un argumento\n"
#: src/main.c:134
#, fuzzy, c-format
msgid "%s: internal error: %s\n"
msgstr "error interno, %s\n"
# Únicamente cambio la posición del adjetivo `máximo'. En vez de después
# de `tabla', después de `tamaño' - cll
# en inglés era así, pero quizás en español sea mejor como dices
# ngp
#
#: src/output.c:979
#: src/output.c:949
#, fuzzy, c-format
msgid "maximum table size (%d) exceeded"
msgstr "excedido el tamaño máximo de la tabla (%s)"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " el tipo %d es %s\n"
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (regla %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $default\taceptar\n"
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " SIN ACCIONES\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tir al estado %d\n"
#: src/print.c:123
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tdesplazar e ir al estado %d\n"
#: src/print.c:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\terror (no asociativo)\n"
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tir al estado %d\n"
#: src/print.c:185
#: src/print.c:180
#, fuzzy, c-format
msgid "state %d"
msgstr ""
@@ -406,28 +401,28 @@ msgstr ""
"\n"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
#, fuzzy
msgid "Grammar"
msgstr ""
"\n"
"Gramática\n"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
#: src/print.c:221
#: src/print.c:217
#, fuzzy, c-format
msgid " %3d %3d %s ->"
msgstr "regla %-4d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr ""
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
#, fuzzy
msgid "Terminals, with rules where they appear"
msgstr ""
@@ -435,18 +430,18 @@ msgstr ""
"Terminales con las reglas donde aparecen\n"
"\n"
#: src/print.c:257
#: src/print.c:256
#, fuzzy
msgid "Nonterminals, with rules where they appear"
msgstr ""
"\n"
"No terminales con las reglas donde aparecen\n"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " en la izquierda:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " en la derecha:"
@@ -455,7 +450,7 @@ msgstr " en la derecha:"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, fuzzy, c-format
msgid "%-4s\terror (nonassociative)"
msgstr " %-4s\terror (no asociativo)\n"
@@ -464,7 +459,7 @@ msgstr " %-4s\terror (no asociativo)\n"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, fuzzy, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr " $default\treduce usando la regla %d (%s)\n"
@@ -718,14 +713,14 @@ msgstr "el s
msgid "the start symbol %s is a token"
msgstr "el símbolo de inicio (axioma) %s es un terminal"
#: src/reduce.c:400
#: src/reduce.c:409
#, fuzzy
msgid "Useless nonterminals:"
msgstr ""
"No terminales sin uso:\n"
"\n"
#: src/reduce.c:414
#: src/reduce.c:422
#, fuzzy
msgid "Terminals which are not used:"
msgstr ""
@@ -734,7 +729,7 @@ msgstr ""
"Terminales que no se usan:\n"
"\n"
#: src/reduce.c:425
#: src/reduce.c:433
#, fuzzy
msgid "Useless rules:"
msgstr ""
@@ -743,60 +738,29 @@ msgstr ""
"Reglas sin uso:\n"
"\n"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Variables\n"
"---------\n"
"\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d reglas que nunca se han reducido\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "Valor Sprec Sasoc Tag\n"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d no terminales %s sin uso"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Reglas\n"
"------\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"Reglas interpretadas\n"
"--------------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d reglas que nunca se han reducido\n"
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d no terminales %s sin uso"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr " y "
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d regla%s sin uso"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d regla%s sin uso"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "El símbolo de inicio (axioma) %s no deriva ninguna sentencia"
@@ -905,11 +869,11 @@ msgstr "%s: memoria agotada\n"
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr ""
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr ""
@@ -1030,6 +994,9 @@ msgstr ""
#~ msgid "limit of %d exceeded, too many %s"
#~ msgstr "excedido el límite de %d, demasiados %s"
#~ msgid "internal error, %s\n"
#~ msgstr "error interno, %s\n"
#~ msgid "Entering set_nullable"
#~ msgstr "Entrando set_nullable"
@@ -1086,3 +1053,33 @@ msgstr ""
#~ msgstr ""
#~ "la reducción de %s define %d terminal%s, %d no terminal%s, y %d produccion"
#~ "%s.\n"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Valor Sprec Sasoc Tag\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Reglas\n"
#~ "------\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Reglas interpretadas\n"
#~ "--------------------\n"
#~ "\n"
+101 -104
View File
@@ -4,9 +4,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.30d\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"PO-Revision-Date: 2001-11-21 17:33+0200\n"
"Project-Id-Version: bison 1.30e\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 2001-11-26 22:45+0200\n"
"Last-Translator: Toomas Soome <[email protected]>\n"
"Language-Team: Estonian <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -30,80 +30,80 @@ msgstr "hoiatus: "
msgid "fatal error: "
msgstr "fataalne viga: "
#: src/conflicts.c:45
#: src/conflicts.c:44
#, c-format
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"
#: src/conflicts.c:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "redutseerimine"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "nihutamine"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "viga"
#: src/conflicts.c:389
#: src/conflicts.c:302
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d nihutamine/redutseerimine konflikt"
msgstr[1] "%d nihutamine/redutseerimine konflikti"
#: src/conflicts.c:396
#: src/conflicts.c:309
msgid "and"
msgstr "ja"
#: src/conflicts.c:402
#: src/conflicts.c:315
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d redutseerimine/redutseerimine konflikt"
msgstr[1] "%d redutseerimine/redutseerimine konflikti"
#: src/conflicts.c:426
#: src/conflicts.c:340
#, c-format
msgid "State %d contains "
msgstr "Olek %d sisaldab "
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "konfliktid: "
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d nihutamine/redutseerimine"
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d redutseerimine/redutseerimine"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s sisaldab "
#: src/conflicts.c:488
#: src/conflicts.c:405
#, 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:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[redutseerin, kasutades reeglit %d (%s)]\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -112,22 +112,22 @@ msgstr ""
" $default\tredutseerin kasutades reeglit %d (%s)\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\tredutseerin kasutades reeglit %d (%s)\n"
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\tredutseerin kasutades reeglit %d (%s)\n"
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr "faili `%s' ei saa avada"
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr "faili ei õnnestu sulgeda"
@@ -245,7 +245,7 @@ msgstr "%s: puudub grammatikafail\n"
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: ignoreerin lisaargumente peale `%s'\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, c-format
msgid "too many gotos (max %d)"
msgstr "liiga palju gotosid (maks %d)"
@@ -303,91 +303,86 @@ msgstr "`%s' ei toeta argumente: %s"
msgid "`%s' requires an argument"
msgstr "võti `%s' nõuab argumenti"
#: src/main.c:134
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: sisemine viga: %s\n"
#: src/output.c:979
#: src/output.c:949
#, c-format
msgid "maximum table size (%d) exceeded"
msgstr "ületati maksimaalset tabelisuurust (%d)"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " tüüp %d on %s\n"
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (reegel %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $default\taktsepteerin\n"
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " TEGEVUSI POLE\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tliigu olekule %d\n"
#: src/print.c:123
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tnihuta ja liigu olekule %d\n"
#: src/print.c:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tviga (mitteassotsiatiivne)\n"
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tliigu olekule %d\n"
#: src/print.c:185
#: src/print.c:180
#, c-format
msgid "state %d"
msgstr "olek %d"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
msgid "Grammar"
msgstr "Grammatika"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
msgstr "Number, rida, reegel"
#: src/print.c:221
#, fuzzy, c-format
#: src/print.c:217
#, c-format
msgid " %3d %3d %s ->"
msgstr "reegel %-4d %s ->"
msgstr " %3d %3d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr "tühi"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
msgid "Terminals, with rules where they appear"
msgstr "Terminalid, koos reeglitega, kus nad ilmuvad"
#: src/print.c:257
#: src/print.c:256
msgid "Nonterminals, with rules where they appear"
msgstr "Mitteterminalid, koos reeglitega, kus nad ilmuvad"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " vasakul:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " paremal:"
@@ -396,7 +391,7 @@ msgstr " paremal:"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, c-format
msgid "%-4s\terror (nonassociative)"
msgstr "%-4s\tviga (mitteassotsiatiivne)"
@@ -405,7 +400,7 @@ msgstr "%-4s\tviga (mitteassotsiatiivne)"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr "$default\tredutseerin kasutades reeglit %d (%s)"
@@ -634,72 +629,41 @@ msgstr "stardis
msgid "the start symbol %s is a token"
msgstr "stardisümbol %s on märk"
#: src/reduce.c:400
#: src/reduce.c:409
msgid "Useless nonterminals:"
msgstr "Kasutamata mitteterminalid:"
#: src/reduce.c:414
#: src/reduce.c:422
msgid "Terminals which are not used:"
msgstr "Terminalid, mida ei kasutatud:"
#: src/reduce.c:425
#: src/reduce.c:433
msgid "Useless rules:"
msgstr "Kasutamata reeglid:"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Muutujad\n"
"--------\n"
"\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d reeglit ei redutseeritud\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "Value Sprec Sassoc Tag\n"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d kasutamata mitteterminali%s"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Reeglid\n"
"-------\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"Interpreteeritud reeglid\n"
"------------------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d reeglit ei redutseeritud\n"
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d kasutamata mitteterminali%s"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr " ja "
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d kasutamata reeglit%s"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d kasutamata reeglit%s"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "Stardisümbolist %s ei tuletata ühtegi lauset"
@@ -783,10 +747,43 @@ msgstr "m
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr "`"
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr "'"
#~ msgid "%s: internal error: %s\n"
#~ msgstr "%s: sisemine viga: %s\n"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Muutujad\n"
#~ "--------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Value Sprec Sassoc Tag\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Reeglid\n"
#~ "-------\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Interpreteeritud reeglid\n"
#~ "------------------------\n"
#~ "\n"
+101 -104
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.30d\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"PO-Revision-Date: 2001-11-21 08:00-0500\n"
"Project-Id-Version: GNU bison 1.30e\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 2001-11-27 08:00-0500\n"
"Last-Translator: Michel Robitaille <[email protected]>\n"
"Language-Team: French <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -31,78 +31,78 @@ msgstr "AVERTISSEMENT: "
msgid "fatal error: "
msgstr "erreur fatale: "
#: src/conflicts.c:45
#: src/conflicts.c:44
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr ""
"Conflit à l'état %d entre la règle %d et le terminal %s résolu par %s.\n"
#: src/conflicts.c:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "réduction"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "décalage"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "une erreur"
#: src/conflicts.c:389
#: src/conflicts.c:302
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d conflits par décalage/réduction"
#: src/conflicts.c:396
#: src/conflicts.c:309
msgid "and"
msgstr "et"
#: src/conflicts.c:402
#: src/conflicts.c:315
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d conflits par réduction/réduction"
#: src/conflicts.c:426
#: src/conflicts.c:340
#, c-format
msgid "State %d contains "
msgstr "L'état %d contient "
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "conflits: "
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d décalage/réduction"
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d réduction/réduction"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s contient "
#: src/conflicts.c:488
#: src/conflicts.c:405
#, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] "attendu %d conflits décalage/réduction\n"
#: src/conflicts.c:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[réduction par la règle %d (%s)\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -111,22 +111,22 @@ msgstr ""
" $défaut\tréduction par la règle %d (%s)\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\tréduction par la règle %d (%s)\n"
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $défaut\tréduction par la règle %d (%s)\n"
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr "ne peut ouvrir le fichier `%s'"
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr "ne peut fermer le fichier"
@@ -248,7 +248,7 @@ msgstr "%s: grammaire manquante\n"
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: arguments supplémentaires ignorés après `%s'\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, c-format
msgid "too many gotos (max %d)"
msgstr "nombre trop grand de \"goto\" (Max %d)"
@@ -306,91 +306,86 @@ msgstr "`%s' ne supporte aucun argument: %s"
msgid "`%s' requires an argument"
msgstr "`%s': requiert un argument"
#: src/main.c:134
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: erreur interne: %s\n"
#: src/output.c:979
#: src/output.c:949
#, c-format
msgid "maximum table size (%d) exceeded"
msgstr "taille maximale de la table (%d) dépassée"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " le type %d est %s\n"
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (règle %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $défaut\taccepter\n"
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " PAS D'ACTION\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \taller à l'état %d\n"
#: src/print.c:123
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tdécalage et aller à l'état %d\n"
#: src/print.c:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\terreur (non-associatif)\n"
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\taller à l'état %d\n"
#: src/print.c:185
#: src/print.c:180
#, c-format
msgid "state %d"
msgstr "état %d"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
msgid "Grammar"
msgstr "Grammaire"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
msgstr "Nombre, ligne, règle"
#: src/print.c:221
#, fuzzy, c-format
#: src/print.c:217
#, c-format
msgid " %3d %3d %s ->"
msgstr "règle %-4d %s ->"
msgstr " %3d %3d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr "vide"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
msgid "Terminals, with rules where they appear"
msgstr "Terminaux, suivis des règles où ils apparaissent"
#: src/print.c:257
#: src/print.c:256
msgid "Nonterminals, with rules where they appear"
msgstr "Non-terminaux, suivis des règles où ils apparaissent"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " à gauche:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " à droite:"
@@ -399,7 +394,7 @@ msgstr "
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, c-format
msgid "%-4s\terror (nonassociative)"
msgstr "%-4s\terreur (non-associatif)"
@@ -408,7 +403,7 @@ msgstr "%-4s\terreur (non-associatif)"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr "$défaut\tréduction par la règle %d (%s)"
@@ -638,72 +633,41 @@ msgstr "le symbole de d
msgid "the start symbol %s is a token"
msgstr "le symbole de départ %s est un terminal"
#: src/reduce.c:400
#: src/reduce.c:409
msgid "Useless nonterminals:"
msgstr "Non-terminaux inutiles:"
#: src/reduce.c:414
#: src/reduce.c:422
msgid "Terminals which are not used:"
msgstr "Terminaux non utilisés:"
#: src/reduce.c:425
#: src/reduce.c:433
msgid "Useless rules:"
msgstr "Règles inutiles:"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Variables\n"
"---------\n"
"\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d règles jamais réduites\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "Valeur Spréc Sassoc Tag\n"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d catégories non productives%s"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Règles\n"
"------\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"Règles interprétées\n"
"-------------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d règles jamais réduites\n"
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d catégories non productives%s"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr " et "
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d règle(s) non productive(s)%s"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d règle(s) non productive(s)%s"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "Aucune phrase ne peut être dérivée du symbole de départ %s"
@@ -787,14 +751,47 @@ msgstr "m
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr "`"
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr "'"
#~ msgid "%s: internal error: %s\n"
#~ msgstr "%s: erreur interne: %s\n"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Valeur Spréc Sassoc Tag\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Règles\n"
#~ "------\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Règles interprétées\n"
#~ "-------------------\n"
#~ "\n"
#~ msgid "DERIVES"
#~ msgstr "DÉRIVES"
+96 -99
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.28\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 1999-09-28 21:10+0900\n"
"Last-Translator: Daisuke Yamashita <[email protected]>\n"
"Language-Team: Japanese <[email protected]>\n"
@@ -31,78 +31,78 @@ msgstr ""
msgid "fatal error: "
msgstr "%s: 致命的エラー: "
#: src/conflicts.c:45
#: src/conflicts.c:44
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
#: src/conflicts.c:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "還元"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "シフト"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "エラー"
#: src/conflicts.c:389
#: src/conflicts.c:302
#, fuzzy, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] " %d シフト/還元衝突"
#: src/conflicts.c:396
#: src/conflicts.c:309
#, fuzzy
msgid "and"
msgstr " および"
#: src/conflicts.c:402
#: src/conflicts.c:315
#, fuzzy, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] " %d 還元/還元衝突"
#: src/conflicts.c:426
#: src/conflicts.c:340
#, fuzzy, c-format
msgid "State %d contains "
msgstr "状態 %d が含むのは"
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "衝突: "
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d シフト/還元"
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d 還元/還元"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s には"
#: src/conflicts.c:488
#: src/conflicts.c:405
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d シフト/還元衝突"
#: src/conflicts.c:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[規則 %d を利用して還元 (%s)]\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -111,22 +111,22 @@ msgstr ""
" $default\t規則 %d を利用して還元 (%s)\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\t規則 %d を利用して還元 (%s)\n"
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\t規則 %d を利用して還元 (%s)\n"
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr ""
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr ""
@@ -220,7 +220,7 @@ msgstr "%s: ʸˡ
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: '%s' より後ろの余分な引数は無視されました\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, fuzzy, c-format
msgid "too many gotos (max %d)"
msgstr "%s の数が多すぎます (最大 %d)"
@@ -279,55 +279,50 @@ msgstr ""
msgid "`%s' requires an argument"
msgstr "%s: オプション `%s' は引数を要求します\n"
#: src/main.c:134
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: 内部エラー: %s\n"
#: src/output.c:979
#: src/output.c:949
#, fuzzy, c-format
msgid "maximum table size (%d) exceeded"
msgstr "最大テーブルサイズ (%s) を超えました"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " タイプ %d は %s です\n"
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (規則 %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $default\taccept\n"
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " 動作無し\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \t状態 %d へ\n"
#: src/print.c:123
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tシフト、および状態 %d へ\n"
#: src/print.c:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tエラー (非結合)\n"
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\t状態 %d へ\n"
#: src/print.c:185
#: src/print.c:180
#, fuzzy, c-format
msgid "state %d"
msgstr ""
@@ -337,28 +332,28 @@ msgstr ""
"\n"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
#, fuzzy
msgid "Grammar"
msgstr ""
"\n"
"文法\n"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
#: src/print.c:221
#: src/print.c:217
#, fuzzy, c-format
msgid " %3d %3d %s ->"
msgstr "規則 %-4d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr ""
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
#, fuzzy
msgid "Terminals, with rules where they appear"
msgstr ""
@@ -366,7 +361,7 @@ msgstr ""
"終端トークン、およびそこに現れた規則\n"
"\n"
#: src/print.c:257
#: src/print.c:256
#, fuzzy
msgid "Nonterminals, with rules where they appear"
msgstr ""
@@ -374,11 +369,11 @@ msgstr ""
"非終端トークン、およびそこに現れた規則\n"
"\n"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " 左辺:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " 右辺:"
@@ -387,7 +382,7 @@ msgstr "
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, fuzzy, c-format
msgid "%-4s\terror (nonassociative)"
msgstr " %-4s\tエラー (非結合)\n"
@@ -396,7 +391,7 @@ msgstr " %-4s\t
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, fuzzy, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr " $default\t規則 %d を利用して還元 (%s)\n"
@@ -625,14 +620,14 @@ msgstr "
msgid "the start symbol %s is a token"
msgstr "開始シンボル %s はトークンです"
#: src/reduce.c:400
#: src/reduce.c:409
#, fuzzy
msgid "Useless nonterminals:"
msgstr ""
"不使用非終端子:\n"
"\n"
#: src/reduce.c:414
#: src/reduce.c:422
#, fuzzy
msgid "Terminals which are not used:"
msgstr ""
@@ -641,7 +636,7 @@ msgstr ""
"利用されない終端子:\n"
"\n"
#: src/reduce.c:425
#: src/reduce.c:433
#, fuzzy
msgid "Useless rules:"
msgstr ""
@@ -650,60 +645,29 @@ msgstr ""
"不使用規則:\n"
"\n"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"変数\n"
"---------\n"
"\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d 個の規則は決して還元されません\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "値 前置 結合 タグ\n"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d 個の不使用非終端子%.0s"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"規則\n"
"-----\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"解釈された規則\n"
"-----------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d 個の規則は決して還元されません\n"
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d 個の不使用非終端子%.0s"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr "および"
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d 個の不使用規則%.0s"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d 個の不使用規則%.0s"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "開始シンボル %s はどの文にも由来しません"
@@ -788,11 +752,11 @@ msgstr "%s:
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr ""
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr ""
@@ -898,6 +862,9 @@ msgstr ""
#~ msgid "%s:%d: "
#~ msgstr "%s:%d: "
#~ msgid "%s: internal error: %s\n"
#~ msgstr "%s: 内部エラー: %s\n"
#~ msgid "Entering set_nullable"
#~ msgstr "set_nullable に入ります"
@@ -933,3 +900,33 @@ msgstr ""
#~ msgstr ""
#~ "還元ファイル %s で %d 個の終端子%.0s, %d 個の非終端子%.0s, %d 個の規則%.0s"
#~ "が定義されました\n"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "変数\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "値 前置 結合 タグ\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "規則\n"
#~ "-----\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "解釈された規則\n"
#~ "-----------------\n"
#~ "\n"
+96 -99
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 1996-08-27 15:34 MET DST\n"
"Last-Translator: Erick Branderhorst <[email protected]>\n"
"Language-Team: Dutch <[email protected]>\n"
@@ -31,78 +31,78 @@ msgstr ""
msgid "fatal error: "
msgstr "fatale fout: %s\n"
#: src/conflicts.c:45
#: src/conflicts.c:44
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr "Conflict in stadium %d tussen regel %d en teken %s opgelost als %s.\n"
#: src/conflicts.c:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "reduceer"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "verschuif"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "een fout"
#: src/conflicts.c:389
#: src/conflicts.c:302
#, fuzzy, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] " %d verschuif/reduceer conflicten"
#: src/conflicts.c:396
#: src/conflicts.c:309
#, fuzzy
msgid "and"
msgstr " en"
#: src/conflicts.c:402
#: src/conflicts.c:315
#, fuzzy, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] " %d reduceer/reduceer conflicten"
#: src/conflicts.c:426
#: src/conflicts.c:340
#, fuzzy, c-format
msgid "State %d contains "
msgstr "Stadium %d bevat"
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "conflictueerd: "
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d vershuif/reduceer"
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d reduceer/reduceer"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s bevat"
#: src/conflicts.c:488
#: src/conflicts.c:405
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d verschuif/reduceer conflicten"
#: src/conflicts.c:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[reduceer gebruikt regel %d (%s)]\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -111,22 +111,22 @@ msgstr ""
" $default\treduce using rule %d (%s)\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr ""
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr ""
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr ""
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr ""
@@ -220,7 +220,7 @@ msgstr "%s: geen grammatica bestand gegeven\n"
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: extra argumenten genegeerd na '%s'\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, c-format
msgid "too many gotos (max %d)"
msgstr ""
@@ -279,55 +279,50 @@ msgstr ""
msgid "`%s' requires an argument"
msgstr "%s: optie `%s' vereist een argument\n"
#: src/main.c:134
#, fuzzy, c-format
msgid "%s: internal error: %s\n"
msgstr "interne fout, %s\n"
#: src/output.c:979
#: src/output.c:949
#, fuzzy, c-format
msgid "maximum table size (%d) exceeded"
msgstr "maximale tabel grootte (%s) overschreden"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr ""
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (regel %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr ""
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " GEEN AKTIES\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr ""
#: src/print.c:123
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr ""
#: src/print.c:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr ""
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr ""
#: src/print.c:185
#: src/print.c:180
#, fuzzy, c-format
msgid "state %d"
msgstr ""
@@ -337,28 +332,28 @@ msgstr ""
"\n"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
#, fuzzy
msgid "Grammar"
msgstr ""
"\n"
"Grammatica\n"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
#: src/print.c:221
#: src/print.c:217
#, fuzzy, c-format
msgid " %3d %3d %s ->"
msgstr "regel %-4d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr ""
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
#, fuzzy
msgid "Terminals, with rules where they appear"
msgstr ""
@@ -366,7 +361,7 @@ msgstr ""
"Terminals, met regels waar ze voorkomen\n"
"\n"
#: src/print.c:257
#: src/print.c:256
#, fuzzy
msgid "Nonterminals, with rules where they appear"
msgstr ""
@@ -374,11 +369,11 @@ msgstr ""
"Geen terminals, met regels waar ze voorkomen\n"
"\n"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " links:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " rechts:"
@@ -387,7 +382,7 @@ msgstr " rechts:"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, c-format
msgid "%-4s\terror (nonassociative)"
msgstr ""
@@ -396,7 +391,7 @@ msgstr ""
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, fuzzy, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr ""
@@ -628,14 +623,14 @@ msgstr ""
msgid "the start symbol %s is a token"
msgstr "het start symbool %s is een token"
#: src/reduce.c:400
#: src/reduce.c:409
#, fuzzy
msgid "Useless nonterminals:"
msgstr ""
"Onbruikbare niet terminals:\n"
"\n"
#: src/reduce.c:414
#: src/reduce.c:422
#, fuzzy
msgid "Terminals which are not used:"
msgstr ""
@@ -644,7 +639,7 @@ msgstr ""
"Terminals welke niet worden gebruikt:\n"
"\n"
#: src/reduce.c:425
#: src/reduce.c:433
#, fuzzy
msgid "Useless rules:"
msgstr ""
@@ -653,60 +648,29 @@ msgstr ""
"Onbruikbare regels:\n"
"\n"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Variabelen\n"
"----------\n"
"\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d regels nooit gereduceerd\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "Waarde Sprec Sassoc Tag\n"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d onbruikbare niet terminal%s"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Regels\n"
"------\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"Geinterpreteerde regels\n"
"-----------------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d regels nooit gereduceerd\n"
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d onbruikbare niet terminal%s"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr " en "
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d onbruikbare regels%s"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d onbruikbare regels%s"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "Start symbool %s is niet afkomstig uit een zin"
@@ -791,11 +755,11 @@ msgstr "%s: geen geheugen meer beschikbaar\n"
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr ""
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr ""
@@ -900,6 +864,9 @@ msgstr ""
#~ msgid "limit of %d exceeded, too many %s"
#~ msgstr "limiet van %d overschreden, te veel %s"
#~ msgid "internal error, %s\n"
#~ msgstr "interne fout, %s\n"
#~ msgid "Entering set_nullable"
#~ msgstr "Inkomende set nullable"
@@ -932,3 +899,33 @@ msgstr ""
#~ msgstr ""
#~ "gereduceerd %s gedefinieerd %d terminal%s, %d nietterminal%s, en %d "
#~ "productie%s.\n"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variabelen\n"
#~ "----------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Waarde Sprec Sassoc Tag\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Regels\n"
#~ "------\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Geinterpreteerde regels\n"
#~ "-----------------------\n"
#~ "\n"
+96 -99
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.29\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 2001-09-09 13:49+04:00\n"
"Last-Translator: Dmitry S. Sivachenko <[email protected]>\n"
"Language-Team: Russian <[email protected]>\n"
@@ -30,79 +30,79 @@ msgstr "
msgid "fatal error: "
msgstr "ÆÁÔÁÌØÎÁÑ ÏÛÉÂËÁ: "
#: src/conflicts.c:45
#: src/conflicts.c:44
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr ""
"ëÏÎÆÌÉËÔ × ÓÏÓÔÏÑÎÉÉ %d ÍÅÖÄÕ ÐÒÁ×ÉÌÏÍ %d É ÌÅËÓÅÍÏÊ %s ÒÁÚÒÅÛÅÎ ËÁË %s.\n"
#: src/conflicts.c:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "×Ù×ÏÄ"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "ÓÄ×ÉÇ"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "ÏÛÉÂËÁ"
#: src/conflicts.c:389
#: src/conflicts.c:302
#, fuzzy, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] " %d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:396
#: src/conflicts.c:309
#, fuzzy
msgid "and"
msgstr " É"
#: src/conflicts.c:402
#: src/conflicts.c:315
#, fuzzy, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] " %d ËÏÎÆÌÉËÔÏ× ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:426
#: src/conflicts.c:340
#, fuzzy, c-format
msgid "State %d contains "
msgstr "óÏÓÔÏÑÎÉÅ %d ÓÏÄÅÒÖÉÔ"
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "ËÏÎÆÌÉËÔÙ: "
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d ÓÄ×ÉÇ/×Ù×ÏÄ"
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d ×Ù×ÏÄ/×Ù×ÏÄ"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s ÓÏÄÅÒÖÉÔ "
#: src/conflicts.c:488
#: src/conflicts.c:405
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)]\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -111,22 +111,22 @@ msgstr ""
" $default\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)\n"
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)\n"
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr "ÎÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ `%s'"
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ"
@@ -249,7 +249,7 @@ msgstr "%s:
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: ÌÉÛÎÉÅ ÁÒÇÕÍÅÎÔÙ ÐÏÓÌÅ `%s' ÉÇÎÏÒÉÒÏ×ÁÎÙ\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, c-format
msgid "too many gotos (max %d)"
msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ goto (ÍÁËÓÉÍÁÌØÎÏ %d)"
@@ -307,91 +307,86 @@ msgstr ""
msgid "`%s' requires an argument"
msgstr "%s: ËÌÀÞ `%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ Ó ÁÒÇÕÍÅÎÔÏÍ\n"
#: src/main.c:134
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: ×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: %s\n"
#: src/output.c:979
#: src/output.c:949
#, c-format
msgid "maximum table size (%d) exceeded"
msgstr "ÐÒÅ×ÙÛÅÎ ÍÁËÓÉÍÁÌØÎÙÊ ÒÁÚÍÅÒ ÔÁÂÌÉÃÙ (%d)"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " ÔÉÐ %d Ñ×ÌÑÅÔÓÑ %s\n"
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (ÐÒÁ×ÉÌÏ %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $default\tÐÒÉÎÑÔÉÅ\n"
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " îåô äåêóô÷éê\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
#: src/print.c:123
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tÓÄ×ÉÇ, É ÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
#: src/print.c:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tÏÛÉÂËÁ (ÎÅÁÓÓÏÃÉÁÔÉ×ÎÁÑ)\n"
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
#: src/print.c:185
#: src/print.c:180
#, c-format
msgid "state %d"
msgstr "ÓÏÓÔÏÑÎÉÅ %d"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
msgid "Grammar"
msgstr "çÒÁÍÍÁÔÉËÁ"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
#: src/print.c:221
#: src/print.c:217
#, fuzzy, c-format
msgid " %3d %3d %s ->"
msgstr "ÐÒÁ×ÉÌÏ %-4d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr ""
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
msgid "Terminals, with rules where they appear"
msgstr "ôÅÒÍÉÎÁÌØÎÙÅ ÓÉÍ×ÏÌÙ Ó ÐÒÁ×ÉÌÁÍÉ, × ËÏÔÏÒÙÈ ÏÎÉ ÐÏÑ×ÌÑÀÔÓÑ"
#: src/print.c:257
#: src/print.c:256
msgid "Nonterminals, with rules where they appear"
msgstr "îÅÔÅÒÍÉÎÁÌØÎÙÅ ÓÉÍ×ÏÌÙ Ó ÐÒÁ×ÉÌÁÍÉ, × ËÏÔÏÒÙÈ ÏÎÉ ÐÏÑ×ÌÑÀÔÓÑ"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " ÎÁÌÅ×Ï:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " ÎÁÐÒÁ×Ï:"
@@ -400,7 +395,7 @@ msgstr "
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, c-format
msgid "%-4s\terror (nonassociative)"
msgstr "%-4s\tÏÛÉÂËÁ (ÎÅÁÓÓÏÃÉÁÔÉ×ÎÁÑ)"
@@ -409,7 +404,7 @@ msgstr "%-4s\t
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr "$default\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)"
@@ -637,72 +632,41 @@ msgstr "
msgid "the start symbol %s is a token"
msgstr "ÎÁÞÁÌØÎÙÊ ÓÉÍ×ÏÌ %s Ñ×ÌÑÅÔÓÑ ÌÅËÓÅÍÏÊ"
#: src/reduce.c:400
#: src/reduce.c:409
msgid "Useless nonterminals:"
msgstr "âÅÓÐÏÌÅÚÎÙÅ ÎÅÔÅÒÍÉÎÁÌÙ:"
#: src/reduce.c:414
#: src/reduce.c:422
msgid "Terminals which are not used:"
msgstr "îÅÉÓÐÏÌØÚÏ×ÁÎÎÙÅ ÔÅÒÍÉÎÁÌÙ:"
#: src/reduce.c:425
#: src/reduce.c:433
msgid "Useless rules:"
msgstr "âÅÓÐÏÌÅÚÎÙÅ ÐÒÁ×ÉÌÁ:"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"ðÅÒÅÍÅÎÎÙÅ\n"
"----------\n"
"\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d ÐÒÁ×ÉÌ ÎÅ Ó×ÅÄÅÎÏ\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "úÎÁÞ ðÒÉÏÒ áÓÓÏÃ ôÅÇ\n"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d ÂÅÓÐÏÌÅÚÎÙÈ ÎÅÔÅÒÍÉÎÁÌÏ×%s"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"ðÒÁ×ÉÌÁ\n"
"-------\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"éÎÔÅÒÐÒÅÔÉÒÏ×ÁÎÎÙÅ ÐÒÁ×ÉÌÁ\n"
"--------------------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d ÐÒÁ×ÉÌ ÎÅ Ó×ÅÄÅÎÏ\n"
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d ÂÅÓÐÏÌÅÚÎÙÈ ÎÅÔÅÒÍÉÎÁÌÏ×%s"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr " É "
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d ÂÅÓÐÏÌÅÚÎÙÈ ÐÒÁ×ÉÌ%s"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d ÂÅÓÐÏÌÅÚÎÙÈ ÐÒÁ×ÉÌ%s"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "îÁÞÁÌØÎÙÊ ÓÉÍ×ÏÌ %s ÎÅ ×Ù×ÏÄÉÔ ÎÉ ÏÄÎÏÇÏ ÐÒÅÄÌÏÖÅÎÉÑ"
@@ -786,11 +750,11 @@ msgstr "
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr "`"
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr "'"
@@ -809,6 +773,9 @@ msgstr "'"
#~ msgid "%s derives"
#~ msgstr "%s ×Ù×ÏÄÉÔ"
#~ msgid "%s: internal error: %s\n"
#~ msgstr "%s: ×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: %s\n"
#~ msgid "Entering set_nullable"
#~ msgstr "÷ÈÏÄ × set_nullable"
@@ -821,6 +788,36 @@ msgstr "'"
#~ msgid "multiple %%source_extension declarations"
#~ msgstr "ÍÎÏÖÅÓÔ×ÅÎÎÙÅ ÏÐÉÓÁÎÉÑ %%source_extension"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "ðÅÒÅÍÅÎÎÙÅ\n"
#~ "----------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "úÎÁÞ ðÒÉÏÒ áÓÓÏÃ ôÅÇ\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "ðÒÁ×ÉÌÁ\n"
#~ "-------\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "éÎÔÅÒÐÒÅÔÉÒÏ×ÁÎÎÙÅ ÐÒÁ×ÉÌÁ\n"
#~ "--------------------------\n"
#~ "\n"
#~ msgid ""
#~ "reduced %s defines %d terminal%s, %d nonterminal%s, and %d production%s.\n"
#~ msgstr ""
+101 -104
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.30d\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"PO-Revision-Date: 2001-11-21 22:10+0100\n"
"Project-Id-Version: bison 1.30e\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 2001-11-27 11:16+0100\n"
"Last-Translator: Göran Uddeborg <[email protected]>\n"
"Language-Team: Swedish <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -32,81 +32,81 @@ msgstr "varning: "
msgid "fatal error: "
msgstr "ödesdigert fel: "
#: src/conflicts.c:45
#: 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:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "reducera"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "skifta"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "ett fel"
#: src/conflicts.c:389
#: 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:396
#: src/conflicts.c:309
msgid "and"
msgstr "och"
#: src/conflicts.c:402
#: 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:426
#: 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:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "konflikter: "
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d skifta/reducera"
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d reducera/reducera"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s innehåller "
#: src/conflicts.c:488
#: src/conflicts.c:405
#, 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:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[reducera med regel %d (%s)]\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -115,22 +115,22 @@ msgstr ""
" $standard\treducera med regel %d (%s)\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\treducera med regel %d (%s)\n"
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $standard\treducera med regel %d (%s)\n"
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr "kan inte öppna filen \"%s\""
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr "kan inte stänga fil"
@@ -251,7 +251,7 @@ msgstr "%s: ingen grammatikfil angiven\n"
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: extra argument ignorerade efter \"%s\"\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, c-format
msgid "too many gotos (max %d)"
msgstr "för många goto (max %d)"
@@ -309,91 +309,86 @@ msgstr "\"%s\" st
msgid "`%s' requires an argument"
msgstr "\"%s\" behöver ett argument"
#: src/main.c:134
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: internt fel: %s\n"
#: src/output.c:979
#: src/output.c:949
#, c-format
msgid "maximum table size (%d) exceeded"
msgstr "maximal tabellstorlek (%d) överskriden"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " typ %d är %s\n"
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (regel %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $standard\tacceptera\n"
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " INGA ÅTGÄRDER\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tgå till tillstånd %d\n"
#: src/print.c:123
#: 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:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tfel (ickeassociativ)\n"
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tgå till tillstånd %d\n"
#: src/print.c:185
#: src/print.c:180
#, c-format
msgid "state %d"
msgstr "tillstånd %d"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
msgid "Grammar"
msgstr "Grammatik"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
msgstr "Nummer, Rad, Regel"
#: src/print.c:221
#, fuzzy, c-format
#: src/print.c:217
#, c-format
msgid " %3d %3d %s ->"
msgstr "regel %-4d %s ->"
msgstr " %3d %3d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr "tom"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
msgid "Terminals, with rules where they appear"
msgstr "Terminaler, med regler där de förekommer"
#: src/print.c:257
#: src/print.c:256
msgid "Nonterminals, with rules where they appear"
msgstr "Icketerminaler, med regler där de förekommer"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " till vänster:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " till höger:"
@@ -402,7 +397,7 @@ msgstr " till h
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, c-format
msgid "%-4s\terror (nonassociative)"
msgstr "%-4s\tfel (ickeassociativ)"
@@ -411,7 +406,7 @@ msgstr "%-4s\tfel (ickeassociativ)"
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr "$standard\treducera med regel %d (%s)"
@@ -640,75 +635,44 @@ msgstr "startsymbolen %s
msgid "the start symbol %s is a token"
msgstr "startsymbolen %s är ett element"
#: src/reduce.c:400
#: src/reduce.c:409
msgid "Useless nonterminals:"
msgstr "Oanvändbara icketerminaler:"
#: src/reduce.c:414
#: src/reduce.c:422
msgid "Terminals which are not used:"
msgstr "Terminaler som inte används:"
#: src/reduce.c:425
#: src/reduce.c:433
msgid "Useless rules:"
msgstr "Oanvändbara regler:"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Variabler\n"
"---------\n"
"\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "Värde Sprec Sassoc Tagg\n"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Regler\n"
"------\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"Tolkade regler\n"
"--------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d regler reduceras aldrig\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d regler reduceras aldrig\n"
# Jag har anmält att det är fel att anta att "s" är en universell pluraländelse.
# Jag föreslog också att de använder ngettext istället.
# "Vad göras skall är redan gjort."
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d oanvändbara icketerminaler%.0s"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d oanvändbara icketerminaler%.0s"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr " och "
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d oanvändbara regler%.0s"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d oanvändbara regler%.0s"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "Startsymbolen %s genererar inga meningar"
@@ -795,10 +759,43 @@ msgstr "minnet slut"
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr "\""
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr "\""
#~ msgid "%s: internal error: %s\n"
#~ msgstr "%s: internt fel: %s\n"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variabler\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Värde Sprec Sassoc Tagg\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Regler\n"
#~ "------\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Tolkade regler\n"
#~ "--------------\n"
#~ "\n"
+134 -158
View File
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.30\n"
"POT-Creation-Date: 2001-11-26 16:23+0100\n"
"PO-Revision-Date: 2001-11-02 14:49GMT\n"
"Last-Translator: Altug Bayram <[email protected]>\n"
"Project-Id-Version: bison 1.30e\n"
"POT-Creation-Date: 2001-12-05 12:47+0100\n"
"PO-Revision-Date: 2001-11-27 11:37GMT+2\n"
"Last-Translator: Altuð Bayram <[email protected]>\n"
"Language-Team: Turkish <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-9\n"
@@ -31,80 +31,82 @@ msgstr "uyar
msgid "fatal error: "
msgstr "ölümcül hata:"
#: src/conflicts.c:45
#: src/conflicts.c:44
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr ""
"%d durumu içinde %d kuralý ve %s andaçý arasýndaki çeliþki %s "
"olarakçözümlendi.\n"
"%d durumu içinde %d kuralý ve %s andaçý arasýndaki çeliþki %s olarak\n"
"çözümlendi.\n"
#: src/conflicts.c:111 src/conflicts.c:134
#: src/conflicts.c:94 src/conflicts.c:119
msgid "reduce"
msgstr "indirgeme"
#: src/conflicts.c:117 src/conflicts.c:130
#: src/conflicts.c:101 src/conflicts.c:115
msgid "shift"
msgstr "öteleme"
#: src/conflicts.c:138
#: src/conflicts.c:123
msgid "an error"
msgstr "bir hata"
#: src/conflicts.c:389
#, fuzzy, c-format
#: src/conflicts.c:302
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] " %d öteleme/indirgeme çeliþkisi"
msgstr[0] "%d öteleme/indirgeme çeliþkisi"
msgstr[1] "%d öteleme/indirgeme çeliþkisi"
#: src/conflicts.c:396
#, fuzzy
#: src/conflicts.c:309
msgid "and"
msgstr " ve"
msgstr "ve"
#: src/conflicts.c:402
#, fuzzy, c-format
#: src/conflicts.c:315
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] " %d indirgeme/indirgeme çeliþkisi"
msgstr[0] "%d indirgeme/indirgeme çeliþkisi"
msgstr[1] "%d indirgeme/indirgeme çeliþkisi"
#: src/conflicts.c:426
#, fuzzy, c-format
#: src/conflicts.c:340
#, c-format
msgid "State %d contains "
msgstr "%d durumu içerir"
#. If invoked with `--yacc', use the output format specified by
#. POSIX.
#: src/conflicts.c:470
#: src/conflicts.c:387
msgid "conflicts: "
msgstr "çeliþkiler: "
#: src/conflicts.c:472
#: src/conflicts.c:389
#, c-format
msgid " %d shift/reduce"
msgstr " %d öteleme/indirgeme"
#: src/conflicts.c:476
#: src/conflicts.c:393
#, c-format
msgid " %d reduce/reduce"
msgstr " %d indirgeme/indirgeme"
#: src/conflicts.c:481 src/reduce.c:493
#: src/conflicts.c:398 src/reduce.c:508
#, c-format
msgid "%s contains "
msgstr "%s içerir "
msgstr "%s içerir"
#: src/conflicts.c:488
#, fuzzy, c-format
#: src/conflicts.c:405
#, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d öteleme/indirgeme çeliþkisi"
msgstr[0] "beklenen %d öteleme/indirgeme çeliþkisi\n"
msgstr[1] "beklenen %d öteleme/indirgeme çeliþkisi\n"
#: src/conflicts.c:575 src/conflicts.c:696
#: src/conflicts.c:457 src/conflicts.c:534
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[indirgeme kural %d (%s)'i kullanýyor]\n"
#: src/conflicts.c:587 src/print.c:156
#: src/conflicts.c:461 src/print.c:154
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -113,22 +115,22 @@ msgstr ""
" $default\tindirgeme kural %d (%s)'i kullanýyor\n"
"\n"
#: src/conflicts.c:676 src/conflicts.c:690
#: src/conflicts.c:515 src/conflicts.c:528
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\tindirgeme kural %d (%s)'i kullanýyor\n"
#: src/conflicts.c:716
#: src/conflicts.c:544
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\tindirgeme kural %d (%s)'i kullanýyor\n"
#: src/files.c:143
#: src/files.c:144
#, c-format
msgid "cannot open file `%s'"
msgstr "`%s' dosyasý açýlamadý"
#: src/files.c:162
#: src/files.c:163
msgid "cannot close file"
msgstr "dosya kapatýlamýyor"
@@ -148,10 +150,10 @@ 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 ""
"Eðer bir uzun seçenek bir baðýmsýz deðiþkeni zorunlu gibi gösterilirse odenk "
"Eðer bir uzun seçenek bir argümaný gerektirirse, bu gereklilik, denk olan "
"kýsa\n"
"seçenek için dahi zorunludur. Seçimli baðýmsýz deðiþkenler için "
"benzerþekildedir.\n"
"seçenek için de geçerlidir. Bu durum, seçimli argümanlar için de "
"geçerlidir.\n"
#: src/getargs.c:98
msgid ""
@@ -160,6 +162,7 @@ msgid ""
" -V, --version output version information and exit\n"
" -y, --yacc emulate POSIX yacc\n"
msgstr ""
"Çalýþma kipleri:\n"
" -h, --help bu yardýmý göster ve çýk\n"
" -V, --version sürüm bilgisini ver ve çýk\n"
" -y, --yacc POSIX yacc öykünmesi\n"
@@ -185,7 +188,6 @@ msgstr ""
" -k, --token-table andaç isimlerinin bir tablosunu içer\n"
#: src/getargs.c:117
#, fuzzy
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -195,16 +197,18 @@ msgid ""
" -g, --graph also produce a VCG description of the "
"automaton\n"
msgstr ""
"Çýktý:\n"
"Output:\n"
" -d, --defines bir baþlýk dosyasý da üretir\n"
" -v, --verbose otomatýn bir açýklamasýný da üretir\n"
" -b, --file-prefix=ÖNEK çýktý dosyalarý için bir ÖNEK belirtir\n"
" -o, --output-file=DOSYA çýktýyý DOSYAYA býrakýr\n"
" -b, --file-prefix=PREFIX çýktý dosyalarý için bir ÖNEK belirtir\n"
" -o, --output=FILE çýktýyý DOSYAYA býrakýr\n"
" -g, --graph otomatýn bir VCG grafik açýklamasýný da üretir\n"
#: src/getargs.c:127
msgid "Report bugs to <[email protected]>.\n"
msgstr "Hatalarý <[email protected]>'a bildir.\n"
msgstr ""
"Hatalarý <[email protected]>'a,\n"
"çeviri hatalarýný <[email protected]>'e bildir.\n"
#. Some efforts were made to ease the translators' task, please
#. continue.
@@ -242,14 +246,14 @@ msgstr "Daha fazla bilgi i
#: src/getargs.c:246
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: verilen gramer dosyasý yok\n"
msgstr "%s: gramer dosyasý verilmemiþ\n"
#: src/getargs.c:250
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: '%s' den sonraki ek baðýmsýz deðiþkenler yoksayýldý\n"
msgstr "%s: '%s' den sonraki argümanlar yoksayýldý\n"
#: src/lalr.c:293
#: src/lalr.c:255
#, c-format
msgid "too many gotos (max %d)"
msgstr "gotos çok fazla (en fazla %d)"
@@ -287,7 +291,7 @@ msgstr "bilinmeyen ka
#: src/lex.c:342
msgid "unterminated type name at end of file"
msgstr "dosyanýn sonunda sonlandýrýlmamýþ tip adý"
msgstr "dosya sonunda sonlandýrýlmamýþ tip adý"
#: src/lex.c:345
msgid "unterminated type name"
@@ -295,103 +299,98 @@ msgstr "sonland
#: src/lex.c:438
msgid "use \"...\" for multi-character literal tokens"
msgstr "cok-karakterli yazýn andaçlarý için \"...\" kullan"
msgstr "çok-karakterli yazýn andaçlarý için \"...\" kullan"
#: src/lex.c:667
#, c-format
msgid "`%s' supports no argument: %s"
msgstr ""
msgstr "`%s' argüman %s'i desteklemez"
#: src/lex.c:683
#, fuzzy, c-format
msgid "`%s' requires an argument"
msgstr "%s: `%s' seçeneði bir argümanla kullanýlýr\n"
#: src/main.c:134
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: iç hata: %s\n"
msgid "`%s' requires an argument"
msgstr "`%s' bir argüman gerektirir"
#: src/output.c:979
#: src/output.c:949
#, c-format
msgid "maximum table size (%d) exceeded"
msgstr "en büyük tablo uzunluðu (%d) aþýldý"
#: src/print.c:38
#: src/print.c:39
#, c-format
msgid " type %d is %s\n"
msgstr " tip %d %s'dir\n"
#: src/print.c:78
#: src/print.c:88
#, c-format
msgid " (rule %d)"
msgstr " (kural %d)"
#: src/print.c:98
#: src/print.c:108
msgid " $default\taccept\n"
msgstr " $default\tonayla\n"
#: src/print.c:100
#: src/print.c:110
msgid " NO ACTIONS\n"
msgstr " EYLEMLER YOK\n"
msgstr " EYLEM YOK\n"
#: src/print.c:120
#: src/print.c:124
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tdurum %d'ye git\n"
#: src/print.c:123
#: src/print.c:127
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tötele, ve durum %d'ye git\n"
#: src/print.c:144
#: src/print.c:142
#, c-format
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\thata (birleþmeli deðil)\n"
#: src/print.c:173
#: src/print.c:169
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tdurum %d'ye git\n"
#: src/print.c:185
#: src/print.c:180
#, c-format
msgid "state %d"
msgstr "durum %d"
#. rule # : LHS -> RHS
#: src/print.c:215
#: src/print.c:211
msgid "Grammar"
msgstr "Gramer"
#: src/print.c:216
#: src/print.c:212
msgid "Number, Line, Rule"
msgstr ""
msgstr "Sayý, Satýr, Kural"
#: src/print.c:221
#, fuzzy, c-format
#: src/print.c:217
#, c-format
msgid " %3d %3d %s ->"
msgstr "kural %-4d %s ->"
msgstr " %3d %3d %s ->"
#: src/print.c:228
#: src/print.c:224
msgid "empty"
msgstr "boþ"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:233
#: src/print.c:231
msgid "Terminals, with rules where they appear"
msgstr "Sabit simgeler, kurallarýnýn bulunduklarý yerde"
#: src/print.c:257
#: src/print.c:256
msgid "Nonterminals, with rules where they appear"
msgstr "Deðiþken simgeler, kurallarýnýn bulunduklarý yerde"
#: src/print.c:283
#: src/print.c:282
msgid " on left:"
msgstr " solda:"
#: src/print.c:298
#: src/print.c:297
msgid " on right:"
msgstr " saðda:"
@@ -400,7 +399,7 @@ msgstr " sa
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:165
#: src/print_graph.c:146
#, c-format
msgid "%-4s\terror (nonassociative)"
msgstr "%-4s\thata (birleþmeli deðil)"
@@ -409,7 +408,7 @@ msgstr "%-4s\thata (birle
#. if (obstack_object_size (node_obstack) > node_output_size)
#. obstack_sgrow (node_obstack, "\n");
#.
#: src/print_graph.c:180
#: src/print_graph.c:161
#, c-format
msgid "$default\treduce using rule %d (%s)"
msgstr "$default\tindirgeme kural %d (%s)'i kullanýyor"
@@ -526,7 +525,7 @@ msgstr "e
#: src/reader.c:810
#, c-format
msgid "argument of %%expect is not an integer"
msgstr "%%expect'in baðýmsýz deðiþkeni bir tamsayý deðildir"
msgstr "%%expect'in argümaný bir tamsayý deðildir"
#: src/reader.c:856
#, c-format
@@ -536,7 +535,7 @@ msgstr "%s
#: src/reader.c:878
#, c-format
msgid "expected string constant instead of %s"
msgstr "%s'in yerine beklenen dizgi sabitidir"
msgstr "%s'in yerine sabit dizge beklendi"
#: src/reader.c:1026
#, c-format
@@ -559,7 +558,7 @@ msgstr "sonland
#: src/reader.c:1357
msgid "ill-formed rule: initial symbol not followed by colon"
msgstr "kötü-biçimli kural: baþlangýç simgesini takip eden kolon(:) yok"
msgstr "kötü-biçemli kural: baþlangýç simgesini takip eden \":\" yok"
#: src/reader.c:1364
msgid "grammar starts with vertical bar"
@@ -611,8 +610,7 @@ msgstr "girdi grameri i
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"simge %s kullanýldý, fakat bir andaç gibi tanýmlanmadý ve kurallara "
"sahipdeðil"
"simge %s kullanýldý, fakat bir andaç olarak tanýmlanmadý ve kurallarý yok"
#: src/reader.c:1743
#, c-format
@@ -639,72 +637,41 @@ msgstr "ba
msgid "the start symbol %s is a token"
msgstr "baþlangýç simgesi %s bir andaçtýr"
#: src/reduce.c:400
#: src/reduce.c:409
msgid "Useless nonterminals:"
msgstr "Yararsýz kurallar:"
#: src/reduce.c:414
#: src/reduce.c:422
msgid "Terminals which are not used:"
msgstr "Kullanýlmayan sabit simgeler:"
#: src/reduce.c:425
#: src/reduce.c:433
msgid "Useless rules:"
msgstr "Yararsýz kurallar:"
#: src/reduce.c:451
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Deðiþkenler\n"
"-----------\n"
"\n"
#: src/reduce.c:503
#, fuzzy, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d kural asla indirgenmedi\n"
#: src/reduce.c:452
msgid "Value Sprec Sassoc Tag\n"
msgstr "Deðer Söncel Sbirleþ Etiket\n"
#: src/reduce.c:511
#, fuzzy, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d yararsýz deðiþken simge%s"
#: src/reduce.c:456
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Kurallar\n"
"--------\n"
"\n"
#: src/reduce.c:470
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"Kurallar yorumlandý\n"
"-------------------\n"
"\n"
#: src/reduce.c:491
#, c-format
msgid "%d rules never reduced\n"
msgstr "%d kural asla indirgenmedi\n"
#: src/reduce.c:497
#, c-format
msgid "%d useless nonterminal%s"
msgstr "%d yararsýz deðiþken simge%s"
#: src/reduce.c:502
#: src/reduce.c:517
msgid " and "
msgstr " ve "
#: src/reduce.c:506
#, c-format
msgid "%d useless rule%s"
msgstr "%d yararsýz kural%s"
#: src/reduce.c:520
#, fuzzy, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d yararsýz kural%s"
#: src/reduce.c:536
#: src/reduce.c:551
#, c-format
msgid "Start symbol %s does not derive any sentence"
msgstr "Baþlangýç simgesi %s herhangi bir cümleden türemez"
@@ -788,34 +755,43 @@ msgstr "bellek t
#. 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:268
#: lib/quotearg.c:274
msgid "`"
msgstr "`"
#: lib/quotearg.c:269
#: lib/quotearg.c:275
msgid "'"
msgstr "'"
#~ msgid " 1 shift/reduce conflict"
#~ msgstr " 1 öteleme/indirgeme çeliþkisi"
#~ msgid " 1 reduce/reduce conflict"
#~ msgstr " 1 indirgeme/indirgeme çeliþkisi"
#~ msgid "%s contains"
#~ msgstr "%s içerir"
#~ msgid "DERIVES"
#~ msgstr "TÜRETÝLENLER"
#~ msgid "%s derives"
#~ msgstr "%s türetildi"
#~ msgid "Entering set_nullable"
#~ msgstr "set_nullable'a girildi"
#~ msgid "%s: internal error: %s\n"
#~ msgstr "%s: iç hata: %s\n"
#~ msgid ""
#~ "reduced %s defines %d terminal%s, %d nonterminal%s, and %d production%s.\n"
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "indirgenen %s tanýmlanan %d sabit simge%s, %d deðiþken simge%s,ve %d "
#~ "üretilen%s.\n"
#~ "Deðiþkenler\n"
#~ "-----------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Deðer Söncel Sbirleþ Etiket\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Kurallar\n"
#~ "--------\n"
#~ "\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Kurallar yorumlandý\n"
#~ "-------------------\n"
#~ "\n"
+138 -145
View File
@@ -30,7 +30,7 @@
#include "complain.h"
#include "closure.h"
#include "LR0.h"
#include "reduce.h"
int nstates;
int final_state;
@@ -63,11 +63,13 @@ static void
allocate_itemsets (void)
{
int i;
int count;
short *symbol_count = NULL;
count = 0;
symbol_count = XCALLOC (short, nsyms);
/* Count the number of occurrences of all the symbols in RITEMS.
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);
for (i = 0; ritem[i]; ++i)
if (ritem[i] > 0)
@@ -93,7 +95,7 @@ allocate_itemsets (void)
count += symbol_count[i];
}
shift_symbol = symbol_count;
free (symbol_count);
kernel_size = XCALLOC (int, nsyms);
}
@@ -112,13 +114,13 @@ allocate_storage (void)
static void
free_storage (void)
{
XFREE (shift_symbol);
XFREE (redset);
XFREE (shiftset);
XFREE (kernel_base);
XFREE (kernel_size);
free (shift_symbol);
free (redset);
free (shiftset);
free (kernel_base);
free (kernel_size);
XFREE (kernel_items);
XFREE (state_table);
free (state_table);
}
@@ -139,7 +141,6 @@ static void
new_itemsets (void)
{
int i;
int shiftcount;
if (trace_flag)
fprintf (stderr, "Entering new_itemsets, state = %d\n",
@@ -148,25 +149,24 @@ new_itemsets (void)
for (i = 0; i < nsyms; i++)
kernel_size[i] = 0;
shiftcount = 0;
shift_symbol = XCALLOC (short, nsyms);
nshifts = 0;
for (i = 0; i < itemsetsize; ++i)
for (i = 0; i < nitemset; ++i)
{
int symbol = ritem[itemset[i]];
if (symbol > 0)
{
if (!kernel_size[symbol])
{
shift_symbol[shiftcount] = symbol;
shiftcount++;
shift_symbol[nshifts] = symbol;
nshifts++;
}
kernel_base[symbol][kernel_size[symbol]] = itemset[i] + 1;
kernel_size[symbol]++;
}
}
nshifts = shiftcount;
}
@@ -311,13 +311,16 @@ new_states (void)
}
/*------------------------------------------------------------.
| Save the NSHIFTS of SHIFTSET into the current linked list. |
`------------------------------------------------------------*/
static void
save_shifts (void)
{
shifts *p = SHIFTS_ALLOC (nshifts);
shifts *p = shifts_new (nshifts);
p->number = this_state->number;
p->nshifts = nshifts;
shortcpy (p->shifts, shiftset, nshifts);
@@ -348,9 +351,8 @@ insert_start_shift (void)
last_state = statep;
/* Make a shift from this state to (what will be) the final state. */
sp = SHIFTS_ALLOC (1);
sp = shifts_new (1);
sp->number = nstates++;
sp->nshifts = 1;
sp->shifts[0] = nstates;
last_shift->next = sp;
@@ -369,131 +371,18 @@ insert_start_shift (void)
static void
augment_automaton (void)
{
int i;
int k;
core *statep;
shifts *sp;
shifts *sp2;
shifts *sp1 = NULL;
sp = first_shift;
if (sp)
if (!sp->nshifts)
{
if (sp->number == 0)
{
k = sp->nshifts;
statep = first_state->next;
/* There are no shifts for any state. Make one shift, from the
initial state to the next-to-final state. */
/* The states reached by shifts from first_state are numbered 1...K.
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_ALLOC (sp->nshifts + 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 = SHIFTS_ALLOC (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_ALLOC (sp->nshifts + 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 = SHIFTS_ALLOC (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 = SHIFTS_ALLOC (1);
sp->nshifts = 1;
sp = shifts_new (1);
sp->shifts[0] = nstates;
/* Initialize the chain of shifts with sp. */
@@ -504,6 +393,109 @@ augment_automaton (void)
what will be the final state. */
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
next-to-final state.
@@ -514,9 +506,8 @@ augment_automaton (void)
last_state = statep;
/* Make the shift from the final state to the termination state. */
sp = SHIFTS_ALLOC (1);
sp = shifts_new (1);
sp->number = nstates++;
sp->nshifts = 1;
sp->shifts[0] = nstates;
last_shift->next = sp;
last_shift = sp;
@@ -548,7 +539,7 @@ save_reductions (void)
/* Find and count the active items that represent ends of rules. */
count = 0;
for (i = 0; i < itemsetsize; ++i)
for (i = 0; i < nitemset; ++i)
{
int item = ritem[itemset[i]];
if (item < 0)
@@ -589,6 +580,9 @@ generate_states (void)
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
state. ruleset gets a 1 bit for each rule that could reduce
now. itemset gets a vector of all the items that could be
@@ -603,8 +597,7 @@ generate_states (void)
/* create the shifts structures for the shifts to those states,
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 */
this_state = this_state->next;
+31 -6
View File
@@ -1,19 +1,45 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
AUTOMAKE_OPTIONS = 1.4 ../lib/ansi2knr
## 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 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@ \
-DBISON_SIMPLE=\"$(pkgdatadir)/bison.simple\" \
-DBISON_HAIRY=\"$(pkgdatadir)/bison.hairy\" \
-DLOCALEDIR=\"$(datadir)/locale\"
INCLUDES = -I../intl -I$(top_srcdir)/lib -I..
LDADD = @INTLLIBS@ ../lib/libbison.a
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS)
# 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)/lib \
-I$(top_srcdir)
LDADD = $(INTLLIBS) ../lib/libbison.a
bin_PROGRAMS = bison
bison_SOURCES = LR0.c closure.c complain.c conflicts.c \
derives.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
EXTRA_bison_SOURCES = vmsgetargs.c
@@ -21,7 +47,6 @@ EXTRA_bison_SOURCES = vmsgetargs.c
noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \
derives.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 \
vcg.h vcg_defaults.h print_graph.h
+26 -13
View File
@@ -101,22 +101,33 @@ am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
AUTOMAKE_OPTIONS = 1.4 ../lib/ansi2knr
AUTOMAKE_OPTIONS = ../lib/ansi2knr
DEFS = @DEFS@ \
-DBISON_SIMPLE=\"$(pkgdatadir)/bison.simple\" \
-DBISON_HAIRY=\"$(pkgdatadir)/bison.hairy\" \
-DLOCALEDIR=\"$(datadir)/locale\"
INCLUDES = -I../intl -I$(top_srcdir)/lib -I..
LDADD = @INTLLIBS@ ../lib/libbison.a
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS)
# 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)/lib \
-I$(top_srcdir)
LDADD = $(INTLLIBS) ../lib/libbison.a
bin_PROGRAMS = bison
bison_SOURCES = LR0.c closure.c complain.c conflicts.c \
derives.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
@@ -125,7 +136,6 @@ EXTRA_bison_SOURCES = vmsgetargs.c
noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \
derives.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 \
vcg.h vcg_defaults.h print_graph.h
@@ -144,9 +154,10 @@ am_bison_OBJECTS = LR0$U.$(OBJEXT) closure$U.$(OBJEXT) \
complain$U.$(OBJEXT) conflicts$U.$(OBJEXT) derives$U.$(OBJEXT) \
files$U.$(OBJEXT) getargs$U.$(OBJEXT) gram$U.$(OBJEXT) \
lalr$U.$(OBJEXT) lex$U.$(OBJEXT) main$U.$(OBJEXT) \
nullable$U.$(OBJEXT) output$U.$(OBJEXT) print$U.$(OBJEXT) \
reader$U.$(OBJEXT) reduce$U.$(OBJEXT) symtab$U.$(OBJEXT) \
warshall$U.$(OBJEXT) vcg$U.$(OBJEXT) print_graph$U.$(OBJEXT)
nullable$U.$(OBJEXT) output$U.$(OBJEXT) state$U.$(OBJEXT) \
print$U.$(OBJEXT) reader$U.$(OBJEXT) reduce$U.$(OBJEXT) \
symtab$U.$(OBJEXT) warshall$U.$(OBJEXT) vcg$U.$(OBJEXT) \
print_graph$U.$(OBJEXT)
bison_OBJECTS = $(am_bison_OBJECTS)
bison_LDADD = $(LDADD)
bison_DEPENDENCIES = ../lib/libbison.a
@@ -164,14 +175,13 @@ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
@AMDEP_TRUE@ $(DEPDIR)/main$U.Po $(DEPDIR)/nullable$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)/reduce$U.Po $(DEPDIR)/symtab$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/vcg$U.Po $(DEPDIR)/vmsgetargs$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/warshall$U.Po
@AMDEP_TRUE@ $(DEPDIR)/reduce$U.Po $(DEPDIR)/state$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/symtab$U.Po $(DEPDIR)/vcg$U.Po \
@AMDEP_TRUE@ $(DEPDIR)/vmsgetargs$U.Po $(DEPDIR)/warshall$U.Po
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
DIST_SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES)
DATA = $(pkgdata_DATA)
@@ -246,6 +256,7 @@ mostlyclean-kr:
@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)/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)/vcg$U.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vmsgetargs$U.Po@am__quote@
@@ -300,6 +311,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
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
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)
$(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)
@@ -313,7 +326,7 @@ conflicts_.$(OBJEXT) derives_.$(OBJEXT) files_.$(OBJEXT) \
getargs_.$(OBJEXT) gram_.$(OBJEXT) lalr_.$(OBJEXT) lex_.$(OBJEXT) \
main_.$(OBJEXT) nullable_.$(OBJEXT) output_.$(OBJEXT) print_.$(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)
uninstall-info-am:
install-pkgdataDATA: $(pkgdata_DATA)
+266 -173
View File
@@ -28,75 +28,112 @@
It was written by Richard Stallman by simplifying the hairy parser
used when %semantic_parser is specified. */
#ifndef YYSTACK_USE_ALLOCA
# ifdef alloca
# define YYSTACK_USE_ALLOCA 1
# else /* alloca not defined */
# ifdef __GNUC__
# define YYSTACK_USE_ALLOCA 1
# 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>
/* All symbols defined below should begin with yy or YY, to avoid
infringing on user name space. This should be done even for local
variables, as they might otherwise be expanded by user macros.
There are some unavoidable exceptions within include files to
define necessary C library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below. */
#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
/* The parser invokes alloca or malloc; define the necessary symbols. */
# if YYSTACK_USE_ALLOCA
# define YYSTACK_ALLOC alloca
# define YYSIZE_T size_t
# else
# ifndef YYSTACK_USE_ALLOCA
# if defined (alloca) || defined (_ALLOCA_H)
# define YYSTACK_ALLOC alloca
# define YYSIZE_T size_t
# else
# if defined (__GNUC__) || defined (_AIX) || defined (__hpux)
# define YYSTACK_ALLOC __builtin_alloca
# endif
# ifndef __GNUC__
# ifdef _AIX
# pragma alloca
# 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 */
# if defined (__sgi) || defined (__sparc__) || defined (__sparc) || defined (__sun)
# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
# define YYSTACK_ALLOC alloca
# define YYSIZE_T size_t
# endif
# endif
# endif
# endif
# endif
#ifndef YYSTACK_USE_ALLOCA
# define YYSTACK_USE_ALLOCA 0
# ifdef YYSTACK_ALLOC
/* Pacify GCC's `empty if-body' warning. */
# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
# else
# define YYSTACK_ALLOC malloc
# define YYSTACK_FREE(Ptr) free (Ptr)
# if defined (__STDC__) || defined (__cplusplus)
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
# 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
/* Realloc WHAT from SIZE to YYSTACKSIZE elements of TYPE.
If WHAT was malloc'ed (not the original automatic ARRAY), free it. */
#if YYSTACK_USE_ALLOCA
# define YYSTACK_REALLOC(Type, What, Array) \
do { \
Type *old = What; \
What = (Type *) malloc (yystacksize * sizeof (Type)); \
__yy_memcpy ((char *) What, (char *) old, \
(size) * (unsigned int) sizeof (Type)); \
yyfree_stacks = 1; \
if (old != Array) \
free (old); \
} while (0)
#else
# define YYSTACK_REALLOC(Type, What, Array) \
do { \
Type *old = What; \
What = (Type *) alloca (yystacksize * sizeof (Type)); \
__yy_memcpy ((char *) What, (char *) old, \
(size) * (unsigned int) sizeof (Type)); \
} while (0)
#if ! defined (YYSIZE_T) && defined (size_t)
# define YYSIZE_T size_t
#endif
#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
#endif
#if ! defined (YYSIZE_T)
# define YYSIZE_T unsigned int
#endif
#define yyerrok (yyerrstatus = 0)
@@ -169,6 +206,7 @@ while (0)
/* Enable debugging if requested. */
#if YYDEBUG
# include <stdio.h>
# define YYDPRINTF(Args) \
do { \
if (yydebug) \
@@ -189,7 +227,12 @@ int yydebug;
#endif
/* 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
# undef YYMAXDEPTH
#endif
@@ -198,35 +241,83 @@ int yydebug;
# define YYMAXDEPTH 10000
#endif
/* Define __yy_memcpy. Note that the size argument
should be passed with type unsigned int, because that is what the non-GCC
definitions require. With GCC, __builtin_memcpy takes an arg
of type size_t, but it can handle unsigned int. */
#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++ */
#if ! defined (yyoverflow) && ! defined (yymemcpy)
# if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
# define yymemcpy __builtin_memcpy
# else /* not GNU C or C++ */
/* This is the most reliable way to avoid incompatibilities
in available built-in functions on various systems. */
static void
# ifndef __cplusplus
__yy_memcpy (to, from, count)
char *to;
const char *from;
unsigned int count;
# else /* __cplusplus */
__yy_memcpy (char *to, const char *from, unsigned int count)
# endif
# if defined (__STDC__) || defined (__cplusplus)
yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
# else
yymemcpy (yyto, yyfrom, yycount)
char *yyto;
const char *yyfrom;
YYSIZE_T yycount;
# endif
{
register const char *f = from;
register char *t = to;
register int i = count;
register const char *yyf = yyfrom;
register char *yyt = yyto;
register YYSIZE_T yyi = yycount;
while (i-- > 0)
*t++ = *f++;
while (yyi-- != 0)
*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
#line
@@ -262,7 +353,7 @@ int yyparse (void);
/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
variables are global, or local to YYPARSE. */
#define _YY_DECL_VARIABLES \
#define YY_DECL_NON_LSP_VARIABLES \
/* The lookahead symbol. */ \
int yychar; \
\
@@ -274,13 +365,13 @@ int yynerrs;
#if YYLSP_NEEDED
# define YY_DECL_VARIABLES \
_YY_DECL_VARIABLES \
YY_DECL_NON_LSP_VARIABLES \
\
/* Location data for the lookahead symbol. */ \
YYLTYPE yylloc;
#else
# define YY_DECL_VARIABLES \
_YY_DECL_VARIABLES
YY_DECL_NON_LSP_VARIABLES
#endif
@@ -301,6 +392,7 @@ yyparse (YYPARSE_PARAM_ARG)
register int yystate;
register int yyn;
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
/* Lookahead token as an internal (translated) token number. */
@@ -337,16 +429,15 @@ yyparse (YYPARSE_PARAM_ARG)
# define YYPOPSTACK (yyvsp--, yyssp--)
#endif
int yystacksize = YYINITDEPTH;
int yyfree_stacks = 0;
YYSIZE_T yystacksize = YYINITDEPTH;
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
# if YYLSP_NEEDED
#if YYLSP_NEEDED
YYLTYPE yyloc;
# endif
#endif
/* When reducing, the number of symbols on the RHS of the reduced
rule. */
@@ -386,7 +477,7 @@ yyparse (YYPARSE_PARAM_ARG)
if (yyssp >= yyss + yystacksize - 1)
{
/* Get the current used size of the three stacks, in elements. */
int size = yyssp - yyss + 1;
YYSIZE_T yysize = yyssp - yyss + 1;
#ifdef yyoverflow
{
@@ -403,15 +494,15 @@ yyparse (YYPARSE_PARAM_ARG)
/* 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, size * sizeof (*yyssp),
&yyvs1, size * sizeof (*yyvsp),
&yyls1, size * sizeof (*yylsp),
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yyls1, yysize * sizeof (*yylsp),
&yystacksize);
yyls = yyls1;
# else
yyoverflow ("parser stack overflow",
&yyss1, size * sizeof (*yyssp),
&yyvs1, size * sizeof (*yyvsp),
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yystacksize);
# endif
yyss = yyss1;
@@ -420,36 +511,36 @@ yyparse (YYPARSE_PARAM_ARG)
#else /* no yyoverflow */
/* Extend the stack our own way. */
if (yystacksize >= YYMAXDEPTH)
{
yyerror ("parser stack overflow");
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
# if YYLSP_NEEDED
free (yyls);
# endif
}
return 2;
}
goto yyoverflowlab;
yystacksize *= 2;
if (yystacksize > YYMAXDEPTH)
yystacksize = YYMAXDEPTH;
YYSTACK_REALLOC (short, yyss, yyssa);
YYSTACK_REALLOC (YYSTYPE, yyvs, yyvsa);
{
short *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
goto yyoverflowlab;
YYSTACK_RELOCATE (short, yyss);
YYSTACK_RELOCATE (YYSTYPE, yyvs);
# if YYLSP_NEEDED
YYSTACK_REALLOC (YYLTYPE, yyls, yylsa);
YYSTACK_RELOCATE (YYLTYPE, yyls);
# endif
# undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
}
#endif /* no yyoverflow */
yyssp = yyss + size - 1;
yyvsp = yyvs + size - 1;
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
#if YYLSP_NEEDED
yylsp = yyls + size - 1;
yylsp = yyls + yysize - 1;
#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)
YYABORT;
@@ -601,14 +692,14 @@ yyreduce:
are defined only if `YYDEBUG' is set. */
if (yydebug)
{
int i;
int yyi;
fprintf (stderr, "Reducing via rule %d (line %d), ",
yyn, yyrline[yyn]);
/* Print the symbols being reduced, and their result. */
for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
fprintf (stderr, "%s ", yytname[yyrhs[i]]);
for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
fprintf (stderr, "%s ", yytname[yyrhs[yyi]]);
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
}
#endif
@@ -624,10 +715,10 @@ yyreduce:
#if YYDEBUG
if (yydebug)
{
short *ssp1 = yyss - 1;
short *yyssp1 = yyss - 1;
fprintf (stderr, "state stack now");
while (ssp1 != yyssp)
fprintf (stderr, " %d", *++ssp1);
while (yyssp1 != yyssp)
fprintf (stderr, " %d", *++yyssp1);
fprintf (stderr, "\n");
}
#endif
@@ -666,45 +757,47 @@ yyerrlab:
if (yyn > YYFLAG && yyn < YYLAST)
{
int size = 0;
char *msg;
int x, count;
YYSIZE_T yysize = 0;
char *yymsg;
int yyx, yycount;
count = 0;
/* Start X at -YYN if negative to avoid negative indexes in
yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
for (x = yyn < 0 ? -yyn : 0;
x < (int) (sizeof (yytname) / sizeof (char *)); x++)
if (yycheck[x + yyn] == x)
size += strlen (yytname[x]) + 15, count++;
size += strlen ("parse error, unexpected ") + 1;
size += strlen (yytname[YYTRANSLATE (yychar)]);
msg = (char *) malloc (size);
if (msg != 0)
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx)
yysize += yystrlen (yytname[yyx]) + 15, yycount++;
yysize += yystrlen ("parse error, unexpected ") + 1;
yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
strcpy (msg, "parse error, unexpected ");
strcat (msg, yytname[YYTRANSLATE (yychar)]);
char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
if (count < 5)
if (yycount < 5)
{
count = 0;
for (x = yyn < 0 ? -yyn : 0;
x < (int) (sizeof (yytname) / sizeof (char *)); x++)
if (yycheck[x + yyn] == x)
yycount = 0;
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *));
yyx++)
if (yycheck[yyx + yyn] == yyx)
{
strcat (msg, count == 0 ? ", expecting " : " or ");
strcat (msg, yytname[x]);
count++;
const char *yyq = ! yycount ? ", expecting " : " or ";
yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
yycount++;
}
}
yyerror (msg);
free (msg);
yyerror (yymsg);
YYSTACK_FREE (yymsg);
}
else
yyerror ("parse error; also virtual memory exhausted");
}
else
#endif /* YYERROR_VERBOSE */
#endif /* defined (YYERROR_VERBOSE) */
yyerror ("parse error");
}
goto yyerrlab1;
@@ -767,10 +860,10 @@ yyerrpop:
#if YYDEBUG
if (yydebug)
{
short *ssp1 = yyss - 1;
short *yyssp1 = yyss - 1;
fprintf (stderr, "Error: state stack now");
while (ssp1 != yyssp)
fprintf (stderr, " %d", *++ssp1);
while (yyssp1 != yyssp)
fprintf (stderr, " %d", *++yyssp1);
fprintf (stderr, "\n");
}
#endif
@@ -816,28 +909,28 @@ yyerrhandle:
| yyacceptlab -- YYACCEPT comes here. |
`-------------------------------------*/
yyacceptlab:
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
#if YYLSP_NEEDED
free (yyls);
#endif
}
return 0;
yyresult = 0;
goto yyreturn;
/*-----------------------------------.
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
yyabortlab:
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
#if YYLSP_NEEDED
free (yyls);
yyresult = 1;
goto yyreturn;
/*---------------------------------------------.
| yyoverflowab -- parser overflow comes here. |
`---------------------------------------------*/
yyoverflowlab:
yyerror ("parser stack overflow");
yyresult = 2;
/* Fall through. */
yyreturn:
#ifndef yyoverflow
if (yyss != yyssa)
YYSTACK_FREE (yyss);
#endif
}
return 1;
return yyresult;
}
+74 -136
View File
@@ -26,9 +26,9 @@
#include "derives.h"
#include "warshall.h"
/* ITEMSETSIZE is the size of the array ITEMSET. */
/* NITEMSET is the size of the array ITEMSET. */
short *itemset;
int itemsetsize;
int nitemset;
static unsigned *ruleset;
@@ -36,8 +36,9 @@ static unsigned *ruleset;
static unsigned *fderives;
static unsigned *firsts;
#define FDERIVES(Symbol) (fderives + (Symbol) * rulesetsize)
#define FIRSTS(Symbol) (firsts + (Symbol) * varsetsize)
/* 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 */
static int rulesetsize;
@@ -51,33 +52,33 @@ static int varsetsize;
`-----------------*/
static void
print_closure (int n)
print_closure (const char *title, short *array, size_t size)
{
int i;
fprintf (stderr, "n = %d\n", n);
for (i = 0; i < itemsetsize; ++i)
fprintf (stderr, " %d\n", itemset[i]);
fprintf (stderr, "\n\n");
size_t i;
fprintf (stderr, "Closure: %s\n", title);
for (i = 0; i < size; ++i)
{
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
print_firsts (void)
{
int i;
int j;
unsigned *rowp;
int i, j;
fprintf (stderr, "FIRSTS\n");
for (i = ntokens; i < nsyms; i++)
{
fprintf (stderr, "\t%s firsts\n", tags[i]);
rowp = FIRSTS (i - ntokens);
for (j = 0; j < nvars; j++)
if (BITISSET (rowp, j))
if (BITISSET (FIRSTS (i), j))
fprintf (stderr, "\t\t%d (%s)\n", j + ntokens, tags[j + ntokens]);
}
fprintf (stderr, "\n\n");
@@ -89,17 +90,14 @@ print_fderives (void)
{
int i;
int j;
unsigned *rp;
fprintf (stderr, "FDERIVES\n");
for (i = ntokens; i < nsyms; i++)
{
fprintf (stderr, "\t%s derives\n", tags[i]);
rp = FDERIVES (i);
for (j = 0; j <= nrules; j++)
if (BITISSET (rp, j))
if (BITISSET (FDERIVES (i), j))
{
short *rhsp;
fprintf (stderr, "\t\t%d:", j);
@@ -124,33 +122,19 @@ print_fderives (void)
static void
set_firsts (void)
{
unsigned *row;
int symbol;
short *sp;
int rowsize;
int i, j;
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++)
{
sp = derives[i];
while (*sp >= 0)
{
symbol = ritem[rule_table[*sp++].rhs];
if (ISVAR (symbol))
{
symbol -= ntokens;
SETBIT (row, symbol);
}
}
row += rowsize;
}
for (j = 0; derives[i][j] >= 0; ++j)
{
int symbol = ritem[rule_table[derives[i][j]].rhs];
if (ISVAR (symbol))
SETBIT (FIRSTS (i), symbol - ntokens);
}
RTC (firsts, nvars);
@@ -171,46 +155,17 @@ set_firsts (void)
static void
set_fderives (void)
{
unsigned *rrow;
unsigned *vrow;
int j;
unsigned cword;
short *rp;
int b;
int i, j, k;
int ruleno;
int i;
fderives = XCALLOC (unsigned, nvars * rulesetsize) - ntokens * rulesetsize;
fderives = XCALLOC (unsigned, nvars * rulesetsize);
set_firsts ();
rrow = FDERIVES (ntokens);
for (i = ntokens; i < nsyms; i++)
{
vrow = FIRSTS (i - ntokens);
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;
}
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]);
if (trace_flag)
print_fderives ();
@@ -235,76 +190,59 @@ new_closure (int n)
void
closure (short *core, int n)
{
int ruleno;
short *csp;
/* Index over CORE. */
int c;
int itemno;
int i;
/* Index over RULESET. */
int r;
/* A bit index over RULESET. */
int ruleno;
if (trace_flag)
{
fprintf (stderr, "Entering closure (items = {");
for (i = 0; i < n; ++i)
fprintf (stderr, " %d ", core[i]);
fprintf (stderr, "}, nitems = %d)\n", n);
}
print_closure ("input", core, n);
if (n == 0)
{
for (i = 0; i < rulesetsize; ++i)
ruleset[i] = FDERIVES (start_symbol)[i];
for (r = 0; r < rulesetsize; ++r)
ruleset[r] = FDERIVES (start_symbol)[r];
}
else
{
for (i = 0; i < rulesetsize; ++i)
ruleset[i] = 0;
for (r = 0; r < rulesetsize; ++r)
ruleset[r] = 0;
for (i = 0; i < n; ++i)
{
int symbol = ritem[core[i]];
if (ISVAR (symbol))
{
int j;
for (j = 0; j < rulesetsize; ++j)
ruleset[j] |= FDERIVES (symbol)[j];
}
}
for (c = 0; c < n; ++c)
if (ISVAR (ritem[core[c]]))
for (r = 0; r < rulesetsize; ++r)
ruleset[r] |= FDERIVES (ritem[core[c]])[r];
}
ruleno = 0;
itemsetsize = 0;
csp = core;
for (i = 0; i < rulesetsize; ++i)
nitemset = 0;
c = 0;
for (ruleno = 0; ruleno < rulesetsize * BITS_PER_WORD; ++ruleno)
if (BITISSET (ruleset, ruleno))
{
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)
{
int word = ruleset[i];
if (word == 0)
{
ruleno += BITS_PER_WORD;
}
else
{
int b;
for (b = 0; b < BITS_PER_WORD; b++)
{
if (word & (1 << b))
{
itemno = rule_table[ruleno].rhs;
while (csp < (core + n) && *csp < itemno)
itemset[itemsetsize++] = *csp++;
itemset[itemsetsize++] = itemno;
}
ruleno++;
}
}
itemset[nitemset] = core[c];
nitemset++;
c++;
}
while (csp < (core + n))
itemset[itemsetsize++] = *csp++;
if (trace_flag)
print_closure (n);
print_closure ("output", itemset, nitemset);
}
@@ -313,5 +251,5 @@ free_closure (void)
{
XFREE (itemset);
XFREE (ruleset);
XFREE (fderives + ntokens * rulesetsize);
XFREE (fderives);
}
+9 -8
View File
@@ -30,18 +30,19 @@
void new_closure PARAMS ((int n));
/* Given a vector of item numbers ITEMS, of length N, set up ruleset
and itemset to indicate what rules could be run and which items
could be accepted when those items are the active ones.
/* Given the kernel (aka core) of a state (a vector of item numbers
ITEMS, of length N), set up ruleset and itemset to indicate what
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
all rules which could potentially describe the next input to be
read.
itemset is a vector of item numbers; itemsetend points to just
beyond the end of the part of it that is significant. closure
places there the indices of all items which represent units of
input that could arrive next. */
ITEMSET is a vector of item numbers; NITEMSET is its size
9actually, points to just beyond the end of the part of it that is
significant). closure places there the indices of all items which
represent units of input that could arrive next. */
void closure PARAMS ((short *items, int n));
@@ -51,6 +52,6 @@ void closure PARAMS ((short *items, int n));
void free_closure PARAMS ((void));
extern short *itemset;
extern int itemsetsize;
extern int nitemset;
#endif /* !CLOSURE_H_ */
+145 -317
View File
@@ -29,7 +29,6 @@
#include "reader.h"
#include "LR0.h"
errs **err_table = NULL;
/* -1 stands for not specified. */
int expected_conflicts = -1;
static char *conflicts = NULL;
@@ -57,21 +56,12 @@ Conflict in state %d between rule %d and token %s resolved as %s.\n"),
static void
flush_shift (int state, int token)
{
shifts *shiftp;
int k, i;
shifts *shiftp = state_table[state].shifts;
int i;
shiftp = state_table[state].shift_table;
if (shiftp)
{
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (shiftp->shifts[i]
&& token == state_table[shiftp->shifts[i]].accessing_symbol)
(shiftp->shifts[i]) = 0;
}
}
for (i = 0; i < shiftp->nshifts; i++)
if (!SHIFT_IS_DISABLED (shiftp, i) && SHIFT_SYMBOL (shiftp, i) == token)
SHIFT_DISABLE (shiftp, i);
}
@@ -86,95 +76,79 @@ static void
resolve_sr_conflict (int state, int lookaheadnum)
{
int i;
int mask;
unsigned *fp1;
unsigned *fp2;
int redprec;
/* find the rule to reduce by to get precedence of reduction */
int redprec = rule_table[LAruleno[lookaheadnum]].prec;
errs *errp = ERRS_ALLOC (ntokens + 1);
short *errtokens = errp->errs;
/* find the rule to reduce by to get precedence of reduction */
redprec = rule_table[LAruleno[lookaheadnum]].prec;
mask = 1;
fp1 = LA (lookaheadnum);
fp2 = lookaheadset;
for (i = 0; i < ntokens; i++)
{
if ((mask & *fp2 & *fp1) && sprec[i])
/* Shift-reduce conflict occurs for token number i
and it has a precedence.
The precedence of shifting is that of token i. */
{
if (sprec[i] < redprec)
{
log_resolution (state, lookaheadnum, i, _("reduce"));
*fp2 &= ~mask; /* flush the shift for this token */
flush_shift (state, i);
}
else if (sprec[i] > redprec)
{
log_resolution (state, lookaheadnum, i, _("shift"));
*fp1 &= ~mask; /* flush the reduce for this token */
}
else
{
/* Matching precedence levels.
For left association, keep only the reduction.
For right association, keep only the shift.
For nonassociation, keep neither. */
if (BITISSET (LA (lookaheadnum), i)
&& BITISSET (lookaheadset, i)
&& sprec[i])
/* Shift-reduce conflict occurs for token number i
and it has a precedence.
The precedence of shifting is that of token i. */
{
if (sprec[i] < redprec)
{
log_resolution (state, lookaheadnum, i, _("reduce"));
/* flush the shift for this token */
RESETBIT (lookaheadset, i);
flush_shift (state, i);
}
else if (sprec[i] > redprec)
{
log_resolution (state, lookaheadnum, i, _("shift"));
/* flush the reduce for this token */
RESETBIT (LA (lookaheadnum), i);
}
else
{
/* Matching precedence levels.
For left association, keep only the reduction.
For right association, keep only the shift.
For nonassociation, keep neither. */
switch (sassoc[i])
{
case right_assoc:
log_resolution (state, lookaheadnum, i, _("shift"));
break;
switch (sassoc[i])
{
case right_assoc:
log_resolution (state, lookaheadnum, i, _("shift"));
break;
case left_assoc:
log_resolution (state, lookaheadnum, i, _("reduce"));
break;
case left_assoc:
log_resolution (state, lookaheadnum, i, _("reduce"));
break;
case non_assoc:
log_resolution (state, lookaheadnum, i, _("an error"));
break;
}
case non_assoc:
log_resolution (state, lookaheadnum, i, _("an error"));
break;
}
if (sassoc[i] != right_assoc)
{
*fp2 &= ~mask; /* flush the shift for this token */
flush_shift (state, i);
}
if (sassoc[i] != left_assoc)
{
*fp1 &= ~mask; /* flush the reduce for this token */
}
if (sassoc[i] == non_assoc)
{
/* Record an explicit error for this token. */
*errtokens++ = i;
}
}
}
if (sassoc[i] != right_assoc)
{
/* flush the shift for this token */
RESETBIT (lookaheadset, i);
flush_shift (state, i);
}
if (sassoc[i] != left_assoc)
{
/* flush the reduce for this token */
RESETBIT (LA (lookaheadnum), i);
}
if (sassoc[i] == non_assoc)
{
/* Record an explicit error for this token. */
*errtokens++ = i;
}
}
}
mask <<= 1;
if (mask == 0)
{
mask = 1;
fp2++;
fp1++;
}
}
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. */
i = (char *) errtokens - (char *) errp;
err_table[state] = ERRS_ALLOC (i + 1);
bcopy (errp, err_table[state], i);
}
else
err_table[state] = 0;
/* Some tokens have been explicitly made errors. Allocate a
permanent errs structure for this state, to record them. */
i = (char *) errtokens - (char *) errp;
state_table[state].errs = ERRS_ALLOC (i + 1);
memcpy (state_table[state].errs, errp, i);
free (errp);
}
@@ -184,7 +158,6 @@ set_conflicts (int state)
{
int i, j;
shifts *shiftp;
int symbol;
if (state_table[state].consistent)
return;
@@ -192,15 +165,10 @@ set_conflicts (int state)
for (i = 0; i < tokensetsize; i++)
lookaheadset[i] = 0;
shiftp = state_table[state].shift_table;
if (shiftp)
for (i = 0; i < shiftp->nshifts; i++)
{
symbol = state_table[shiftp->shifts[i]].accessing_symbol;
if (ISVAR (symbol))
break;
SETBIT (lookaheadset, symbol);
}
shiftp = state_table[state].shifts;
for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
if (!SHIFT_IS_DISABLED (shiftp, i))
SETBIT (lookaheadset, SHIFT_SYMBOL (shiftp, i));
/* Loop over all rules which require lookahead in this state. First
check for shift-reduce conflict, and try to resolve using
@@ -241,8 +209,6 @@ solve_conflicts (void)
shiftset = XCALLOC (unsigned, tokensetsize);
lookaheadset = XCALLOC (unsigned, tokensetsize);
err_table = XCALLOC (errs *, nstates);
for (i = 0; i < nstates; i++)
set_conflicts (i);
}
@@ -255,18 +221,10 @@ solve_conflicts (void)
static int
count_sr_conflicts (int state)
{
int i;
int k;
int mask;
shifts *shiftp;
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
int symbol;
int i, k;
int src_count = 0;
shifts *shiftp = state_table[state].shifts;
shiftp = state_table[state].shift_table;
if (!shiftp)
return 0;
@@ -276,49 +234,22 @@ count_sr_conflicts (int state)
lookaheadset[i] = 0;
}
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (!shiftp->shifts[i])
continue;
symbol = state_table[shiftp->shifts[i]].accessing_symbol;
if (ISVAR (symbol))
break;
SETBIT (shiftset, symbol);
}
for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
if (!SHIFT_IS_DISABLED (shiftp, i))
SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
k = state_table[state + 1].lookaheads;
fp3 = lookaheadset + tokensetsize;
for (i = state_table[state].lookaheads;
i < state_table[state + 1].lookaheads;
++i)
for (k = 0; k < tokensetsize; ++k)
lookaheadset[k] |= LA (i)[k];
for (i = state_table[state].lookaheads; i < k; i++)
{
fp1 = LA (i);
fp2 = lookaheadset;
for (k = 0; k < tokensetsize; ++k)
lookaheadset[k] &= shiftset[k];
while (fp2 < fp3)
*fp2++ |= *fp1++;
}
fp1 = shiftset;
fp2 = lookaheadset;
while (fp2 < fp3)
*fp2++ &= *fp1++;
mask = 1;
fp2 = lookaheadset;
for (i = 0; i < ntokens; i++)
{
if (mask & *fp2)
src_count++;
mask <<= 1;
if (mask == 0)
{
mask = 1;
fp2++;
}
}
if (BITISSET (lookaheadset, i))
src_count++;
return src_count;
}
@@ -332,9 +263,6 @@ static int
count_rr_conflicts (int state)
{
int i;
unsigned mask;
unsigned *baseword;
int rrc_count = 0;
int m = state_table[state].lookaheads;
@@ -343,31 +271,16 @@ count_rr_conflicts (int state)
if (n - m < 2)
return 0;
mask = 1;
baseword = LA (m);
for (i = 0; i < ntokens; i++)
{
unsigned *wordp = baseword;
int count = 0;
int j;
for (j = m; j < n; j++)
{
if (mask & *wordp)
count++;
wordp += tokensetsize;
}
if (BITISSET (LA (m), j))
count++;
if (count >= 2)
rrc_count++;
mask <<= 1;
if (mask == 0)
{
mask = 1;
baseword++;
}
}
return rrc_count;
@@ -419,6 +332,7 @@ conflict_report (int src_num, int rrc_num)
void
conflicts_output (FILE *out)
{
bool printed_sth = FALSE;
int i;
for (i = 0; i < nstates; i++)
if (conflicts[i])
@@ -426,7 +340,10 @@ conflicts_output (FILE *out)
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);
}
@@ -498,20 +415,8 @@ print_reductions (FILE *out, int state)
{
int i;
int j;
int k;
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
unsigned *fp4;
int rule;
int symbol;
unsigned mask;
int m;
int n;
int default_LA;
int default_rule = 0;
int cmax;
int count;
shifts *shiftp;
errs *errp;
int nodefault = 0;
@@ -519,105 +424,62 @@ print_reductions (FILE *out, int state)
for (i = 0; i < tokensetsize; i++)
shiftset[i] = 0;
shiftp = state_table[state].shift_table;
if (shiftp)
{
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (!shiftp->shifts[i])
continue;
symbol = state_table[shiftp->shifts[i]].accessing_symbol;
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);
}
}
shiftp = state_table[state].shifts;
for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
if (!SHIFT_IS_DISABLED (shiftp, i))
{
/* if this state has a shift for the error token, don't use a
default rule. */
if (SHIFT_IS_ERROR (shiftp, i))
nodefault = 1;
SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
}
errp = err_table[state];
errp = state_table[state].errs;
if (errp)
{
k = errp->nerrs;
for (i = 0; i < k; i++)
{
if (!errp->errs[i])
continue;
symbol = errp->errs[i];
SETBIT (shiftset, symbol);
}
}
for (i = 0; i < errp->nerrs; i++)
if (errp->errs[i])
SETBIT (shiftset, errp->errs[i]);
m = state_table[state].lookaheads;
n = state_table[state + 1].lookaheads;
if (n - m == 1 && !nodefault)
{
default_rule = LAruleno[m];
int k;
int default_rule = LAruleno[m];
fp1 = LA (m);
fp2 = shiftset;
fp3 = lookaheadset;
fp4 = lookaheadset + tokensetsize;
while (fp3 < fp4)
*fp3++ = *fp1++ & *fp2++;
mask = 1;
fp3 = lookaheadset;
for (k = 0; k < tokensetsize; ++k)
lookaheadset[k] = LA (m)[k] & shiftset[k];
for (i = 0; i < ntokens; i++)
{
if (mask & *fp3)
fprintf (out, _(" %-4s\t[reduce using rule %d (%s)]\n"),
tags[i], default_rule,
tags[rule_table[default_rule].lhs]);
mask <<= 1;
if (mask == 0)
{
mask = 1;
fp3++;
}
}
if (BITISSET (lookaheadset, i))
fprintf (out, _(" %-4s\t[reduce using rule %d (%s)]\n"),
tags[i], default_rule,
tags[rule_table[default_rule].lhs]);
fprintf (out, _(" $default\treduce using rule %d (%s)\n\n"),
default_rule, tags[rule_table[default_rule].lhs]);
}
else if (n - m >= 1)
{
cmax = 0;
default_LA = -1;
fp4 = lookaheadset + tokensetsize;
int k;
int cmax = 0;
int default_LA = -1;
int default_rule = 0;
if (!nodefault)
for (i = m; i < n; i++)
{
fp1 = LA (i);
fp2 = shiftset;
fp3 = lookaheadset;
int count = 0;
while (fp3 < fp4)
*fp3++ = *fp1++ & (~(*fp2++));
for (k = 0; k < tokensetsize; ++k)
lookaheadset[k] = LA (i)[k] & ~shiftset[k];
count = 0;
mask = 1;
fp3 = lookaheadset;
for (j = 0; j < ntokens; j++)
{
if (mask & *fp3)
count++;
mask <<= 1;
if (mask == 0)
{
mask = 1;
fp3++;
}
}
if (BITISSET (lookaheadset, j))
count++;
if (count > cmax)
{
@@ -626,56 +488,34 @@ print_reductions (FILE *out, int state)
default_rule = LAruleno[i];
}
fp2 = shiftset;
fp3 = lookaheadset;
while (fp3 < fp4)
*fp2++ |= *fp3++;
for (k = 0; k < tokensetsize; ++k)
shiftset[k] |= lookaheadset[k];
}
for (i = 0; i < tokensetsize; i++)
shiftset[i] = 0;
if (shiftp)
{
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (!shiftp->shifts[i])
continue;
symbol = state_table[shiftp->shifts[i]].accessing_symbol;
if (ISVAR (symbol))
break;
SETBIT (shiftset, symbol);
}
}
for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
if (!SHIFT_IS_DISABLED (shiftp, i))
SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
mask = 1;
fp1 = LA (m);
fp2 = shiftset;
for (i = 0; i < ntokens; i++)
{
int defaulted = 0;
int count = BITISSET (shiftset, i);
if (mask & *fp2)
count = 1;
else
count = 0;
fp3 = fp1;
for (j = m; j < n; j++)
{
if (mask & *fp3)
if (BITISSET (LA (m), j))
{
if (count == 0)
{
if (j != default_LA)
{
rule = LAruleno[j];
fprintf (out,
_(" %-4s\treduce using rule %d (%s)\n"),
tags[i], rule, tags[rule_table[rule].lhs]);
}
fprintf (out,
_(" %-4s\treduce using rule %d (%s)\n"),
tags[i],
LAruleno[j],
tags[rule_table[LAruleno[j]].lhs]);
else
defaulted = 1;
@@ -684,31 +524,19 @@ print_reductions (FILE *out, int state)
else
{
if (defaulted)
{
rule = LAruleno[default_LA];
fprintf (out,
_(" %-4s\treduce using rule %d (%s)\n"),
tags[i], rule, tags[rule_table[rule].lhs]);
defaulted = 0;
}
rule = LAruleno[j];
fprintf (out,
_(" %-4s\treduce using rule %d (%s)\n"),
tags[i],
LAruleno[default_LA],
tags[rule_table[LAruleno[default_LA]].lhs]);
defaulted = 0;
fprintf (out,
_(" %-4s\t[reduce using rule %d (%s)]\n"),
tags[i], rule, tags[rule_table[rule].lhs]);
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++;
}
}
+1 -2
View File
@@ -1,5 +1,5 @@
/* 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.
@@ -29,6 +29,5 @@ void print_reductions PARAMS ((FILE*out, int state));
void free_conflicts PARAMS ((void));
/* Were there conflicts? */
extern errs **err_table;
extern int expected_conflicts;
#endif /* !CONFLICTS_H_ */
+10 -19
View File
@@ -19,11 +19,6 @@
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 "getargs.h"
#include "types.h"
@@ -31,8 +26,7 @@
#include "gram.h"
#include "derives.h"
short **derives;
short **derives = NULL;
static void
print_derives (void)
@@ -51,7 +45,7 @@ print_derives (void)
fprintf (stderr, "\t\t%d:", *sp);
for (rhsp = ritem + rule_table[*sp].rhs; *rhsp > 0; ++rhsp)
fprintf (stderr, " %s", tags[*rhsp]);
fputc ('\n', stderr);
fprintf (stderr, " (rule %d)\n", -*rhsp);
}
}
@@ -63,7 +57,6 @@ void
set_derives (void)
{
int i;
int lhs;
shorts *p;
short *q;
shorts **dset;
@@ -74,16 +67,14 @@ set_derives (void)
p = delts;
for (i = nrules; i > 0; i--)
{
lhs = rule_table[i].lhs;
if (lhs >= 0)
{
p->next = dset[lhs];
p->value = i;
dset[lhs] = p;
p++;
}
}
if (rule_table[i].useful)
{
int lhs = rule_table[i].lhs;
p->next = dset[lhs];
p->value = i;
dset[lhs] = p;
p++;
}
derives = XCALLOC (short *, nvars) - ntokens;
q = XCALLOC (short, nvars + nrules);
+4 -5
View File
@@ -1,5 +1,5 @@
/* 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.
@@ -21,12 +21,11 @@
#ifndef 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;
/* 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.
*/
/* Compute DERIVES. */
void set_derives PARAMS((void));
void free_derives PARAMS((void));
+1
View File
@@ -23,6 +23,7 @@
#include "getargs.h"
#include "files.h"
#include "gram.h"
#include "error.h"
#include "complain.h"
FILE *finput = NULL;
+56 -19
View File
@@ -1,28 +1,27 @@
/* Allocate input grammar variables for bison,
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
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.
Bison 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.
Bison 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.
Bison 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 Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "system.h"
#include "gram.h"
void dummy PARAMS((void));
#include "reader.h"
/* comments for these variables are in gram.h */
@@ -40,7 +39,6 @@ short *sprec = NULL;
short *rassoc = NULL;
short *sassoc = NULL;
short *token_translations = NULL;
short *rline = NULL;
int start_symbol;
@@ -52,10 +50,49 @@ int pure_parser;
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
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;
}
+11
View File
@@ -59,6 +59,8 @@
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.
@@ -119,6 +121,7 @@ typedef struct rule_s
short precsym;
short assoc;
short line;
bool useful;
} rule_t;
extern struct rule_s *rule_table;
@@ -144,4 +147,12 @@ extern int pure_parser;
/* ERROR_TOKEN_NUMBER is the token number of the error token. */
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_ */
+183 -240
View File
@@ -31,6 +31,7 @@
#include "lalr.h"
#include "nullable.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.
@@ -41,82 +42,69 @@ int tokensetsize;
short *LAruleno;
unsigned *LA;
static int ngotos;
short *goto_map;
short *from_state;
short *to_state;
extern void berror PARAMS ((const char *));
static int infinity;
static int ngotos;
/* And for the famous F variable, which named is so descriptive that a
/* 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 short **includes;
static shorts **lookback;
/*---------------------------------------------------------------.
| digraph & traverse. |
| |
| The following variables are used as common storage between the |
| two. |
`---------------------------------------------------------------*/
static short **R;
static short *INDEX;
static short *VERTICES;
static int top;
static int infinity;
static void
traverse (int i)
{
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
int j;
short *rp;
size_t k;
int height;
unsigned *base;
size_t size = F (i + 1) - F(i);
VERTICES[++top] = i;
INDEX[i] = height = top;
base = F (i);
fp3 = F (i + 1);
if (R[i])
for (j = 0; R[i][j] >= 0; ++j)
{
if (INDEX[R[i][j]] == 0)
traverse (R[i][j]);
rp = R[i];
if (rp)
{
while ((j = *rp++) >= 0)
{
if (INDEX[j] == 0)
traverse (j);
if (INDEX[i] > INDEX[R[i][j]])
INDEX[i] = INDEX[R[i][j]];
if (INDEX[i] > INDEX[j])
INDEX[i] = INDEX[j];
fp1 = base;
fp2 = F (j);
while (fp1 < fp3)
*fp1++ |= *fp2++;
}
}
for (k = 0; k < size; ++k)
F (i)[k] |= F (R[i][j])[k];
}
if (INDEX[i] == height)
{
for (;;)
{
j = VERTICES[top--];
INDEX[j] = infinity;
for (;;)
{
j = VERTICES[top--];
INDEX[j] = infinity;
if (i == j)
break;
if (i == j)
break;
fp1 = base;
fp2 = F (j);
while (fp1 < fp3)
*fp2++ = *fp1++;
}
}
for (k = 0; k < size; ++k)
F (i)[k] = F (j)[k];
}
}
@@ -168,13 +156,22 @@ set_state_table (void)
{
shifts *sp;
for (sp = first_shift; sp; sp = sp->next)
state_table[sp->number].shift_table = sp;
state_table[sp->number].shifts = sp;
}
{
reductions *rp;
for (rp = first_reduction; rp; rp = rp->next)
state_table[rp->number].reduction_table = rp;
state_table[rp->number].reductions = rp;
}
/* Pessimization, but simplification of the code: make sense all the
states have a shifts, even if reduced to 0 shifts. */
{
int i;
for (i = 0; i < nstates; i++)
if (!state_table[i].shifts)
state_table[i].shifts = shifts_new (0);
}
/* Initializing the lookaheads members. Please note that it must be
@@ -186,60 +183,29 @@ set_state_table (void)
for (i = 0; i < nstates; i++)
{
int k;
reductions *rp = state_table[i].reduction_table;
shifts *sp = state_table[i].shift_table;
reductions *rp = state_table[i].reductions;
shifts *sp = state_table[i].shifts;
state_table[i].lookaheads = count;
if (rp
&& (rp->nreds > 1
|| (sp && !ISVAR (state_table[sp->shifts[0]].accessing_symbol))))
&& (rp->nreds > 1 || (sp->nshifts && SHIFT_IS_SHIFT (sp, 0))))
count += rp->nreds;
else
state_table[i].consistent = 1;
if (sp)
for (k = 0; k < sp->nshifts; k++)
if (state_table[sp->shifts[k]].accessing_symbol
== error_token_number)
{
state_table[i].consistent = 0;
break;
}
for (k = 0; k < sp->nshifts; k++)
if (SHIFT_IS_ERROR (sp, k))
{
state_table[i].consistent = 0;
break;
}
}
state_table[nstates].lookaheads = count;
}
}
/* Return the size of the longest ride hand side of the rules. */
static size_t
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;
}
}
return max;
}
static void
initialize_LA (void)
{
@@ -259,7 +225,7 @@ initialize_LA (void)
np = LAruleno;
for (i = 0; i < nstates; i++)
if (!state_table[i].consistent)
if ((rp = state_table[i].reduction_table))
if ((rp = state_table[i].reductions))
for (j = 0; j < rp->nreds; j++)
*np++ = rp->rules[j];
}
@@ -281,21 +247,16 @@ set_goto_map (void)
ngotos = 0;
for (sp = first_shift; sp; sp = sp->next)
{
for (i = sp->nshifts - 1; i >= 0; i--)
{
symbol = state_table[sp->shifts[i]].accessing_symbol;
for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
{
symbol = state_table[sp->shifts[i]].accessing_symbol;
if (ISTOKEN (symbol))
break;
if (ngotos == MAXSHORT)
fatal (_("too many gotos (max %d)"), MAXSHORT);
if (ngotos == MAXSHORT)
fatal (_("too many gotos (max %d)"), MAXSHORT);
ngotos++;
goto_map[symbol]++;
}
}
ngotos++;
goto_map[symbol]++;
}
k = 0;
for (i = ntokens; i < nsyms; i++)
@@ -316,14 +277,11 @@ set_goto_map (void)
for (sp = first_shift; sp; sp = sp->next)
{
state1 = sp->number;
for (i = sp->nshifts - 1; i >= 0; i--)
for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
{
state2 = sp->shifts[i];
symbol = state_table[state2].accessing_symbol;
if (ISTOKEN (symbol))
break;
k = temp_map[symbol]++;
from_state[k] = state1;
to_state[k] = state2;
@@ -371,64 +329,40 @@ map_goto (int state, int symbol)
static void
initialize_F (void)
{
short **reads = XCALLOC (short *, ngotos);
short *edge = XCALLOC (short, ngotos + 1);
int nedges = 0;
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, nwords);
F = XCALLOC (unsigned, ngotos * tokensetsize);
reads = XCALLOC (short *, ngotos);
edge = XCALLOC (short, ngotos + 1);
nedges = 0;
rowp = F;
for (i = 0; i < ngotos; i++)
{
stateno = to_state[i];
sp = state_table[stateno].shift_table;
int stateno = to_state[i];
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;
for (j = 0; j < k; j++)
{
symbol = state_table[sp->shifts[j]].accessing_symbol;
if (ISVAR (symbol))
break;
SETBIT (rowp, symbol);
}
for (; j < k; j++)
{
symbol = state_table[sp->shifts[j]].accessing_symbol;
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;
}
int symbol = state_table[sp->shifts[j]].accessing_symbol;
SETBIT (F (i), symbol);
}
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);
@@ -469,56 +403,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 **
transpose (short **R_arg, int n)
{
short **new_R;
short **temp_R;
short *nedges;
short *sp;
int i;
int k;
/* The result. */
short **new_R = XCALLOC (short *, n);
/* END_R[I] -- next entry of NEW_R[I]. */
short **end_R = XCALLOC (short *, n);
/* NEDGES[I] -- total size of NEW_R[I]. */
short *nedges = XCALLOC (short, n);
int i, j;
nedges = XCALLOC (short, n);
for (i = 0; i < n; i++)
if (trace_flag)
{
sp = R_arg[i];
if (sp)
{
while (*sp >= 0)
nedges[*sp++]++;
}
fputs ("transpose: input\n", stderr);
matrix_print (stderr, R_arg, n);
}
new_R = XCALLOC (short *, n);
temp_R = XCALLOC (short *, n);
/* Count. */
for (i = 0; i < n; i++)
{
k = nedges[i];
if (k > 0)
{
sp = XCALLOC (short, k + 1);
new_R[i] = sp;
temp_R[i] = sp;
sp[k] = -1;
}
}
XFREE (nedges);
if (R_arg[i])
for (j = 0; R_arg[i][j] >= 0; ++j)
++nedges[R_arg[i][j]];
/* Allocate. */
for (i = 0; i < n; i++)
{
sp = R_arg[i];
if (sp)
{
while (*sp >= 0)
*temp_R[*sp++]++ = i;
}
}
if (nedges[i] > 0)
{
short *sp = XCALLOC (short, nedges[i] + 1);
sp[nedges[i]] = -1;
new_R[i] = sp;
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;
}
@@ -527,50 +492,35 @@ transpose (short **R_arg, int n)
static void
build_relations (void)
{
short *edge = XCALLOC (short, ngotos + 1);
short *states = XCALLOC (short, ritem_longest_rhs () + 1);
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);
edge = XCALLOC (short, ngotos + 1);
states = XCALLOC (short, maxrhs () + 1);
for (i = 0; i < ngotos; i++)
{
nedges = 0;
state1 = from_state[i];
symbol1 = state_table[to_state[i]].accessing_symbol;
int nedges = 0;
int state1 = from_state[i];
int symbol1 = state_table[to_state[i]].accessing_symbol;
short *rulep;
for (rulep = derives[symbol1]; *rulep > 0; rulep++)
{
length = 1;
int done;
int length = 1;
int stateno = state1;
short *rp;
states[0] = state1;
stateno = state1;
for (rp = ritem + rule_table[*rulep].rhs; *rp > 0; rp++)
{
symbol2 = *rp;
sp = state_table[stateno].shift_table;
k = sp->nshifts;
for (j = 0; j < k; j++)
shifts *sp = state_table[stateno].shifts;
int j;
for (j = 0; j < sp->nshifts; j++)
{
stateno = sp->shifts[j];
if (state_table[stateno].accessing_symbol == symbol2)
if (state_table[stateno].accessing_symbol == *rp)
break;
}
@@ -599,25 +549,18 @@ build_relations (void)
if (nedges)
{
includes[i] = shortp = XCALLOC (short, nedges + 1);
int j;
includes[i] = XCALLOC (short, nedges + 1);
for (j = 0; j < nedges; j++)
shortp[j] = edge[j];
shortp[nedges] = -1;
includes[i][j] = edge[j];
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 (states);
includes = transpose (includes, ngotos);
}
@@ -645,10 +588,10 @@ compute_lookaheads (void)
for (i = 0; i < state_table[nstates].lookaheads; i++)
for (sp = lookback[i]; sp; sp = sp->next)
{
unsigned *fp1 = LA (i);
unsigned *fp2 = F (sp->value);
while (fp1 < LA (i + 1))
*fp1++ |= *fp2++;
int size = LA (i + 1) - LA (i);
int j;
for (j = 0; j < size; ++j)
LA (i)[j] |= F (sp->value)[j];
}
/* Free LOOKBACK. */
+3 -2
View File
@@ -78,8 +78,9 @@ typedef struct state_s
/* Its accessing symbol. */
short accessing_symbol;
shifts *shift_table;
reductions *reduction_table;
shifts *shifts;
reductions *reductions;
errs *errs;
/* Nonzero if no lookahead is needed to decide what to do in state
S. */
+2 -13
View File
@@ -1,5 +1,5 @@
/* Top level entry point of bison,
Copyright 1984, 1986, 1989, 1992, 1995, 2000
Copyright 1984, 1986, 1989, 1992, 1995, 2000, 2001
Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -40,7 +40,6 @@
/* The name this program was run with, for messages. */
char *program_name;
extern void berror PARAMS((const char *));
int
main (int argc, char *argv[])
@@ -62,8 +61,7 @@ main (int argc, char *argv[])
if (complain_message_count)
exit (1);
/* Find useless nonterminals and productions and reduce the grammar.
In file reduce.c. */
/* Find useless nonterminals and productions and reduce the grammar. */
reduce_grammar ();
/* Record other info about the grammar. In files derives and
@@ -125,12 +123,3 @@ main (int argc, char *argv[])
return complain_message_count ? EXIT_FAILURE : EXIT_SUCCESS;
}
/* Abort for an internal error denoted by string S. */
void
berror (const char *s)
{
fprintf (stderr, _("%s: internal error: %s\n"), program_name, s);
abort ();
}
+41 -50
View File
@@ -28,6 +28,7 @@
#include "reader.h"
#include "types.h"
#include "gram.h"
#include "reduce.h"
#include "nullable.h"
char *nullable = NULL;
@@ -64,68 +65,58 @@ set_nullable (void)
s1 = s2 = squeue;
rcount = XCALLOC (short, nrules + 1);
rsets = XCALLOC (shorts *, nvars) - ntokens;
/* RITEM contains all the rules, including useless productions.
Hence we must allocate room for useless nonterminals too. */
rsets = XCALLOC (shorts *, nvars + nuseless_nonterminals) - ntokens;
/* This is said to be more elements than we actually use.
Supposedly nitems - nrules is enough.
But why take the risk? */
relts = XCALLOC (shorts, nitems + nvars + 1);
relts = XCALLOC (shorts, nitems + nvars + nuseless_nonterminals + 1);
p = relts;
r = ritem;
while (*r)
for (r = ritem; *r; ++r)
{
if (*r < 0)
{
int symbol = rule_table[-(*r++)].lhs;
if (symbol >= 0 && !nullable[symbol])
{
nullable[symbol] = 1;
*s2++ = symbol;
}
}
else
{
int any_tokens = 0;
int symbol;
short *r1 = r;
for (symbol = *r++; symbol > 0; symbol = *r++)
if (ISTOKEN (symbol))
any_tokens = 1;
/* Walk RITEM to find (i), if there are any tokens in the
RHS, and (ii), to find RULENO. */
int ruleno;
int any_tokens = 0;
short *r1;
for (r1 = r; *r1 > 0; ++r1)
if (ISTOKEN (*r1))
any_tokens = 1;
ruleno = -*r1;
if (!any_tokens)
{
int ruleno = -symbol;
r = r1;
for (symbol = *r++; symbol > 0; symbol = *r++)
{
rcount[ruleno]++;
p->next = rsets[symbol];
p->value = ruleno;
rsets[symbol] = p;
p++;
}
}
}
/* Examine the RHS of the rule. */
if (!any_tokens)
for (/* Nothing. */; *r > 0; ++r)
{
rcount[ruleno]++;
p->next = rsets[*r];
p->value = ruleno;
rsets[*r] = p;
p++;
}
/* Examine its LHS. */
if (rule_table[ruleno].useful && !nullable[rule_table[ruleno].lhs])
{
nullable[rule_table[ruleno].lhs] = 1;
*s2++ = rule_table[ruleno].lhs;
}
}
while (s1 < s2)
{
p = rsets[*s1++];
while (p)
{
int ruleno = p->value;
p = p->next;
if (--rcount[ruleno] == 0)
for (p = rsets[*s1++]; p; p = p->next)
{
int ruleno = p->value;
if (--rcount[ruleno] == 0)
if (rule_table[ruleno].useful && !nullable[rule_table[ruleno].lhs])
{
int symbol = rule_table[ruleno].lhs;
if (symbol >= 0 && !nullable[symbol])
{
nullable[symbol] = 1;
*s2++ = symbol;
}
nullable[rule_table[ruleno].lhs] = 1;
*s2++ = rule_table[ruleno].lhs;
}
}
}
}
XFREE (squeue);
XFREE (rcount);
+26 -56
View File
@@ -103,9 +103,6 @@
#include "reader.h"
#include "conflicts.h"
extern void berror PARAMS((const char *));
static int nvectors;
static int nentries;
@@ -529,15 +526,11 @@ action_row (int state)
int k;
int m = 0;
int n = 0;
int count;
int default_rule;
int nreds;
int max;
int rule;
int shift_state;
int symbol;
unsigned mask;
unsigned *wordp;
reductions *redp;
shifts *shiftp;
errs *errp;
@@ -548,7 +541,7 @@ action_row (int state)
default_rule = 0;
nreds = 0;
redp = state_table[state].reduction_table;
redp = state_table[state].reductions;
if (redp)
{
@@ -562,65 +555,42 @@ action_row (int state)
n = state_table[state + 1].lookaheads;
for (i = n - 1; i >= m; i--)
{
rule = -LAruleno[i];
wordp = LA (i);
mask = 1;
/* and find each token which the rule finds acceptable
to come next */
for (j = 0; j < ntokens; j++)
{
/* and record this rule as the rule to use if that
token follows. */
if (mask & *wordp)
actrow[j] = rule;
mask <<= 1;
if (mask == 0)
{
mask = 1;
wordp++;
}
}
}
/* and find each token which the rule finds acceptable
to come next */
for (j = 0; j < ntokens; j++)
/* and record this rule as the rule to use if that
token follows. */
if (BITISSET (LA (i), j))
actrow[j] = -LAruleno[i];
}
}
shiftp = state_table[state].shift_table;
/* Now see which tokens are allowed for shifts in this state. For
them, record the shift as the thing to do. So shift is preferred
to reduce. */
if (shiftp)
shiftp = state_table[state].shifts;
for (i = 0; i < shiftp->nshifts; i++)
{
k = shiftp->nshifts;
shift_state = shiftp->shifts[i];
if (!shift_state)
continue;
for (i = 0; i < k; i++)
{
shift_state = shiftp->shifts[i];
if (!shift_state)
continue;
symbol = state_table[shift_state].accessing_symbol;
symbol = state_table[shift_state].accessing_symbol;
if (ISVAR (symbol))
break;
if (ISVAR (symbol))
break;
actrow[symbol] = shift_state;
actrow[symbol] = shift_state;
/* Do not use any default reduction if there is a shift for
error */
if (symbol == error_token_number)
nodefault = 1;
}
/* Do not use any default reduction if there is a shift for
error */
if (symbol == error_token_number)
nodefault = 1;
}
errp = err_table[state];
/* See which tokens are an explicit error in this state (due to
%nonassoc). For them, record MINSHORT as the action. */
errp = state_table[state].errs;
if (errp)
{
@@ -642,10 +612,10 @@ action_row (int state)
default_rule = redp->rules[0];
else
{
max = 0;
int max = 0;
for (i = m; i < n; i++)
{
count = 0;
int count = 0;
rule = -LAruleno[i];
for (j = 0; j < ntokens; j++)
@@ -1007,8 +977,8 @@ pack_vector (int vector)
}
}
berror ("pack_vector");
return 0; /* JF keep lint happy */
assert (!"pack_vector");
return 0;
}
+89 -80
View File
@@ -30,6 +30,7 @@
#include "reader.h"
#include "print.h"
#include "reduce.h"
#include "closure.h"
#if 0
static void
@@ -48,51 +49,60 @@ static void
print_core (FILE *out, int state)
{
int i;
core *statep = state_table[state].state;
short *sitems = state_table[state].state->items;
int snitems = state_table[state].state->nitems;
if (!statep->nitems)
return;
for (i = 0; i < statep->nitems; i++)
/* New experimental feature: if TRACE_FLAGS output all the items of
a state, not only its kernel. */
if (trace_flag)
{
short *sp;
short *sp1;
int rule;
sp1 = sp = ritem + statep->items[i];
while (*sp > 0)
sp++;
rule = -(*sp);
fprintf (out, " %s -> ", tags[rule_table[rule].lhs]);
for (sp = ritem + rule_table[rule].rhs; sp < sp1; sp++)
fprintf (out, "%s ", tags[*sp]);
fputc ('.', out);
for (/* Nothing */; *sp > 0; ++sp)
fprintf (out, " %s", tags[*sp]);
fprintf (out, _(" (rule %d)"), rule);
fputc ('\n', out);
closure (sitems, snitems);
sitems = itemset;
snitems = nitemset;
}
fputc ('\n', out);
if (snitems)
{
for (i = 0; i < snitems; i++)
{
short *sp;
short *sp1;
int rule;
sp1 = sp = ritem + sitems[i];
while (*sp > 0)
sp++;
rule = -(*sp);
fprintf (out, " %s -> ", tags[rule_table[rule].lhs]);
for (sp = ritem + rule_table[rule].rhs; sp < sp1; sp++)
fprintf (out, "%s ", tags[*sp]);
fputc ('.', out);
for (/* Nothing */; *sp > 0; ++sp)
fprintf (out, " %s", tags[*sp]);
fprintf (out, _(" (rule %d)"), rule);
fputc ('\n', out);
}
fputc ('\n', out);
}
}
static void
print_actions (FILE *out, int state)
{
int i;
int k;
shifts *shiftp = state_table[state].shift_table;
reductions *redp = state_table[state].reduction_table;
errs *errp = err_table[state];
shifts *shiftp = state_table[state].shifts;
reductions *redp = state_table[state].reductions;
errs *errp = state_table[state].errs;
if (!shiftp && !redp)
if (!shiftp->nshifts && !redp)
{
if (final_state == state)
fprintf (out, _(" $default\taccept\n"));
@@ -101,37 +111,25 @@ print_actions (FILE *out, int state)
return;
}
if (shiftp)
{
k = shiftp->nshifts;
for (i = 0; i < shiftp->nshifts; i++)
if (!SHIFT_IS_DISABLED (shiftp, i))
{
int state1 = shiftp->shifts[i];
int symbol = state_table[state1].accessing_symbol;
/* The following line used to be turned off. */
if (ISVAR (symbol))
break;
if (symbol == 0) /* I.e. strcmp(tags[symbol],"$")==0 */
fprintf (out,
_(" $ \tgo to state %d\n"), state1);
else
fprintf (out,
_(" %-4s\tshift, and go to state %d\n"),
tags[symbol], state1);
}
for (i = 0; i < k; i++)
{
int symbol;
int state1 = shiftp->shifts[i];
if (!state1)
continue;
symbol = state_table[state1].accessing_symbol;
/* The following line used to be turned off. */
if (ISVAR (symbol))
break;
if (symbol == 0) /* I.e. strcmp(tags[symbol],"$")==0 */
fprintf (out,
_(" $ \tgo to state %d\n"), state1);
else
fprintf (out,
_(" %-4s\tshift, and go to state %d\n"),
tags[symbol], state1);
}
if (i > 0)
fputc ('\n', out);
}
else
{
i = 0;
k = 0;
}
if (i > 0)
fputc ('\n', out);
if (errp)
{
@@ -161,18 +159,16 @@ print_actions (FILE *out, int state)
print_reductions (out, state);
}
if (i < k)
if (i < shiftp->nshifts)
{
for (; i < k; i++)
{
int symbol;
int state1 = shiftp->shifts[i];
if (!state1)
continue;
symbol = state_table[state1].accessing_symbol;
fprintf (out, _(" %-4s\tgo to state %d\n"),
tags[symbol], state1);
}
for (; i < shiftp->nshifts; i++)
if (!SHIFT_IS_DISABLED (shiftp, i))
{
int state1 = shiftp->shifts[i];
int symbol = state_table[state1].accessing_symbol;
fprintf (out, _(" %-4s\tgo to state %d\n"),
tags[symbol], state1);
}
fputc ('\n', out);
}
@@ -181,11 +177,11 @@ print_actions (FILE *out, int state)
static void
print_state (FILE *out, int state)
{
fputs ("\n\n", out);
fprintf (out, _("state %d"), state);
fputs ("\n\n", out);
print_core (out, state);
print_actions (out, state);
fputs ("\n\n", out);
}
/*-----------------------------------------.
@@ -212,11 +208,11 @@ print_grammar (FILE *out)
int column = 0;
/* rule # : LHS -> RHS */
fprintf (out, "\n%s\n\n", _("Grammar"));
fprintf (out, "%s\n\n", _("Grammar"));
fprintf (out, " %s\n", _("Number, Line, Rule"));
for (i = 1; i <= nrules; i++)
/* Don't print rules disabled in reduce_grammar_tables. */
if (rule_table[i].lhs >= 0)
if (rule_table[i].useful)
{
fprintf (out, _(" %3d %3d %s ->"),
i, rule_table[i].line, tags[rule_table[i].lhs]);
@@ -228,9 +224,11 @@ print_grammar (FILE *out)
fprintf (out, " /* %s */", _("empty"));
fputc ('\n', out);
}
fputs ("\n\n", out);
/* TERMINAL (type #) : rule #s terminal is on RHS */
fprintf (out, "\n%s\n\n", _("Terminals, with rules where they appear"));
fprintf (out, "%s\n\n", _("Terminals, with rules where they appear"));
fprintf (out, "%s (-1)\n", tags[0]);
for (i = 0; i <= max_user_token_number; i++)
@@ -252,9 +250,10 @@ print_grammar (FILE *out)
}
fprintf (out, "%s\n", buffer);
}
fputs ("\n\n", out);
fprintf (out, "\n%s\n\n",
_("Nonterminals, with rules where they appear"));
fprintf (out, "%s\n\n", _("Nonterminals, with rules where they appear"));
for (i = ntokens; i <= nsyms - 1; i++)
{
int left_count = 0, right_count = 0;
@@ -309,6 +308,7 @@ print_grammar (FILE *out)
}
fprintf (out, "%s\n", buffer);
}
fputs ("\n\n", out);
}
void
@@ -324,14 +324,23 @@ print_results (void)
size_t size = obstack_object_size (&output_obstack);
fwrite (obstack_finish (&output_obstack), 1, size, out);
if (size)
fputs ("\n\n", out);
reduce_output (out);
conflicts_output (out);
print_grammar (out);
/* New experimental feature: output all the items of a state,
not only its kernel. Requires to run closure, which need
memory allocation/deallocation. */
if (trace_flag)
new_closure (nitems);
for (i = 0; i < nstates; i++)
print_state (out, i);
if (trace_flag)
free_closure ();
xfclose (out);
}
+31 -53
View File
@@ -84,20 +84,17 @@ static void
print_actions (int state, const char *node_name)
{
int i;
int k;
int state1;
int symbol;
shifts *shiftp;
errs *errp;
reductions *redp;
shifts *shiftp = state_table[state].shifts;
reductions *redp = state_table[state].reductions;
#if 0
errs *errp = err_table[state];
#endif
static char buff[10];
edge_t edge;
shiftp = state_table[state].shift_table;
redp = state_table[state].reduction_table;
errp = err_table[state];
if (!shiftp && !redp)
if (!shiftp->nshifts && !redp)
{
#if 0
if (final_state == state)
@@ -108,42 +105,26 @@ print_actions (int state, const char *node_name)
return;
}
if (shiftp)
{
k = shiftp->nshifts;
for (i = 0; i < shiftp->nshifts; i++)
if (!SHIFT_IS_DISABLED (shiftp, i))
{
int state1 = shiftp->shifts[i];
int symbol = state_table[state1].accessing_symbol;
for (i = 0; i < k; i++)
{
if (!shiftp->shifts[i])
continue;
state1 = shiftp->shifts[i];
symbol = state_table[state1].accessing_symbol;
new_edge (&edge);
if (ISVAR (symbol))
break;
{
new_edge (&edge);
if (state > state1)
edge.type = back_edge;
open_edge (&edge, fgraph);
/* The edge source is the current node. */
edge.sourcename = node_name;
sprintf (buff, "%d", state1);
edge.targetname = buff;
edge.color = (symbol == 0) ? red : blue;
edge.label = tags[symbol];
output_edge (&edge, fgraph);
close_edge (fgraph);
}
}
}
else
{
i = 0;
k = 0;
}
if (state > state1)
edge.type = back_edge;
open_edge (&edge, fgraph);
/* The edge source is the current node. */
edge.sourcename = node_name;
sprintf (buff, "%d", state1);
edge.targetname = buff;
edge.color = (symbol == 0) ? red : blue;
edge.label = tags[symbol];
output_edge (&edge, fgraph);
close_edge (fgraph);
}
#if 0
if (errp)
@@ -182,14 +163,12 @@ print_actions (int state, const char *node_name)
}
#endif
if (i < k)
{
for (; i < k; i++)
if (i < shiftp->nshifts)
for (; i < shiftp->nshifts; i++)
if (!SHIFT_IS_DISABLED (shiftp, i))
{
if (!shiftp->shifts[i])
continue;
state1 = shiftp->shifts[i];
symbol = state_table[state1].accessing_symbol;
int state1 = shiftp->shifts[i];
int symbol = state_table[state1].accessing_symbol;
new_edge (&edge);
open_edge (&edge, fgraph);
@@ -201,7 +180,6 @@ print_actions (int state, const char *node_name)
output_edge (&edge, fgraph);
close_edge (fgraph);
}
}
}
+4
View File
@@ -1877,6 +1877,7 @@ packgram (void)
rule_table[ruleno].lhs = p->sym->value;
rule_table[ruleno].rhs = itemno;
rule_table[ruleno].line = p->line;
rule_table[ruleno].useful = TRUE;
p = p->next;
while (p && p->sym)
@@ -1910,6 +1911,9 @@ packgram (void)
}
ritem[itemno] = 0;
if (trace_flag)
ritem_print (stderr);
}
/*-------------------------------------------------------------------.
+172 -155
View File
@@ -38,16 +38,23 @@ typedef unsigned *BSet;
typedef short *rule;
/* N is set of all nonterminals which are not useless. P is set of
all rules which have no useless nonterminals in their RHS. V is
the set of all accessible symbols. */
/* Set of all nonterminals which are not useless. */
static BSet N;
static BSet N, P, V, V1;
/* Set of all rules which have no useless nonterminals in their RHS. */
static BSet P;
/* Set of all accessible symbols. */
static BSet V;
/* Set of symbols used to define rule precedence (so they are
`useless', but no warning should be issued). */
static BSet V1;
static int nuseful_productions;
static int nuseless_productions;
static int nuseful_nonterminals;
static int nuseless_nonterminals;
int nuseless_nonterminals;
static bool
bits_equal (BSet L, BSet R, int n)
@@ -257,28 +264,35 @@ inaccessable_symbols (void)
static void
reduce_grammar_tables (void)
{
/* This is turned off because we would need to change the numbers
in the case statements in the actions file. */
#if 0
/* remove useless productions */
if (nuseless_productions > 0)
{
short np, pn, ni, pi;
/* This is turned off because we would need to change the numbers in
the case statements in the actions file.
np = 0;
ni = 0;
for (pn = 1; pn <= nrules; pn++)
{
We don't disable it via CPP so that it is still checked with the
rest of the code, to avoid its becoming completely obsolete.
FIXME: I think the comment above demonstrates this code must be
turned off for *semantic* parser, not in the general case. Try
to understand this better --akim. */
if (0)
/* remove useless productions */
if (nuseless_productions > 0)
{
short np, pn, ni, pi;
np = 0;
ni = 0;
for (pn = 1; pn <= nrules; pn++)
if (BITISSET (P, pn))
{
np++;
if (pn != np)
{
rule_table[np].lhs = rule_table[pn].lhs;
rline[np] = rline[pn];
rule_table[np].prec = rule_table[pn].prec;
rule_table[np].lhs = rule_table[pn].lhs;
rule_table[np].line = rule_table[pn].line;
rule_table[np].prec = rule_table[pn].prec;
rule_table[np].assoc = rule_table[pn].assoc;
rule_table[np].rhs = rule_table[pn].rhs;
rule_table[np].rhs = rule_table[pn].rhs;
if (rule_table[np].rhs != ni)
{
pi = rule_table[np].rhs;
@@ -293,149 +307,142 @@ reduce_grammar_tables (void)
while (ritem[ni++] >= 0);
}
}
}
ritem[ni] = 0;
nrules -= nuseless_productions;
nitems = ni;
/* Is it worth it to reduce the amount of memory for the
grammar? Probably not. */
ritem[ni] = 0;
nrules -= nuseless_productions;
nitems = ni;
}
#endif /* 0 */
/* Disable useless productions,
since they may contain useless nonterms
that would get mapped below to -1 and confuse everyone. */
/* Is it worth it to reduce the amount of memory for the
grammar? Probably not. */
}
/* Disable useless productions. */
if (nuseless_productions > 0)
{
int pn;
for (pn = 1; pn <= nrules; pn++)
{
if (!BITISSET (P, pn))
{
rule_table[pn].lhs = -1;
}
}
}
/* remove useless symbols */
if (nuseless_nonterminals > 0)
{
int i, n;
/* short j; JF unused */
short *nontermmap;
rule r;
/* Create a map of nonterminal number to new nonterminal
number. -1 in the map means it was useless and is being
eliminated. */
nontermmap = XCALLOC (short, nvars) - ntokens;
for (i = ntokens; i < nsyms; i++)
nontermmap[i] = -1;
n = ntokens;
for (i = ntokens; i < nsyms; i++)
if (BITISSET (V, i))
nontermmap[i] = n++;
/* Shuffle elements of tables indexed by symbol number. */
for (i = ntokens; i < nsyms; i++)
{
n = nontermmap[i];
if (n >= 0)
{
sassoc[n] = sassoc[i];
sprec[n] = sprec[i];
tags[n] = tags[i];
}
else
{
free (tags[i]);
}
}
/* Replace all symbol numbers in valid data structures. */
for (i = 1; i <= nrules; i++)
{
/* Ignore the rules disabled above. */
if (rule_table[i].lhs >= 0)
rule_table[i].lhs = nontermmap[rule_table[i].lhs];
if (ISVAR (rule_table[i].precsym))
/* Can this happen? */
rule_table[i].precsym = nontermmap[rule_table[i].precsym];
}
for (r = ritem; *r; r++)
if (ISVAR (*r))
*r = nontermmap[*r];
start_symbol = nontermmap[start_symbol];
nsyms -= nuseless_nonterminals;
nvars -= nuseless_nonterminals;
free (&nontermmap[ntokens]);
rule_table[pn].useful = BITISSET (P, pn);
}
}
/*-----------------------------------------------------------------.
| Ouput the detailed results of the reductions. For FILE.output. |
`-----------------------------------------------------------------*/
/*------------------------------.
| Remove useless nonterminals. |
`------------------------------*/
static void
nonterminals_reduce (void)
{
int i, n;
rule r;
/* Map the nonterminals to their new index: useful first, useless
afterwards. Kept for later report. */
short *nontermmap = XCALLOC (short, nvars) - ntokens;
n = ntokens;
for (i = ntokens; i < nsyms; i++)
if (BITISSET (V, i))
nontermmap[i] = n++;
for (i = ntokens; i < nsyms; i++)
if (!BITISSET (V, i))
nontermmap[i] = n++;
/* Shuffle elements of tables indexed by symbol number. */
{
short *sassoc_sorted = XMALLOC (short, nvars) - ntokens;
short *sprec_sorted = XMALLOC (short, nvars) - ntokens;
char **tags_sorted = XMALLOC (char *, nvars) - ntokens;
for (i = ntokens; i < nsyms; i++)
{
n = nontermmap[i];
sassoc_sorted[n] = sassoc[i];
sprec_sorted[n] = sprec[i];
tags_sorted[n] = tags[i];
}
for (i = ntokens; i < nsyms; i++)
{
sassoc[i] = sassoc_sorted[i];
sprec[i] = sprec_sorted[i];
tags[i] = tags_sorted[i];
}
free (sassoc_sorted + ntokens);
free (sprec_sorted + ntokens);
free (tags_sorted + ntokens);
}
/* Replace all symbol numbers in valid data structures. */
for (i = 1; i <= nrules; i++)
{
rule_table[i].lhs = nontermmap[rule_table[i].lhs];
if (ISVAR (rule_table[i].precsym))
/* Can this happen? */
rule_table[i].precsym = nontermmap[rule_table[i].precsym];
}
for (r = ritem; *r; r++)
if (ISVAR (*r))
*r = nontermmap[*r];
start_symbol = nontermmap[start_symbol];
nsyms -= nuseless_nonterminals;
nvars -= nuseless_nonterminals;
free (nontermmap + ntokens);
}
/*------------------------------------------------------------------.
| Output the detailed results of the reductions. For FILE.output. |
`------------------------------------------------------------------*/
void
reduce_output (FILE *out)
{
int i;
rule r;
bool b;
if (nuseless_nonterminals > 0)
{
fprintf (out, _("Useless nonterminals:"));
fprintf (out, "\n\n");
for (i = ntokens; i < nsyms; i++)
if (!BITISSET (V, i))
fprintf (out, " %s\n", tags[i]);
int i;
fprintf (out, "%s\n\n", _("Useless nonterminals:"));
for (i = 0; i < nuseless_nonterminals; ++i)
fprintf (out, " %s\n", tags[nsyms + i]);
fputs ("\n\n", out);
}
b = FALSE;
for (i = 0; i < ntokens; i++)
{
{
bool b = FALSE;
int i;
for (i = 0; i < ntokens; i++)
if (!BITISSET (V, i) && !BITISSET (V1, i))
{
if (!b)
{
fprintf (out, "\n\n");
fprintf (out, _("Terminals which are not used:"));
fprintf (out, "\n\n");
b = TRUE;
}
fprintf (out, "%s\n\n", _("Terminals which are not used:"));
b = TRUE;
fprintf (out, " %s\n", tags[i]);
}
}
if (b)
fputs ("\n\n", out);
}
if (nuseless_productions > 0)
{
fprintf (out, "\n\n");
fprintf (out, _("Useless rules:"));
fprintf (out, "\n\n");
int i;
fprintf (out, "%s\n\n", _("Useless rules:"));
for (i = 1; i <= nrules; i++)
if (!BITISSET (P, i))
if (!rule_table[i].useful)
{
rule r;
fprintf (out, "#%-4d ", i);
fprintf (out, "%s :\t", tags[rule_table[i].lhs]);
fprintf (out, "%s:", tags[rule_table[i].lhs]);
for (r = &ritem[rule_table[i].rhs]; *r >= 0; r++)
fprintf (out, " %s", tags[*r]);
fprintf (out, ";\n");
fputs (";\n", out);
}
fputs ("\n\n", out);
}
if (nuseless_nonterminals > 0 || nuseless_productions > 0 || b)
fprintf (out, "\n\n");
}
static void
@@ -446,28 +453,33 @@ dump_grammar (FILE *out)
fprintf (out, "REDUCED GRAMMAR\n\n");
fprintf (out,
"ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nitems = %d\n\n",
ntokens, nvars, nsyms, nrules, nitems);
fprintf (out, _("Variables\n---------\n\n"));
fprintf (out, _("Value Sprec Sassoc Tag\n"));
"ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nitems = %d\n\n",
ntokens, nvars, nsyms, nrules, nitems);
fprintf (out, "Variables\n---------\n\n");
fprintf (out, "Value Sprec Sassoc Tag\n");
for (i = ntokens; i < nsyms; i++)
fprintf (out, "%5d %5d %5d %s\n", i, sprec[i], sassoc[i], tags[i]);
fprintf (out, "%5d %5d %5d %s\n", i, sprec[i], sassoc[i], tags[i]);
fprintf (out, "\n\n");
fprintf (out, _("Rules\n-----\n\n"));
fprintf (out, "Rules\n-----\n\n");
fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
for (i = 1; i <= nrules; i++)
{
fprintf (out, "%-5d(%5d%5d)%5d : (@%-5d)",
int rhs_count = 0;
/* Find the last RHS index in ritems. */
for (r = &ritem[rule_table[i].rhs]; *r > 0; ++r)
++rhs_count;
fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d) %2d ->",
i,
rule_table[i].prec,
rule_table[i].assoc,
rule_table[i].lhs,
rule_table[i].rhs);
rule_table[i].prec, rule_table[i].assoc, rule_table[i].useful,
rule_table[i].rhs, rule_table[i].rhs + rhs_count - 1,
rule_table[i].lhs);
/* Dumped the RHS. */
for (r = &ritem[rule_table[i].rhs]; *r > 0; r++)
fprintf (out, "%5d", *r);
fprintf (out, " [%d]\n", -(*r));
fprintf (out, "%3d", *r);
fprintf (out, " [%d]\n", -(*r));
}
fprintf (out, "\n\n");
fprintf (out, _("Rules interpreted\n-----------------\n\n"));
fprintf (out, "Rules interpreted\n-----------------\n\n");
for (i = 1; i <= nrules; i++)
{
fprintf (out, "%-5d %s :", i, tags[rule_table[i].lhs]);
@@ -488,24 +500,27 @@ static void
reduce_print (void)
{
if (yacc_flag && nuseless_productions)
fprintf (stderr, _("%d rules never reduced\n"), nuseless_productions);
fprintf (stderr, ngettext ("%d rule never reduced\n",
"%d rules never reduced\n",
nuseless_productions),
nuseless_productions);
fprintf (stderr, _("%s contains "), infile);
if (nuseless_nonterminals > 0)
{
fprintf (stderr, _("%d useless nonterminal%s"),
nuseless_nonterminals,
(nuseless_nonterminals == 1 ? "" : "s"));
}
fprintf (stderr, ngettext ("%d useless nonterminal",
"%d useless nonterminals",
nuseless_nonterminals),
nuseless_nonterminals);
if (nuseless_nonterminals > 0 && nuseless_productions > 0)
fprintf (stderr, _(" and "));
if (nuseless_productions > 0)
{
fprintf (stderr, _("%d useless rule%s"),
nuseless_productions, (nuseless_productions == 1 ? "" : "s"));
}
fprintf (stderr, ngettext ("%d useless rule",
"%d useless rules",
nuseless_productions),
nuseless_productions);
fprintf (stderr, "\n");
fflush (stderr);
}
@@ -537,6 +552,8 @@ reduce_grammar (void)
tags[start_symbol]);
reduce_grammar_tables ();
if (nuseless_nonterminals > 0)
nonterminals_reduce ();
if (trace_flag)
{
+2
View File
@@ -24,4 +24,6 @@
void reduce_grammar PARAMS ((void));
void reduce_output PARAMS ((FILE *out));
void reduce_free PARAMS ((void));
extern int nuseless_nonterminals;
#endif /* !REDUCE_H_ */
+35
View File
@@ -0,0 +1,35 @@
/* Type definitions for nondeterministic finite state machine for bison,
Copyright 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
Bison 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.
Bison 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 Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "system.h"
#include "state.h"
/*---------------------------------.
| Create a new array of N shitfs. |
`---------------------------------*/
shifts *
shifts_new (int n)
{
shifts *res = SHIFTS_ALLOC (n);
res->nshifts = n;
return res;
}
+56 -9
View File
@@ -1,5 +1,5 @@
/* Type definitions for nondeterministic finite state machine 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.
@@ -88,6 +88,11 @@
#ifndef STATE_H_
# define STATE_H_
/*-------.
| Core. |
`-------*/
typedef struct core
{
struct core *next;
@@ -96,39 +101,82 @@ typedef struct core
short accessing_symbol;
short nitems;
short items[1];
}
core;
} core;
#define CORE_ALLOC(Nitems) \
(core *) xcalloc ((unsigned) (sizeof (core) \
+ (Nitems - 1) * sizeof (short)), 1)
/*---------.
| Shifts. |
`---------*/
typedef struct shifts
{
struct shifts *next;
short number;
short nshifts;
short shifts[1];
}
shifts;
} shifts;
#define SHIFTS_ALLOC(Nshifts) \
(shifts *) xcalloc ((unsigned) (sizeof (shifts) \
+ (Nshifts - 1) * sizeof (short)), 1)
shifts * shifts_new PARAMS ((int n));
/* What is the symbol which is shifted by SHIFTS->shifts[Shift]? Can
be a token (amongst which the error token), or non terminals in
case of gotos. */
#define SHIFT_SYMBOL(Shifts, Shift) \
(state_table[Shifts->shifts[Shift]].accessing_symbol)
/* Is the SHIFTS->shifts[Shift] a real shift? (as opposed to gotos.) */
#define SHIFT_IS_SHIFT(Shifts, Shift) \
(ISTOKEN (SHIFT_SYMBOL (Shifts, Shift)))
/* Is the SHIFTS->shifts[Shift] a goto?. */
#define SHIFT_IS_GOTO(Shifts, Shift) \
(!SHIFT_IS_SHIFT (Shifts, Shift))
/* Is the SHIFTS->shifts[Shift] then handling of the error token?. */
#define SHIFT_IS_ERROR(Shifts, Shift) \
(SHIFT_SYMBOL (Shifts, Shift) == error_token_number)
/* When resolving a SR conflicts, if the reduction wins, the shift is
disabled. */
#define SHIFT_DISABLE(Shifts, Shift) \
(Shifts->shifts[Shift] = 0)
#define SHIFT_IS_DISABLED(Shifts, Shift) \
(Shifts->shifts[Shift] == 0)
/*-------.
| Errs. |
`-------*/
typedef struct errs
{
short nerrs;
short errs[1];
}
errs;
} errs;
#define ERRS_ALLOC(Nerrs) \
(errs *) xcalloc ((unsigned) (sizeof (errs) \
+ (Nerrs - 1) * sizeof (short)), 1)
/*-------------.
| Reductions. |
`-------------*/
typedef struct reductions
{
@@ -136,8 +184,7 @@ typedef struct reductions
short number;
short nreds;
short rules[1];
}
reductions;
} reductions;
#define REDUCTIONS_ALLOC(Nreductions) \
(reductions *) xcalloc ((unsigned) (sizeof (reductions) \
+3 -14
View File
@@ -149,20 +149,9 @@ size_t strnlen PARAMS ((const char *s, size_t maxlen));
# define setlocale(Category, Locale)
#endif
#ifdef ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# undef bindtextdomain
# define bindtextdomain(Domain, Directory)
# undef textdomain
# define textdomain(Domain)
# undef ngettext
# define ngettext(Singular, Plural, Number) \
((Number == 1) ? Singular : Plural)
# define _(Text) Text
#endif
#define N_(Text) Text
#include "intl/libgettext.h"
#define _(Msgid) gettext (Msgid)
#define N_(Msgid) (Msgid)
/*-------------------------------.
+24 -77
View File
@@ -1,5 +1,5 @@
/* Generate transitive closure of a matrix,
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.
@@ -22,93 +22,40 @@
#include "system.h"
#include "warshall.h"
/* Given n by n matrix of bits R, modify its contents to be the
transive closure of what was given. */
/*-------------------------------------------------------------.
| Given n by n matrix of bits R, modify its contents to be the |
| transive closure of what was given. |
`-------------------------------------------------------------*/
#define R(Num) (unsigned *) ((char *) R + ((Num) * rowsize))
static void
TC (unsigned *R, int n)
{
int rowsize;
unsigned mask;
unsigned *rowj;
unsigned *rp;
unsigned *rend;
unsigned *ccol;
int rowsize = WORDSIZE (n) * sizeof (unsigned);
int i, j, k;
unsigned *relend;
unsigned *cword;
unsigned *rowi;
rowsize = WORDSIZE(n) * sizeof(unsigned);
relend = (unsigned *) ((char *) R + (n * rowsize));
cword = R;
mask = 1;
rowi = R;
while (rowi < relend)
{
ccol = cword;
rowj = R;
while (rowj < relend)
{
if (*ccol & mask)
{
rp = rowi;
rend = (unsigned *) ((char *) rowj + rowsize);
while (rowj < rend)
*rowj++ |= *rp++;
}
else
{
rowj = (unsigned *) ((char *) rowj + rowsize);
}
ccol = (unsigned *) ((char *) ccol + rowsize);
}
mask <<= 1;
if (mask == 0)
{
mask = 1;
cword++;
}
rowi = (unsigned *) ((char *) rowi + rowsize);
}
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
if (BITISSET (R (i), j))
for (k = 0; k < rowsize; ++k)
if (BITISSET (R (i), k))
SETBIT (R (j), k);
}
/* Reflexive Transitive Closure. Same as TC
and then set all the bits on the diagonal of R. */
/*---------------------------------------------------------------.
| Reflexive Transitive Closure. Same as TC and then set all the |
| bits on the diagonal of R. |
`---------------------------------------------------------------*/
void
RTC (unsigned *R, int n)
{
int rowsize;
unsigned mask;
unsigned *rp;
unsigned *relend;
int rowsize = WORDSIZE (n) * sizeof (unsigned);
int i;
TC(R, n);
rowsize = WORDSIZE(n) * sizeof(unsigned);
relend = (unsigned *) ((char *) R + n*rowsize);
mask = 1;
rp = R;
while (rp < relend)
{
*rp |= mask;
mask <<= 1;
if (mask == 0)
{
mask = 1;
rp++;
}
rp = (unsigned *) ((char *) rp + rowsize);
}
TC (R, n);
for (i = 0; i < n; ++i)
SETBIT (R (i), i);
}
+1 -26
View File
@@ -1,30 +1,5 @@
/* Generate transitive closure of a matrix,
Copyright 1984, 1989, 2000 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
Bison 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.
Bison 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 Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef WARSHALL_H_
# define WARSHALL_H_
void RTC PARAMS ((unsigned *, int));
#endif /* !WARSHALL_H_ */
/* Generate transitive closure of a matrix,
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.
+1 -1
View File
@@ -25,7 +25,7 @@ MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
TESTSUITE_AT = \
testsuite.at \
output.at calc.at torture.at regression.at
output.at reduce.at calc.at torture.at regression.at
TESTSUITE = $(srcdir)/testsuite
AUTOTEST = $(AUTOM4TE) --language=autotest
+1 -1
View File
@@ -108,7 +108,7 @@ MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
TESTSUITE_AT = \
testsuite.at \
output.at calc.at torture.at regression.at
output.at reduce.at calc.at torture.at regression.at
TESTSUITE = $(srcdir)/testsuite
+2 -2
View File
@@ -4,10 +4,10 @@
# We need a C compiler.
CC='@CC@'
CFLAGS='@CFLAGS@'
CFLAGS='@CFLAGS@ @WARNING_CFLAGS@'
# We need to know if the compiler is GCC.
GCC='@GCC@'
# We need `config.h'.
CPPFLAGS="-I $top_buildpath @CPPFLAGS@"
CPPFLAGS="-I$top_buildpath @CPPFLAGS@"
+206
View File
@@ -0,0 +1,206 @@
# Exercising Bison Grammar Reduction. -*- Autotest -*-
# 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.
AT_BANNER([[Grammar Reduction.]])
## ------------------- ##
## Useless Terminals. ##
## ------------------- ##
AT_SETUP([Useless Terminals])
AT_DATA([[input.y]],
[[%verbose
%output="input.c"
%token useless1
%token useless2
%token useless3
%token useless4
%token useless5
%token useless6
%token useless7
%token useless8
%token useless9
%token useful
%%
exp: useful;
]])
AT_CHECK([[bison input.y]])
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
[[Terminals which are not used:
useless1
useless2
useless3
useless4
useless5
useless6
useless7
useless8
useless9
]])
AT_CLEANUP
## ---------------------- ##
## Useless Nonterminals. ##
## ---------------------- ##
AT_SETUP([Useless Nonterminals])
AT_DATA([[input.y]],
[[%verbose
%output="input.c"
%nterm useless1
%nterm useless2
%nterm useless3
%nterm useless4
%nterm useless5
%nterm useless6
%nterm useless7
%nterm useless8
%nterm useless9
%token useful
%%
exp: useful;
]])
AT_CHECK([[bison input.y]], 0, [],
[[input.y contains 9 useless nonterminals
]])
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
[[Useless nonterminals:
useless1
useless2
useless3
useless4
useless5
useless6
useless7
useless8
useless9
]])
AT_CLEANUP
## --------------- ##
## Useless Rules. ##
## --------------- ##
AT_SETUP([Useless Rules])
AT_DATA([[input.y]],
[[%verbose
%output="input.c"
%token useful
%%
exp: useful;
useless1: '1';
useless2: '2';
useless3: '3';
useless4: '4';
useless5: '5';
useless6: '6';
useless7: '7';
useless8: '8';
useless9: '9';
]])
AT_CHECK([[bison input.y]], 0, [],
[[input.y contains 9 useless nonterminals and 9 useless rules
]])
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
[[Useless nonterminals:
useless1
useless2
useless3
useless4
useless5
useless6
useless7
useless8
useless9
Terminals which are not used:
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
Useless rules:
#2 useless1: '1';
#3 useless2: '2';
#4 useless3: '3';
#5 useless4: '4';
#6 useless5: '5';
#7 useless6: '6';
#8 useless7: '7';
#9 useless8: '8';
#10 useless9: '9';
]])
AT_CLEANUP
## ------------------- ##
## Underivable Rules. ##
## ------------------- ##
AT_SETUP([Underivable Rules])
AT_DATA([[input.y]],
[[%verbose
%output="input.c"
%token useful
%%
exp: useful | underivable;
underivable: indirection;
indirection: underivable;
]])
AT_CHECK([[bison input.y]], 0, [],
[[input.y contains 2 useless nonterminals and 3 useless rules
]])
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
[[Useless nonterminals:
underivable
indirection
Useless rules:
#2 exp: underivable;
#3 underivable: indirection;
#4 indirection: underivable;
]])
AT_CLEANUP
+15 -2
View File
@@ -63,12 +63,14 @@ AT_CHECK([bison input.y -o input.c -v], 0, [],
AT_CHECK([cat input.output], [],
[[State 4 contains 1 shift/reduce conflict.
Grammar
Number, Line, Rule
1 3 exp -> exp OP exp
2 3 exp -> NUM
Terminals, with rules where they appear
$ (-1)
@@ -76,6 +78,7 @@ error (256)
NUM (257) 2
OP (258) 1
Nonterminals, with rules where they appear
exp (5)
@@ -138,6 +141,8 @@ state 5
state 6
$default accept
]])
AT_CLEANUP
@@ -162,12 +167,14 @@ AT_CHECK([bison input.y -o input.c -v], 0, [], [])
AT_CHECK([cat input.output], [],
[[Conflict in state 4 between rule 1 and token OP resolved as shift.
Grammar
Number, Line, Rule
1 4 exp -> exp OP exp
2 4 exp -> NUM
Terminals, with rules where they appear
$ (-1)
@@ -175,6 +182,7 @@ error (256)
NUM (257) 2
OP (258) 1
Nonterminals, with rules where they appear
exp (5)
@@ -236,6 +244,8 @@ state 5
state 6
$default accept
]])
AT_CLEANUP
@@ -283,8 +293,7 @@ AT_CHECK([bison input.y -o input.c -v], 0, [], [])
# Check the contents of the report.
AT_CHECK([cat input.output], [],
[[
Grammar
[[Grammar
Number, Line, Rule
1 2 @1 -> /* empty */
@@ -292,6 +301,7 @@ Grammar
3 15 @2 -> /* empty */
4 15 expr -> @2 'c'
Terminals, with rules where they appear
$ (-1)
@@ -300,6 +310,7 @@ $ (-1)
'c' (99) 4
error (256)
Nonterminals, with rules where they appear
expr (6)
@@ -378,6 +389,8 @@ state 7
state 8
$default accept
]])
AT_CLEANUP
+1
View File
@@ -26,6 +26,7 @@ AT_INIT
AT_TESTED([bison])
m4_include([output.at])
m4_include([reduce.at])
m4_include([calc.at])
m4_include([torture.at])
m4_include([regression.at])
+1 -1
View File
@@ -103,7 +103,7 @@ AT_CLEANUP
AT_SETUP([Exploding the Stack Size with Malloc])
AT_DATA_STACK_TORTURE([[#define YYSTACK_USE_ALLOCA_ALLOCA 0]])
AT_DATA_STACK_TORTURE([[#define YYSTACK_USE_ALLOCA 0]])
# Below the limit of 200.
AT_CHECK([input 20], 0, [], [ignore])