Compare commits

..
127 Commits
Author SHA1 Message Date
Akim Demaille ae26e1f02a Version 1.75. 2002-10-14 16:29:41 +00:00
Akim Demaille d43baf71a7 * tests/Makefile.am (maintainer-check-posix): New. 2002-10-14 15:09:15 +00:00
Akim Demaille 7ebc83e34d * data/glr.c [YYDEBUG] (YYLEFTMOST_STATE): Initialize the yyloc
member.
2002-10-14 13:00:48 +00:00
Akim Demaille b0a7a533c9 Regen. 2002-10-14 12:49:24 +00:00
Akim Demaille d90c934c05 Update. 2002-10-14 12:32:48 +00:00
Akim Demaille 05846dae07 * src/tables.c (table_ninf_remap): base -> tab.
Reported by Matt Rosing.
2002-10-14 11:38:21 +00:00
Paul Eggert 447fbb178d * tests/action.at, tests/calc.at, tests/conflicts.at,
tests/cxx-type.at, tests/headers.at, tests/input.at,
tests/regression.at, tests/synclines.at, tests/torture.at:
Say "bison -o foo.c foo.y", not "bison foo.y -o foo.c",
so that the tests still work even if POSIXLY_CORRECT is set.
* doc/bison.texinfo (Rpcalc Compile, Invocation): Likewise.
2002-10-14 08:44:02 +00:00
Paul Eggert b56471a689 Say "bison -o foo.c foo.y", not "bison foo.y -o foo.c",
so that the commands still work even if POSIXLY_CORRECT is set.
2002-10-14 08:43:36 +00:00
Paul Eggert 1318e37d58 * data/c.m4 (b4_int_type): Use yysigned_char instead of signed char,
for portability to K&R hosts.  Fix typo: signed char is guaranteed
only to 127, not to 128.
* data/glr.c (yysigned_char): New type.
* data/yacc.c (yysigned_char): Likewise.
* tests/regression.at (Web2c Actions): signed char -> yysigned_char.
2002-10-14 08:07:01 +00:00
Paul Eggert 22a00a0cd2 (b4_int_type): Use yysigned_char instead of signed char,
for portability to K&R hosts.  Fix typo: signed char is guaranteed
only to 127, not to 128.
2002-10-14 08:06:33 +00:00
Paul Eggert 768eb43fe8 (yysigned_char): New type. 2002-10-14 08:06:06 +00:00
Paul Eggert 7c78fa1885 (Web2c Actions): signed char -> yysigned_char. 2002-10-14 08:05:20 +00:00
Paul Eggert 5038f418c1 * data/yacc.c (yyparse): Rewrite to avoid "comparison is always
true due to limited range of data type" warning from GCC.
2002-10-14 06:55:10 +00:00
Paul Eggert e5cfd9d8af (yyparse): Rewrite to avoid "comparison is always true due to limited
range of data type" warning from GCC in synclines.at test.
2002-10-14 06:54:41 +00:00
Paul Eggert cc0f0794b8 * data/c.m4 (b4_token_defines): Protect against double-inclusion
by wrapping enum yytokentype's definition inside #ifndef
YYTOKENTYPE.  This undoes a bug I introduced on 2002-10-12.
2002-10-13 20:36:45 +00:00
Paul Eggert 6b8c325436 (b4_token_defines): Protect against double-inclusion
by wrapping enum yytokentype's definition inside #ifndef
YYTOKENTYPE.  This undoes a bug I introduced on 2002-10-12.
2002-10-13 20:35:06 +00:00
Akim Demaille 6fed0802ee * data/glr.c (yyglrShiftDefer, yyaddDeferredAction, yydoAction):
Un yy- yyrhs to avoid the name clash with the global YYRHS.
2002-10-13 19:40:30 +00:00
Akim Demaille 32f0598d06 * Makefile.maint: Update from Autoconf 2.54.
* m4/strerror_r.m4 (AC_FUNC_STRERROR_R): Remove, shipped with 2.54.
2002-10-13 19:39:29 +00:00
Akim Demaille 7ea9a33f3b * src/print.c (print_state): Separate the list of solved conflicts
from the other items.
* tests/conflicts.at (Resolved SR Conflicts): Adjust.
2002-10-13 19:35:59 +00:00
Akim Demaille ea99527d23 Let nondeterministic skeletons be usable with deterministic
tables.
With the patch, GAWK compiled by GCC without -O2 passes its test
suite using a GLR parser driven by LALR tables.  It fails with -O2
because `struct stat' gives two different answers on my machine:
88 (definition of an auto var) and later 96 (memset on this var).
Hence the stack is badly corrumpted.  The headers inclusion is to
blame: if I move the awk.h inclusion before GLR's system header
inclusion, the two struct stat have the same size.
* src/tables.c (pack_table): Always create conflict_table.
(token_actions): Always create conflict_list.
* data/glr.c (YYFLAG): Remove, unused.
2002-10-13 18:50:40 +00:00
Akim Demaille f377f69fec * configure.ac (AC_GNU_SOURCE): Use it instead of hand written code.
(O0FLAGS): New.
(VALGRIND, GXX): New.
* tests/atlocal.in (CFLAGS): Use O0FLAGS.
* tests/bison.in: Run $PREBISON a pre-command.
* tests/Makefile.am (maintainer-check, maintainer-check-valgrind)
(maintainer-check-g++): New.
* Makefile.am (maintainer-check): New.
2002-10-13 18:49:44 +00:00
Akim Demaille 2a1fe6ed6f * data/glr.c: Formatting changes.
Tweak some trace messages to match yacc.c's.
2002-10-13 14:25:55 +00:00
Akim Demaille f50adbbdb0 GLR parsers sometimes raise parse errors instead of performing the
default reduction.
Reported by Charles-Henry de Boysson.
* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Don't
check the length of the	traces when %glr.
(_AT_CHECK_CALC_ERROR): Also skip `^Stack' lines, coming from
GLR's traces.
(AT_CHECK_CALC_LALR, AT_CHECK_CALC_GLR): New.
Test GLR parsers.
* data/glr.c (YYLEFTMOST_STATE): Fix its value.
(yyltype): Remove the yy prefix from the member names.
(yytable): Complete its comment.
(yygetLRActions): Map error action number from YYTABLE from
YYTABLE_NINF to 0.
(yyisErrorAction): No longer compare YYACTION to YYPACT_NINF
(which was a bug: it should have been YYTABEL_NINF, and yet it was
not satisfying as we could compare an YYACTION computed from
YYDEFACT to YYTABLE_NINF although they are unrelated): 0 is the
only value for error actions.
(yyreportParseError): In verbose parse error messages, don't issue
`error' in the list of expected tokens.
* data/yacc.c (yyparse) <yybackup>: Rewrite the decoding of the
next action to perform to match glr.c's decoding.
(yytable): Complete its comment.
2002-10-13 14:25:14 +00:00
Paul Eggert 3b7d4eb2cd Regenerate. 2002-10-13 09:09:49 +00:00
Paul Eggert bcbad5b9a0 Fix problem reported by Henrik Grubbstroem in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001670.html>:
 "nonterm: { $$ = 123; } { $$ = $1; };" was wrongly rejected,
 because the Bison parser reads the second action before reducing
 the first one.
 * src/scan-gram.l (rule_length): New static var.
 Use it to keep track of the rule length in the scanner, since
 we can't expect the parser to be in lock-step sync with the scanner.
 (handle_action_dollar, handle_action_at): Use this var.
 * tests/actions.at (Exotic Dollars): Test for the problem.
2002-10-13 08:40:10 +00:00
Paul Eggert 0ff67d71d7 (Exotic Dollars): Test for "nonterm: { $$ = 123; } { $$ = $1; };" bug. 2002-10-13 08:39:31 +00:00
Paul Eggert efcb44dd47 (rule_length): New static var.
Use it to keep track of the rule length in the scanner, since
we can't expect the parser to be in lock-step sync with the scanner.
(handle_action_dollar, handle_action_at): Use this var.
2002-10-13 08:38:39 +00:00
Paul Eggert 1fe611e544 Attempt to fix SunOS 4.1.4 porting bug reported by Peter Klein in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001674.html>.
2002-10-13 06:00:24 +00:00
Paul Eggert a6352deb14 (BISON_PREREQ_TIMEVAR): Check for <sys/time.h>.
Include <sys/time.h> when checking for clock_t and struct tms.
Use same include order as source.
2002-10-13 05:59:40 +00:00
Paul Eggert bd0ba42d72 Import GCC version as of today, then merge Bison's changes.
Change "GCC" to "Bison" in copyright notice.
2002-10-13 05:58:38 +00:00
Paul Eggert 46b8b6ce90 Fix copyright and authorship notice to point to Bison, not GCC. 2002-10-13 05:57:10 +00:00
Paul Eggert fdabfd76d6 [! IN_GCC && HAVE_SYS_TIME_H]: Include <sys/time.h>.
Update copyright date and clarify comments.
(get_time) [IN_GCC]: Keep the GCC version for reference.

Merge GCC changes.  Change "GCC" to "Bison" in the copyright notice.
2002-10-13 05:56:20 +00:00
Paul Eggert ea9ed226e0 Import of GCC head 2002-10-11 2002-10-13 04:42:59 +00:00
Paul Eggert 98194095fe * src/reader.c (grammar_current_rule_check):
Don't worry about the default action if $$ is untyped.
Prevents bogus warnings reported by Jim Gifford in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001673.html>.
2002-10-13 03:53:18 +00:00
Paul Eggert 3f4c0f8017 (grammar_current_rule_check):
Don't worry about the default action if $$ is untyped.
Prevents bogus warnings reported by Jim Gifford in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001673.html>.
2002-10-13 03:52:53 +00:00
Paul Eggert 14904b8965 * data/c.m4 (b4_token_enum): Do not define YYTOKENTYPE.
* data/glr.c, data/lalr1.cc, data/yacc.c:
Output token definitions before the first part of user declarations.
Fixes compatibility problem reported by Jim Gifford for kbd in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001672.html>.
2002-10-12 23:21:00 +00:00
Paul Eggert 17acead581 Output token definitions before the first part of user declarations. 2002-10-12 23:20:23 +00:00
Paul Eggert 095b9f05c3 (b4_token_enum): Do not define YYTOKENTYPE. 2002-10-12 23:18:52 +00:00
Paul Eggert 68449b3ad3 (Calling Convention): Fix strncmp typo. 2002-10-11 21:19:27 +00:00
Paul Eggert ff6dca1839 * data/yacc.c (yyreport_parse_error): Remove, putting its body into...
(yyparse): here.  This undoes some of the 2002-07-25 change.
Compatibility problem reported by Ralf S. Engelschall with
OSSP cfg <http://www.ossp.org/pkg/lib/cfg/>.
2002-10-11 20:54:17 +00:00
Paul Eggert df5aed8c11 (yyreport_parse_error): Remove, putting its body into...
(yyparse): here.  This undoes some of the 2002-07-25 change.
Compatibility problem reported by Ralf S. Engelschall with
OSSP cfg <http://www.ossp.org/pkg/lib/cfg/>.
2002-10-11 20:53:39 +00:00
Akim Demaille eb71459201 * tests/regression.at Characters Escapes): New.
* src/scan-gram.l (SC_ESCAPED_CHARACTER): Accept ' in strings and
characters.
Reported by Jan Nieuwenhuizen.
2002-10-11 11:23:19 +00:00
Akim Demaille b7195100fd * po/id.po: New. 2002-10-11 10:14:32 +00:00
Paul Eggert f28a0f2dd1 Portability fixes for bitsets; this also avoids several GCC warnings. 2002-10-10 07:38:40 +00:00
Paul Eggert 303e6da265 Include bitset.h, not bbitset.h. 2002-10-10 07:35:19 +00:00
Paul Eggert ef5da92061 Include <stddef.h>, for offsetof.
(lbitset_bytes): Adjust to new, unique names for structures.

(lbitset_and, lbitset_and_cmp, lbitset_andn, lbitset_andn_cmp,
lbitset_or, lbitset_or_cmp, lbitset_xor, lbitset_xor_cmp,
lbitset_empty_p, lbitset_ones, lbitset_not, lbitset_subset_p,
lbitset_disjoint_p, debug_lbitset): Supply prototype decls.

(enum_lbitset_find_mode): New type.  All instances of parameters of
type enum FOO are now of type enum_FOO, to conform to the C Standard.

(struct lbitset_struct, lbitset, bitset_struct, PFV): Remove.

(lbitset_and, lbitset_andn, lbitset_or, lbitset_xor): New functions.
2002-10-10 07:33:59 +00:00
Paul Eggert 3e0a8627e1 (ebitset_bytes): Adjust to new, unique names for structures.
(enum_ebitset_find_mode): New type.
(struct ebitset_struct, ebitset, struct bitset_struct, PFV): Remove.
(ebitset_and, ebitset_andn, ebitset_or,
ebitset_xor, ebitset_copy, ebitset_ones, ebitset_empty_p): New decls.
2002-10-10 07:28:53 +00:00
Paul Eggert fd5c1e824e enum -> enum_ 2002-10-10 07:26:15 +00:00
Paul Eggert f5e211a120 (bitsetv_alloc): Return a size that is aligned properly for vectors of
objects.  Do not assume that adding a header size to a multiple of a
word size yields a value that is properly aligned for the whole union.

(bitsetv_alloc): Add a cast to (void *) to avoid a GCC warning.
2002-10-10 07:25:21 +00:00
Paul Eggert 55e728eb31 (bitset_stats_bytes): Adjust to new, unique names for structures.
(bitset_stats_count, bitset_stats_empty_p, bitset_stats_ones,
bitset_stats_zero, bitset_stats_copy, bitset_stats_disjoint_p,
bitset_stats_equal_p, bitset_stats_not, bitset_stats_subset_p,
bitset_stats_and, bitset_stats_and_cmp, bitset_stats_andn,
bitset_stats_andn_cmp, bitset_stats_or, bitset_stats_or_cmp,
bitset_stats_xor, bitset_stats_xor_cmp, bitset_stats_and_or,
bitset_stats_and_or_cmp, bitset_stats_andn_or,
bitset_stats_andn_or_cmp, bitset_stats_or_and,
bitset_stats_or_and_cmp): Supply prototype decls, to improve the
type-checking that GCC can do.

(struct bitset_stats_struct, bitset_stats, struct bitset_struct): Remove.
2002-10-10 07:23:15 +00:00
Paul Eggert 47c8386f83 (struct bitset_struct): Remove, replacing with....
(union bitset_union, struct abitset_struct, struct ebitset_struct,
struct lbitset_struct, struct bitset_stats_struct): New types.
All uses of struct bitset_struct changed to union bitset_union,
etc.
(bitset_next, bitset_prev, bitset_only_set_p): Declare.
2002-10-10 07:20:24 +00:00
Paul Eggert d5c559cde4 (bitset_op4_cmp): Supply prototype decls,
to improve the type-checking that GCC can do.

(bitset_and_or_, bitset_andn_or_, bitset_or_and_): New functions.
2002-10-10 07:18:47 +00:00
Paul Eggert d9d83ef277 (enum_bitset_ops, enum_bitset_type): New types.
All instances of parameters of type enum bitset_opts are now of
type enum_bitset_opts, to conform to the C Standard, and similarly
for enum_bitset_type.

(bitset): Now points to a union, not to a struct.
All instances of "struct bitset_struct *" replaced with "bitset".

(bitset_and_or_, bitset_andn_or_, bitset_or_and_): New decls.
2002-10-10 07:15:56 +00:00
Paul Eggert d4d399fcce Include <stddef.h>, for offsetof.
(abitset_bytes): Return a size that is aligned
properly for vectors of objects.  Do not assume that adding a
header size to a multiple of a word size yields a value that is
properly aligned for the whole union.

(abitset_ones, abitset_zero, abitset_empty_p, abitset_copy1,
abitset_not, abitset_equal_p, abitset_subset_p, abitset_disjoint_p,
abitset_and, abitset_and_cmp, abitset_andn, abitset_andn_cmp,
abitset_or, abitset_or_cmp, abitset_xor, abitset_xor_cmp,
abitset_and_or, abitset_and_or_cmp, abitset_andn_or,
abitset_andn_or_cmp, abitset_or_and, abitset_or_and_cmp,
abitset_copy): Supply prototype decls, to improve the type-checking
that GCC can do.

(struct abitset_struct, abitset, struct bitset_struct): Remove.
2002-10-10 07:13:58 +00:00
Paul Eggert 6fbe49845f * lib/bitset.h (bitset_reset): Do not assume that bitset_word is
the same width as int.  This reapplies a hunk of the 2002-08-12 patch
<http://mail.gnu.org/pipermail/bison-patches/2002-August/001111.html>,
which was inadvertently undone by the 2002-09-30 patch.
* lib/lbitset.c (debug_lbitset): Do not assume that bitset_word is
the same width as int.
2002-10-07 19:58:00 +00:00
Paul Eggert 7933f2b5dd Bison should now work on 64-bit hosts. 2002-10-07 06:08:30 +00:00
Paul Eggert 0f9cd74fdb (bitset_reset): Do not assume that bitset_word is
the same width as int.  This reapplies a hunk of the 2002-08-12 patch
<http://mail.gnu.org/pipermail/bison-patches/2002-August/001111.html>,
which was inadvertently undone by the 2002-09-30 patch.
2002-10-07 05:43:35 +00:00
Paul Eggert 09147be095 (debug_lbitset): Do not assume that bitset_word is the same width as
int.
2002-10-07 05:41:35 +00:00
Paul Eggert 7a542f5d81 Bump to 1.50a. 2002-10-07 04:51:50 +00:00
Paul Eggert 420f93c83b Version 1.50. 2002-10-05 06:25:50 +00:00
Paul Eggert a337a5eb7e (AC_INIT): Version 1.50. 2002-10-05 06:24:55 +00:00
Paul Eggert 595878d7f5 Update and regenerate. 2002-10-05 06:23:42 +00:00
Paul Eggert 242a6e484e (reader): SHRT_MAX -> SYMBOL_NUMBER_MAX. 2002-10-05 05:47:51 +00:00
Paul Eggert 01eb033cf5 (SYMBOL_NUMBER_MAX): New macro. 2002-10-05 05:47:14 +00:00
Paul Eggert 1c303b00fe (GOTO_NUMBER_MAX): INT_MAX -> SHRT_MAX. 2002-10-05 05:46:42 +00:00
Paul Eggert f704e33362 (ITEM_NUMBER_MIN): MIN_MAX -> INT_MIN. 2002-10-05 05:46:08 +00:00
Paul Eggert 5beedd9b58 * lib/bbitset.h (BITSET_WINDEX_MAX): Redefine so that it cannot be
interpreted as signed.
* lib/ebitset.c (ebitset_list): Fix bug.
From Michael Hayes.
2002-10-05 05:02:30 +00:00
Paul Eggert 9abb46d527 (AM_CFLAGS): Renamed from CFLAGS.
(AM_YFLAGS): Renamed from YFLAGS.
2002-10-05 04:54:54 +00:00
Paul Eggert cd931d9b53 (AM_CFLAGS): Renamed from CFLAGS. 2002-10-05 04:53:54 +00:00
Paul Eggert a4bf0390a0 (Braces parsing): Use grep, not fgrep, as POSIX 1003.1-2001 has
removed fgrep.
2002-10-05 04:50:45 +00:00
Paul Eggert 72d2299ca0 Minor spelling, grammar, and white space fixes.
(Symbols): Mention that any negative value returned from yylex
signifies end-of-input.  Warn about negative chars.  Mention
the portable Standard C character set.
2002-10-05 04:45:45 +00:00
Paul Eggert ff68026d4f More fixes for 64-bit hosts and large bitsets. 2002-10-02 08:03:54 +00:00
Paul Eggert bf5c381136 (lbitset_bytes): Use size_t, not unsigned int, to count bytes. 2002-10-02 08:02:06 +00:00
Paul Eggert 5c319390d7 (lbitset_size, lbitset_list, lbitset_list_merge):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.

(lbitset_bytes): Use size_t, not unsigned int, to count bytes.
Use proper printf formats for widths of integer types.

(lbitset_ones, lbitset_not): Use bitset_windex instead of unsigned int.

(lbitset_elt_find): Simplify windex calculation and avoid cast to unsigned.
2002-10-02 08:00:19 +00:00
Paul Eggert effda851f6 (ebitset_bytes): Use size_t, not unsigned int, to count bytes. 2002-10-02 07:58:11 +00:00
Paul Eggert 52f8da14ea (ebitset_size, ebitset_list, ebitset_list_reverse):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.

(ebitset_bytes): Use size_t, not unsigned int, to count bytes.

(struct ebitset_struct.size, ebitset_elts_grow,
ebitset_elt_add, ebitset_elt_remove, ebitset_weed,
ebitset_elt_find, ebitset_list_reverse, ebitset_list, ebitset_init):
Use bitset_windex instead of unsigned int.

(ebitset_elts_grow): Check for arithmetic overflow when computing sizes.
2002-10-02 07:57:24 +00:00
Paul Eggert eb6172cd1e (bitsetv_alloc, bitsetv_create):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.
2002-10-02 07:55:44 +00:00
Paul Eggert 32e218da16 (bitsetv_alloc, bitsetv_create, bitsetv_free,
bitsetv_zero, bitsetv_ones, bitsetv_transitive_closure,
bitsetv_reflexive_transitive_closure):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.

(bitsetv_alloc): Use size_t, not unsigned int, to count bytes.

(bitsetv_dump, debug_bitsetv):
Use bitset_windex instead of unsigned int.
Use proper printf formats for widths of integer types.

(bitsetv_alloc): Check for arithmetic overflow when computing sizes.
2002-10-02 07:54:52 +00:00
Paul Eggert 4fc71aa390 (bitsetv_matrix_dump):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.
Use proper printf formats for widths of integer types.
2002-10-02 07:52:50 +00:00
Paul Eggert c9de3b4080 (bitset_stats_bytes): Use size_t, not unsigned int, to count bytes. 2002-10-02 07:50:39 +00:00
Paul Eggert 2d382ea853 (bitset_stats_size, bitset_stats_list,
bitset_stats_list_reverse, bitset_stats_size,
bitset_stats_count, bitset_stats_list, bitset_stat_list_reverse):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.

(bitset_stats_bytes, bitset_stats_init):
Use size_t, not unsigned int, to count bytes.

(bitset_percent_histogram_print,
bitset_log_histogram_print, bitset_stats_print_1):
Use proper printf formats for width of integer types.
2002-10-02 07:49:35 +00:00
Paul Eggert 808a5918e6 (bitset_iterator.num, bitset_iterator.i, bitset_first, bitset_last):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.

(bitset_bytes): Use size_t, not unsigned int, to count bytes.
2002-10-02 07:47:03 +00:00
Paul Eggert d32fe6f64f (bitset_bytes, bitset_alloc, bitset_obstack_alloc):
Use size_t, not unsigned int, to count bytes.

(bitset_print): Use proper printf format for bitset types.

(bitset_next, bitset_prev, bitset_first, bitset_last):
Return BITSET_BINDEX_MAX (not -1) for no value,
since we now return the bitset_bindex type (not int).
2002-10-02 07:45:37 +00:00
Paul Eggert f6ebdb3174 (struct bitset_vtable.size, struct bitset_vtable.count,
struct bitset_vtable.list, struct bitset_vtable.list_reverse,
bitset_count_, bitset_next, bitset_prev, bitset_first, bitset_last,
bitset_count_):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.

(BITSET_BINDEX_MAX, BITSET_WINDEX_MAX, BITSET_SIZE_MAX): New macros.
(BITSET_INDEX_MAX): Remove.  It wasn't right, since it assumed that
sizeof (bitset_word) == sizeof (bitset_windex).  All uses changed
to BITSET_WINDEX_MAX.
2002-10-02 07:44:07 +00:00
Paul Eggert 8207d52123 (abitset_bytes): Use size_t, not unsigned int, to count bytes. 2002-10-02 07:42:26 +00:00
Paul Eggert 62a34c3eb6 (struct abitset_struct.n_bits, abitset_small_list, abitset_size,
abitset_list, abitset_list_reverse, abitset_list):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.

(abitset_ones, abitset_zero, abitset_bytes):
Use size_t, not unsigned int, to count bytes.

(abitset_empty_p, abitset_not, abitset_equal_p,
abitset_subset_p, abitset_disjoint_p, abitset_and,
abitset_and_cmp, abitset_andn, abitset_andn_cmp, abitset_or,
abitset_or_cmp, abitset_xor, abitset_xor_cmp, abitset_and_or,
abitset_and_or_cmp, abitset_andn_or, abitset_andn_or_cmp,
abitset_or_and, abitset_or_and_cmp): Use bitset_windex instead of
unsigned int.
2002-10-02 07:41:04 +00:00
Akim Demaille 6aa452a643 * lib/abitset.c, lib/bbitset.h, lib/bitset.c, lib/bitset.h,
* lib/bitset_stats.c, lib/bitsetv.c, lib/ebitset.c, lib/lbitset.c:
Updates from Michael Hayes.
2002-09-30 12:50:49 +00:00
Akim Demaille 719010ad2b Regen. 2002-09-30 12:43:14 +00:00
Akim Demaille 927f781708 * configure.ac: Update AC_OUTPUT and AM_CONFIG_HEADER
invocations.
* tests/cxx-type.at (declarator): Don't rely on NDEBUG being not
defined.
2002-09-30 12:27:31 +00:00
Akim Demaille e88dbdbf44 Fixes from Jim Meyering. 2002-09-30 08:40:51 +00:00
Akim Demaille b778eff5f9 Regen. 2002-09-30 08:38:50 +00:00
Akim Demaille 805e703284 Bump to 1.49d. 2002-09-27 15:40:39 +00:00
Akim Demaille 464197c3a7 . 2002-09-27 15:19:32 +00:00
Akim Demaille 35f6ddeafb Regen. 2002-09-27 14:55:20 +00:00
Akim Demaille a75649b395 Remove. 2002-09-27 14:50:35 +00:00
Akim Demaille c0cac722f7 Update. 2002-09-27 14:50:18 +00:00
Akim Demaille 9738f41e3f Version 1.49c. 2002-09-27 14:40:23 +00:00
Akim Demaille a5c75d7fc6 * configure.ac (AM_INIT_AUTOMAKE): We _need_ 1.7.
(Because of AC_LIBSOURCE).
2002-09-27 13:24:19 +00:00
Akim Demaille 8280e1797d Playing with Autoscan.
* configure.ac: Remove the old LIBOBJ tweaks.
(AC_REPLACE_FUNCS): Add strrchr and strtol.
* lib/strrchr.c: New.
* lib/strtol.c: New, from the Coreutils 4.5.1.
2002-09-27 13:19:59 +00:00
Akim Demaille ae64af3556 Playing with Autoscan.
* m4/prereq.m4 (jm_PREREQ_ARGMATCH, jm_FUNC_ARGMATCH): New.
* lib/Makefile.am (libbison_a_SOURCES): No longer include
argmatch.c and argmatch.h, since they are AC_LIBSOURCE'd.
* lib/strcasecmp.c, lib/strncasecmp.c, lib/memcmp.c: New, from the
Coreutils 4.5.1.
2002-09-27 13:03:32 +00:00
Akim Demaille d1a1114f7f * doc/bison.texinfo (Stack Overflow): xref to Recursion.
(Frequently Asked Questions, Parser Stack Overflow): New.
2002-09-24 12:32:36 +00:00
Akim Demaille b906441c95 Playing with autoscan.
* src/reader.c (get_merge_function): Use xstrdup, not strdup.
* src/files.c (skeleton_find): Remove, unused.
* m4/memcmp.m4: New, from the Coreutils 4.5.1.
* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Run jm_FUNC_MEMCMP.
2002-09-13 16:12:21 +00:00
Akim Demaille bd7018115a * configure.ac (AM_INIT_AUTOMAKE): Require Automake 1.6.3.
* Makefile.am (AUTOMAKE_OPTIONS): Don't.
2002-09-13 15:39:52 +00:00
Akim Demaille e0a13e7b30 * configure.ac: Require 2.54.
s/jm_FUNC_MALLOC/AC_FUNC_MALLOC/.
s/jm_FUNC_REALLOC/AC_FUNC_REALLOC/.
* m4/c-bs-a.m4, m4/malloc.m4, m4/mbstate_t.m4, m4/realloc.m4:
Remove, provided by Autoconf macros.
2002-09-13 12:00:04 +00:00
Akim Demaille 43674285cc Really call jm_PREREQ_TEMPNAME. 2002-09-13 08:19:31 +00:00
Akim Demaille c97011bfc1 * m4/prereq.m4: Update, from Coreutils 4.5.1. 2002-09-12 16:45:33 +00:00
Akim Demaille d862b1be60 * m4/prereq.m4: Update, from Fileutils 4.1.5.
* configure.ac (jm_PREREQ_TEMPNAME): Invoke it.
Reported by Martin Mokrejs.
2002-09-12 16:11:55 +00:00
Akim Demaille f414d77d38 More about Java. 2002-09-11 08:50:55 +00:00
Akim Demaille f25e23a632 Regen. 2002-09-11 08:49:30 +00:00
Akim Demaille 54d25cfb74 Typo. 2002-09-10 14:08:48 +00:00
Akim Demaille 3d38c03a86 * src/parse-gram.y: Associate a human readable string to each
token type.
* tests/regression.at (Invalid inputs): Adjust.
2002-09-10 13:52:33 +00:00
Akim Demaille b63473552d * tests/Makefile.am ($(srcdir)/package.m4): Bison now ships
with an Autoconf-2.5x style configure.ac.
2002-09-10 13:51:30 +00:00
Akim Demaille 1b17ce8ebc Fix typo. From Gary V. Vaughan. 2002-09-10 13:42:59 +00:00
Paul Eggert 09ba4ab244 2002-09-06 Paul Eggert <[email protected]>
* doc/bison.texinfo (Conditions): Make explicit that the GPL
	exception applies only to yacc.c.  This is a modification of a
	patch originally suggested by Akim Demaille.

2002-09-06  Akim Demaille  <[email protected]>

	* data/c.m4 (b4_copyright): Move the GPL exception comment from
	here to...
	* data/yacc.c: here.
2002-09-07 06:35:10 +00:00
Paul Eggert 262aa8dd59 (Conditions): Say that the exceptions apply only to C LALR(1) parsers. 2002-09-07 06:33:29 +00:00
Paul Eggert 0252b55c07 data/yacc.c: Move the GPL exception comment from c.m4 (b4_copyright) to here. 2002-09-07 06:32:24 +00:00
Paul Eggert ad66f664ef (b4_copyright): Move the GPL exception comment from here to yacc.c.
Patch by Akim Demaille.
2002-09-07 06:31:32 +00:00
Akim Demaille 21846f695d * data/lalr1.cc (struct yyltype): Don't define it, since we use
LocationType.
(b4_ltype): Default to yy::Location from location.hh.
2002-09-06 11:54:05 +00:00
Akim Demaille c0ad8bf3c2 * data/yacc.c: Guard the declaration of yytoknum also with
`#ifdef YYPRINT', so it is declared only when used.
2002-09-04 12:03:01 +00:00
Akim Demaille eb34f4177c Update. 2002-09-04 12:02:11 +00:00
Akim Demaille 3a93251e73 * configure.in: Rename as...
* configure.ac: this.
Bump to 1.49c.
2002-09-04 11:15:30 +00:00
Akim Demaille 427c0dda0c * src/assoc.c, src/closure.c, src/gram.c, src/injections.c,
* src/lalr.c, src/LR0.c, src/relation.c, src/tables.c: Don't
translate maintainer only messages.
2002-09-04 10:18:15 +00:00
Akim Demaille 3f8237696f Typo. 2002-09-04 10:07:33 +00:00
Akim Demaille 9503bbd27d Regen. 2002-09-04 09:58:12 +00:00
Akim Demaille 3c146b5e6f Header guard bug. 2002-09-04 09:41:48 +00:00
Paul Eggert 948be909e9 Add "Java, Fortran, etc." Mention the already-existing hack that supports Bison for Java.
Fix some misspellings.
2002-08-30 11:27:05 +00:00
Paul Eggert 8442d6ba22 No longer needed, since we're not using the stage stuff. 2002-08-12 17:20:52 +00:00
98 changed files with 8149 additions and 5788 deletions
+524
View File
@@ -1,3 +1,527 @@
2002-10-14 Akim Demaille <[email protected]>
Version 1.75.
2002-10-14 Akim Demaille <[email protected]>
* tests/Makefile.am (maintainer-check-posix): New.
2002-10-14 Akim Demaille <[email protected]>
* data/glr.c [YYDEBUG] (YYLEFTMOST_STATE): Initialize the yyloc
member.
2002-10-14 Akim Demaille <[email protected]>
* src/tables.c (table_ninf_remap): base -> tab.
Reported by Matt Rosing.
2002-10-14 Paul Eggert <[email protected]>
* tests/action.at, tests/calc.at, tests/conflicts.at,
tests/cxx-type.at, tests/headers.at, tests/input.at,
tests/regression.at, tests/synclines.at, tests/torture.at:
Say "bison -o foo.c foo.y", not "bison foo.y -o foo.c",
so that the tests still work even if POSIXLY_CORRECT is set.
* doc/bison.texinfo (Rpcalc Compile, Invocation): Likewise.
* data/c.m4 (b4_int_type): Use yysigned_char instead of signed char,
for portability to K&R hosts. Fix typo: signed char is guaranteed
only to 127, not to 128.
* data/glr.c (yysigned_char): New type.
* data/yacc.c (yysigned_char): Likewise.
* tests/regression.at (Web2c Actions): signed char -> yysigned_char.
2002-10-13 Paul Eggert <[email protected]>
* data/yacc.c (yyparse): Rewrite to avoid "comparison is always
true due to limited range of data type" warning from GCC.
* data/c.m4 (b4_token_defines): Protect against double-inclusion
by wrapping enum yytokentype's definition inside #ifndef
YYTOKENTYPE. This undoes a bug I introduced on 2002-10-12.
2002-10-13 Akim Demaille <[email protected]>
* data/glr.c (yyglrShiftDefer, yyaddDeferredAction, yydoAction):
Un yy- yyrhs to avoid the name clash with the global YYRHS.
2002-10-13 Akim Demaille <[email protected]>
* Makefile.maint: Update from Autoconf 2.54.
* m4/strerror_r.m4 (AC_FUNC_STRERROR_R): Remove, shipped with 2.54.
2002-10-13 Akim Demaille <[email protected]>
* src/print.c (print_state): Separate the list of solved conflicts
from the other items.
* tests/conflicts.at (Resolved SR Conflicts): Adjust.
2002-10-13 Akim Demaille <[email protected]>
Let nondeterministic skeletons be usable with deterministic
tables.
With the patch, GAWK compiled by GCC without -O2 passes its test
suite using a GLR parser driven by LALR tables. It fails with -O2
because `struct stat' gives two different answers on my machine:
88 (definition of an auto var) and later 96 (memset on this var).
Hence the stack is badly corrumpted. The headers inclusion is to
blame: if I move the awk.h inclusion before GLR's system header
inclusion, the two struct stat have the same size.
* src/tables.c (pack_table): Always create conflict_table.
(token_actions): Always create conflict_list.
* data/glr.c (YYFLAG): Remove, unused.
2002-10-13 Akim Demaille <[email protected]>
* configure.ac (AC_GNU_SOURCE): Use it instead of hand written code.
(O0FLAGS): New.
(VALGRIND, GXX): New.
* tests/atlocal.in (CFLAGS): Use O0FLAGS.
* tests/bison.in: Run $PREBISON a pre-command.
* tests/Makefile.am (maintainer-check, maintainer-check-valgrind)
(maintainer-check-g++): New.
* Makefile.am (maintainer-check): New.
2002-10-13 Akim Demaille <[email protected]>
* data/glr.c: Formatting changes.
Tweak some trace messages to match yacc.c's.
2002-10-13 Akim Demaille <[email protected]>
GLR parsers sometimes raise parse errors instead of performing the
default reduction.
Reported by Charles-Henry de Boysson.
* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Don't
check the length of the traces when %glr.
(_AT_CHECK_CALC_ERROR): Also skip `^Stack' lines, coming from
GLR's traces.
(AT_CHECK_CALC_LALR, AT_CHECK_CALC_GLR): New.
Test GLR parsers.
* data/glr.c (YYLEFTMOST_STATE): Fix its value.
(yyltype): Remove the yy prefix from the member names.
(yytable): Complete its comment.
(yygetLRActions): Map error action number from YYTABLE from
YYTABLE_NINF to 0.
(yyisErrorAction): No longer compare YYACTION to YYPACT_NINF
(which was a bug: it should have been YYTABEL_NINF, and yet it was
not satisfying as we could compare an YYACTION computed from
YYDEFACT to YYTABLE_NINF although they are unrelated): 0 is the
only value for error actions.
(yyreportParseError): In verbose parse error messages, don't issue
`error' in the list of expected tokens.
* data/yacc.c (yyparse) <yybackup>: Rewrite the decoding of the
next action to perform to match glr.c's decoding.
(yytable): Complete its comment.
2002-10-13 Paul Eggert <[email protected]>
Fix problem reported by Henrik Grubbstroem in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001670.html>:
"nonterm: { $$ = 123; } { $$ = $1; };" was wrongly rejected,
because the Bison parser reads the second action before reducing
the first one.
* src/scan-gram.l (rule_length): New static var.
Use it to keep track of the rule length in the scanner, since
we can't expect the parser to be in lock-step sync with the scanner.
(handle_action_dollar, handle_action_at): Use this var.
* tests/actions.at (Exotic Dollars): Test for the problem.
2002-10-12 Paul Eggert <[email protected]>
* lib/timevar.c [! IN_GCC && HAVE_SYS_TIME_H]: Include <sys/time.h>.
* m4/timevar.m4 (BISON_PREREQ_TIMEVAR): Check for <sys/time.h>.
Include <sys/time.h> when checking for clock_t and struct tms.
Use same include order as source.
This is for the SunOS 4.1.4 porting bug reported by Peter Klein in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001674.html>.
* lib/timevar.c: Update copyright date and clarify comments.
(get_time) [IN_GCC]: Keep the GCC version for reference.
* lib/timevar.c, lib/timevar.h, lib/timevar.def: Import
GCC version as of today, then merge Bison's changes.
Change "GCC" to "Bison" in copyright notice. timevar.def's
author is Akim, so change that too.
* src/reader.c (grammar_current_rule_check):
Don't worry about the default action if $$ is untyped.
Prevents bogus warnings reported by Jim Gifford in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001673.html>.
* data/c.m4 (b4_token_enum): Do not define YYTOKENTYPE.
* data/glr.c, data/lalr1.cc, data/yacc.c:
Output token definitions before the first part of user declarations.
Fixes compatibility problem reported by Jim Gifford for kbd in
<http://mail.gnu.org/pipermail/bug-bison/2002-October/001672.html>.
2002-10-11 Paul Eggert <[email protected]>
* data/yacc.c (yyreport_parse_error): Remove, putting its body into...
(yyparse): here. This undoes some of the 2002-07-25 change.
Compatibility problem reported by Ralf S. Engelschall with
OSSP cfg <http://www.ossp.org/pkg/lib/cfg/>.
2002-10-11 Akim Demaille <[email protected]>
* tests/regression.at Characters Escapes): New.
* src/scan-gram.l (SC_ESCAPED_CHARACTER): Accept \' in strings and
characters.
Reported by Jan Nieuwenhuizen.
2002-10-11 Akim Demaille <[email protected]>
* po/id.po: New.
2002-10-10 Paul Eggert <[email protected]>
Portability fixes for bitsets; this also avoids several GCC
warnings.
* lib/abitset.c: Include <stddef.h>, for offsetof.
* lib/lbitset.c: Likewise.
* lib/abitset.c (abitset_bytes): Return a size that is aligned
properly for vectors of objects. Do not assume that adding a
header size to a multiple of a word size yields a value that is
properly aligned for the whole union.
* lib/bitsetv.c (bitsetv_alloc): Likewise.
* lib/bitset_stats.c (bitset_stats_bytes): Adjust to new,
unique names for structures.
* lib/ebitset.c (ebitset_bytes): Likewise.
* lib/lbitset.c (lbitset_bytes): Likewise.
* lib/abitset.c (abitset_ones, abitset_zero, abitset_empty_p,
abitset_copy1, abitset_not, abitset_equal_p, abitset_subset_p,
abitset_disjoint_p, abitset_and, abitset_and_cmp, abitset_andn,
abitset_andn_cmp, abitset_or, abitset_or_cmp, abitset_xor,
abitset_xor_cmp, abitset_and_or, abitset_and_or_cmp,
abitset_andn_or, abitset_andn_or_cmp, abitset_or_and,
abitset_or_and_cmp, abitset_copy): Supply prototype decls,
to improve the type-checking that GCC can do.
* lib/bitset.c (bitset_op4_cmp): Likewise.
* lib/bitset_stats.c (bitset_stats_count,
bitset_stats_empty_p, bitset_stats_ones, bitset_stats_zero,
bitset_stats_copy, bitset_stats_disjoint_p,
bitset_stats_equal_p, bitset_stats_not, bitset_stats_subset_p,
bitset_stats_and, bitset_stats_and_cmp, bitset_stats_andn,
bitset_stats_andn_cmp, bitset_stats_or, bitset_stats_or_cmp,
bitset_stats_xor, bitset_stats_xor_cmp, bitset_stats_and_or,
bitset_stats_and_or_cmp, bitset_stats_andn_or,
bitset_stats_andn_or_cmp, bitset_stats_or_and,
bitset_stats_or_and_cmp): Likewise.
* lib/lbitset.c (lbitset_and, lbitset_and_cmp, lbitset_andn,
lbitset_andn_cmp, lbitset_or, lbitset_or_cmp, lbitset_xor,
lbitset_xor_cmp, lbitset_empty_p, lbitset_ones, lbitset_not,
lbitset_subset_p, lbitset_disjoint_p, debug_lbitset): Likewise.
* lib/abitset.h: Include bitset.h, not bbitset.h.
* lib/ebitset.h: Likewise.
* lib/lbitset.h: Likewise.
* lib/bbitset.h: (enum_bitset_ops, enum_bitset_type): New types.
All instances of parameters of type enum bitset_opts are now of
type enum_bitset_opts, to conform to the C Standard, and similarly
for enum_bitset_type.
* lib/ebitset.c (enum_ebitset_find_mode): Likewise.
* lib/lbitset.c (enum_lbitset_find_mode): Likewise.
Do not use "struct bitset_struct" to mean different things in
different modules. Not only is this confusing, it violates
the C Standard, which requires that structure types in different
modules must be compatible if one is to be passed to the other.
* lib/bbitset.h (bitset): Now points to a union, not to a struct.
All instances of "struct bitset_struct *" replaced with "bitset".
* lib/bitset.h (struct bitset_struct): Remove, replacing with....
(union bitset_union, struct abitset_struct, struct ebitset_struct,
struct lbitset_struct, struct bitset_stats_struct): New types.
All uses of struct bitset_struct changed to union bitset_union,
etc.
* lib/abitset.c (struct abitset_struct, abitset,
struct bitset_struct): Remove.
* lib/bitset_stats.c (struct bitset_stats_struct, bitset_stats,
struct bitset_struct): Remove.
* lib/ebitset.c (struct ebitset_struct, ebitset, struct
bitset_struct): Remove.
* lib/lbitset.c (struct lbitset_struct, lbitset, bitset_struct):
Likewise.
Do not call a function of type T using a call that assumes the
function is of a different type U. Standard C requires that a
function must be called with a type that is compatible with its
definition.
* lib/bbitset.h (bitset_and_or_, bitset_andn_or_, bitset_or_and_):
New decls.
* lib/bitset.c (bitset_and_or_, bitset_andn_or_, bitset_or_and_):
New functions.
* lib/ebitset.c (PFV): Remove.
* lib/lbitset.c (PFV): Likewise.
* lib/ebitset.c (ebitset_and, ebitset_andn, ebitset_or,
ebitset_xor, ebitset_copy, ebitset_ones, ebitset_empty_p): New
decls.
(ebitset_and, ebitset_andn, ebitset_or, ebitset_xor): New functions.
(ebitset_vtable): Use them.
* lib/lbitset.c (lbitset_and, lbitset_andn, lbitset_or,
lbitset_xor): New functions.
(lbitset_vtable): Use them.
* lib/bitset.h (bitset_next, bitset_prev, bitset_only_set_p):
Declare.
* lib/bitsetv.c (bitsetv_alloc): Add a cast to (void *) to avoid a
GCC warning.
* lib/lbitset.c (LBITSET_CURRENT1): Likewise.
Use offsetof, for simplicity.
2002-10-06 Paul Eggert <[email protected]>
* lib/bitset.h (bitset_reset): Do not assume that bitset_word is
the same width as int. This reapplies a hunk of the 2002-08-12 patch
<http://mail.gnu.org/pipermail/bison-patches/2002-August/001111.html>,
which was inadvertently undone by the 2002-09-30 patch.
* lib/lbitset.c (debug_lbitset): Do not assume that bitset_word is
the same width as int.
2002-10-04 Paul Eggert <[email protected]>
Version 1.50.
* configure.ac (AC_INIT), NEWS: Increment version number.
* doc/bison.texinfo: Minor spelling, grammar, and white space
fixes.
(Symbols): Mention that any negative value returned from yylex
signifies end-of-input. Warn about negative chars. Mention
the portable Standard C character set.
The GNU coding standard says CFLAGS and YFLAGS are reserved
for the installer to set.
* lib/Makefile.am (AM_CFLAGS): Renamed from CFLAGS.
* src/Makefile.am (AM_CFLAGS): Likewise.
(AM_YFLAGS): Renamed from YFLAGS.
Fix some MAX and MIN problems.
* src/gram.h (ITEM_NUMBER_MIN): MIN_MAX -> INT_MIN.
* src/lalr.h (GOTO_NUMBER_MAX): INT_MAX -> SHRT_MAX.
* src/symtab.h (SYMBOL_NUMBER_MAX): New macro.
* src/reader.c (reader): Use it.
* tests/regression.at (Braces parsing): Use grep, not fgrep, as
POSIX 1003.1-2001 has removed fgrep.
2002-10-04 Michael Hayes <[email protected]>
* lib/bbitset.h (BITSET_WINDEX_MAX): Redefine so that it cannot be
interpreted as signed.
* lib/ebitset.c (ebitset_list): Fix bug.
2002-10-01 Paul Eggert <[email protected]>
More fixes for 64-bit hosts and large bitsets.
* lib/abitset.c (struct abitset_struct.n_bits, abitset_small_list,
abitset_size, abitset_list, abitset_list_reverse, abitset_list):
Use bitset_bindex, not int or unsigned int or size_t, to count bits.
* lib/bbitset.h (struct bitset_vtable.size, struct bitset_vtable.count,
struct bitset_vtable.list, struct bitset_vtable.list_reverse,
bitset_count_, bitset_next, bitset_prev, bitset_first, bitset_last,
bitset_count_): Likewise.
* lib/bitset.h (bitset_iterator.num, bitset_iterator.i,
bitset_first, bitset_last): Likewise.
* lib/bitset_stats.c (bitset_stats_size, bitset_stats_list,
bitset_stats_list_reverse, bitset_stats_size,
bitset_stats_count, bitset_stats_list, bitset_stat_list_reverse):
Likewise.
* lib/bitsetv-print.c (bitsetv_matrix_dump): Likewise.
* lib/bitsetv.c (bitsetv_alloc, bitsetv_create, bitsetv_free,
bitsetv_zero, bitsetv_ones, bitsetv_transitive_closure,
bitsetv_reflexive_transitive_closure): Likewise.
* lib/bitsetv.h (bitsetv_alloc, bitsetv_create): Likewise.
* lib/ebitset.c (ebitset_size, ebitset_list, ebitset_list_reverse):
Likewise.
* lib/lbitset.c (lbitset_size, lbitset_list, lbitset_list_merge):
Likewise.
* lib/abitset.c (abitset_ones, abitset_zero, abitset_bytes):
Use size_t, not unsigned int, to count bytes.
* lib/abitset.h (abitset_bytes): Likewise.
* lib/bitset.c (bitset_bytes, bitset_alloc, bitset_obstack_alloc):
Likewise.
* lib/bitset.h (bitset_bytes): Likewise.
* lib/bitset_stats.c (bitset_stats_bytes, bitset_stats_init): Likewise.
* lib/bitset_stats.h (bitset_stats_bytes): Likewise.
* lib/bitsetv.c (bitsetv_alloc): Likewise.
* lib/ebitset.c (ebitset_bytes): Likewise.
* lib/ebitset.h (ebitset_bytes): Likewise.
* lib/lbitset.c (lbitset_bytes): Likewise.
* lib/lbitset.h (lbitset_bytes): Likewise.
* lib/abitset.c (abitset_empty_p, abitset_not, abitset_equal_p,
abitset_subset_p, abitset_disjoint_p, abitset_and,
abitset_and_cmp, abitset_andn, abitset_andn_cmp, abitset_or,
abitset_or_cmp, abitset_xor, abitset_xor_cmp, abitset_and_or,
abitset_and_or_cmp, abitset_andn_or, abitset_andn_or_cmp,
abitset_or_and, abitset_or_and_cmp):
Use bitset_windex instead of unsigned int.
* lib/bitsetv.c (bitsetv_dump, debug_bitsetv): Likewise.
* lib/ebitset.c (struct ebitset_struct.size, ebitset_elts_grow,
ebitset_elt_add, ebitset_elt_remove, ebitset_weed,
ebitset_elt_find, ebitset_list_reverse, ebitset_list, ebitset_init):
Likewise.
* lib/lbitset.c (lbitset_ones, lbitset_not): Likewise.
* lib/bitset.c (bitset_print):
Use proper printf formats for widths of integer types.
* lib/bitset_stats.c (bitset_percent_histogram_print,
bitset_log_histogram_print, bitset_stats_print_1): Likewise.
* lib/bitsetv-print.c (bitsetv_matrix_dump): Likewise.
* lib/bitsetv.c (bitsetv_dump, debug_bitsetv): Likewise.
* lib/lbitset.c (lbitset_bytes): Likewise.
* lib/bbitset.h (BITSET_BINDEX_MAX, BITSET_WINDEX_MAX,
BITSET_SIZE_MAX): New macros.
(BITSET_INDEX_MAX): Remove. It wasn't right, since it assumed that
sizeof (bitset_word) == sizeof (bitset_windex). All uses changed
to BITSET_WINDEX_MAX.
* lib/bitset.c (bitset_next, bitset_prev, bitset_first,
bitset_last): Return BITSET_BINDEX_MAX (not -1) for no value,
since we now return the bitset_bindex type (not int).
* lib/bitsetv.c (bitsetv_alloc): Check for arithmetic overflow
when computing sizes.
* lib/ebitset.c (ebitset_elts_grow): Likewise.
* lib/lbitset.c (lbitset_elt_find): Simplify windex calculation
and avoid cast to unsigned.
2002-09-30 Akim Demaille <[email protected]>
* lib/abitset.c, lib/bbitset.h, lib/bitset.c, lib/bitset.h,
* lib/bitset_stats.c, lib/bitsetv.c, lib/ebitset.c, lib/lbitset.c:
Updates from Michael Hayes.
2002-09-30 Art Haas <[email protected]>
* configure.ac: Update AC_OUTPUT and AM_CONFIG_HEADER
invocations.
* tests/cxx-type.at (declarator): Don't rely on NDEBUG being not
defined.
2002-09-27 Akim Demaille <[email protected]>
Version 1.49c.
2002-09-27 Akim Demaille <[email protected]>
* configure.ac (AM_INIT_AUTOMAKE): We _need_ 1.7.
(Because of AC_LIBSOURCE).
2002-09-27 Akim Demaille <[email protected]>
Playing with Autoscan.
* configure.ac: Remove the old LIBOBJ tweaks.
(AC_REPLACE_FUNCS): Add strrchr and strtol.
* lib/strrchr.c: New.
* lib/strtol.c: New, from the Coreutils 4.5.1.
2002-09-27 Akim Demaille <[email protected]>
Playing with Autoscan.
* m4/prereq.m4 (jm_PREREQ_ARGMATCH, jm_FUNC_ARGMATCH): New.
* lib/Makefile.am (libbison_a_SOURCES): No longer include
argmatch.c and argmatch.h, since they are AC_LIBSOURCE'd.
* lib/strcasecmp.c, lib/strncasecmp.c, lib/memcmp.c: New, from the
Coreutils 4.5.1.
2002-09-24 Akim Demaille <[email protected]>
* doc/bison.texinfo (Stack Overflow): xref to Recursion.
(Frequently Asked Questions, Parser Stack Overflow): New.
2002-09-13 Akim Demaille <[email protected]>
Playing with autoscan.
* src/reader.c (get_merge_function): Use xstrdup, not strdup.
* src/files.c (skeleton_find): Remove, unused.
* m4/memcmp.m4: New, from the Coreutils 4.5.1.
* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Run jm_FUNC_MEMCMP.
2002-09-13 Akim Demaille <[email protected]>
* configure.ac (AM_INIT_AUTOMAKE): Require Automake 1.6.3.
* Makefile.am (AUTOMAKE_OPTIONS): Don't.
2002-09-13 Akim Demaille <[email protected]>
* configure.ac: Require 2.54.
s/jm_FUNC_MALLOC/AC_FUNC_MALLOC/.
s/jm_FUNC_REALLOC/AC_FUNC_REALLOC/.
* m4/c-bs-a.m4, m4/malloc.m4, m4/mbstate_t.m4, m4/realloc.m4:
Remove, provided by Autoconf macros.
2002-09-12 Akim Demaille <[email protected]>
* m4/prereq.m4: Update, from Coreutils 4.5.1.
2002-09-12 Akim Demaille <[email protected]>
* m4/prereq.m4: Update, from Fileutils 4.1.5.
* configure.ac (jm_PREREQ_TEMPNAME): Invoke it.
Reported by Martin Mokrejs.
2002-09-10 Akim Demaille <[email protected]>
* src/parse-gram.y: Associate a human readable string to each
token type.
* tests/regression.at (Invalid inputs): Adjust.
2002-09-10 Gary V. Vaughan <[email protected]>
* tests/Makefile.am ($(srcdir)/package.m4): Bison now ships
with an Autoconf-2.5x style configure.ac.
2002-09-06 Paul Eggert <[email protected]>
* doc/bison.texinfo (Conditions): Make explicit that the GPL
exception applies only to yacc.c. This is a modification of a
patch originally suggested by Akim Demaille.
2002-09-06 Akim Demaille <[email protected]>
* data/c.m4 (b4_copyright): Move the GPL exception comment from
here to...
* data/yacc.c: here.
* data/lalr1.cc (struct yyltype): Don't define it, since we use
LocationType.
(b4_ltype): Default to yy::Location from location.hh.
2002-09-04 Jim Meyering <[email protected]>
* data/yacc.c: Guard the declaration of yytoknum also with
`#ifdef YYPRINT', so it is declared only when used.
2002-09-04 Akim Demaille <[email protected]>
* configure.in: Rename as...
* configure.ac: this.
Bump to 1.49c.
2002-09-04 Akim Demaille <[email protected]>
* src/assoc.c, src/closure.c, src/gram.c, src/injections.c,
* src/lalr.c, src/LR0.c, src/relation.c, src/tables.c: Don't
translate maintainer only messages.
2002-08-12 Paul Eggert <[email protected]>
Version 1.49b.
+18 -7
View File
@@ -4,6 +4,11 @@ This file attempts to describe the rules to use when hacking Bison.
Don't put this file into the distribution. Don't mention it in the
ChangeLog.
Everything related to the development of Bison is on Savannah:
http://savannah.gnu.org/projects/bison/
* Administrivia
** If you incorporate a change from somebody on the net:
@@ -21,9 +26,18 @@ The correct response to most actual bugs is to write a new test case
which demonstrates the bug. Then fix the bug, re-run the test suite,
and check everything in.
* Hacking
** Visible changes
Which include serious bug fixes, must be mentioned in NEWS.
** Translations
Only user visible strings are to be translated: error messages, bits
of the .output file etc. This excludes impossible error messages
(comparable to assert/abort), and all the --trace output which is
meant for the maintainers only.
* Test suite
@@ -38,11 +52,10 @@ release:
that 1. Bison compiles cleanly, 2. the parsers it produces compile
cleanly too.
- Change tests/bison to run `valgrind -q bison' to run Bison under
Valgrind.
- Run the test suite with `./testsuite PREPARSER='valgrind -q' to make
sure the parser behave properly.
- run `make maintainer-check' which:
- runs `valgrind -q bison' to run Bison under Valgrind.
- runs the parsers under Valdrind.
- runs the test suite with G++ as C compiler...
- Change tests/atlocal/CFLAGS to add your preferred options. For
instance, `-traditional' to check that the parsers are K&R. Note
@@ -50,8 +63,6 @@ release:
but currently is actually GNU C, nor for lalr1.cc, which anyway is
not exercised yet in the test suite.
- Change tests/atlocal/CC to use a C++ compiler.
* Release Procedure
+4 -3
View File
@@ -1,3 +1,4 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
## Copyright (C) 2001, 2002 Free Software Foundation, Inc.
## This program is free software; you can redistribute it and/or modify
@@ -15,15 +16,15 @@
## 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.6 check-news readme-alpha dist-bzip2
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = config po lib data src doc m4 tests
EXTRA_DIST = REFERENCES OChangeLog Makefile.maint GNUmakefile
.PHONY: maintainer-check
maintainer-check:
cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
## ---------------------------- ##
## Customizing Makefile.maint. ##
+14 -22
View File
@@ -251,19 +251,15 @@ my-distcheck: writable-files po-check
echo "$(distdir).tar.gz is ready for distribution"; \
echo "========================"
# This must be the same name on both hosts.
# Make it a symlink that points to the right place.
real_dir = fetish-ftp
url_dir_list = $(foreach x,$(hosts),ftp://$($(x)_host)/$($(x)_url_dir))
tgz-md5 = $(shell md5sum < $(my_distdir).tar.gz|sed 's/ -//')
tgz-sha1 = $(shell sha1sum < $(my_distdir).tar.gz|sed 's/ -//')
bz2-md5 = $(shell md5sum < $(my_distdir).tar.bz2|sed 's/ -//')
bz2-sha1 = $(shell sha1sum < $(my_distdir).tar.bz2|sed 's/ -//')
tgz-size = $(shell du --human $(my_distdir).tar.gz|sed 's/\([Mk]\).*/ \1B/')
bz2-size = $(shell du --human $(my_distdir).tar.bz2|sed 's/\([Mk]\).*/ \1B/')
xd-size = $(shell du --human $(xd-delta)|sed 's/\([Mk]\).*/ \1B/')
xdelta-md5 = $(shell md5sum < $(xd-delta)|sed 's/ -//')
xdelta-sha1 = $(shell sha1sum < $(xd-delta)|sed 's/ -//')
tgz-size = $(shell du --human $(my_distdir).tar.gz|sed 's/\([MkK]\).*/ \1B/')
bz2-size = $(shell du --human $(my_distdir).tar.bz2|sed 's/\([MkK]\).*/ \1B/')
xd-size = $(shell du --human $(xd-delta)|sed 's/\([MkK]\).*/ \1B/')
rel-check:
tarz=/tmp/rel-check-tarz-$$$$; \
@@ -277,12 +273,8 @@ rel-check:
prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
GZIP = gzip
BZIP2 = bzip2
$(my_distdir).tar.bz2: $(my_distdir).tar.gz
$(GZIP) -dc $< > $(my_distdir).tar
rm -f $@
$(BZIP2) -9 $(my_distdir).tar
news-r1 = /^[^ ].*$(THIS_VERSION_REGEXP)[]:]/
news-r2 = /^[^ ].*$(PREV_VERSION_REGEXP)[]:]/
rel-files = $(xd-delta) $(distdir).tar.bz2 $(distdir).tar.gz
announcement: NEWS ChangeLog $(rel-files)
@@ -302,15 +294,17 @@ announcement: NEWS ChangeLog $(rel-files)
echo " $$url/$(xd-delta) ($(xd-size))"; \
done; \
echo; \
echo "Here are the MD5 and SHA1 signatures for the compressed tar files:"; \
echo "Here are the MD5 and SHA1 signatures:"; \
echo; \
echo "$(tgz-md5) $(my_distdir).tar.gz"; \
echo "$(bz2-md5) $(my_distdir).tar.bz2"; \
echo "$(xdelta-md5) $(xd-delta)"; \
echo "$(tgz-sha1) $(my_distdir).tar.gz"; \
echo "$(bz2-sha1) $(my_distdir).tar.bz2"; \
echo "$(xdelta-sha1) $(xd-delta)"; \
echo; \
echo NEWS:; \
sed -n "/$(THIS_VERSION_REGEXP)[]:]/,/$(PREV_VERSION_REGEXP)[]:]/p" NEWS \
sed -n "$(news-r1),$(news-r2)p" NEWS \
| grep -v '^\['; \
echo; \
echo ChangeLog entries:; \
@@ -321,12 +315,10 @@ announcement: NEWS ChangeLog $(rel-files)
-e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
)
define emit-rsync-commands
define emit-upload-commands
echo =====================================
echo =====================================
echo 'for host in $(a_host) $(b_host); do \'
echo ' rsync -e ssh --pro -av $(xd-delta) $(my_distdir).tar.bz2 \'
echo ' $(my_distdir).tar.gz $$host:$(real_dir); done'
echo upload $(PACKAGE) $(PREV_VERSION) $(VERSION)
echo '# send the /tmp/announcement e-mail'
echo =====================================
echo =====================================
@@ -343,4 +335,4 @@ alpha:
chmod a-w $(rel-files)
echo $(VERSION) > $(prev_version_file)
$(CVS) ci -m. $(prev_version_file)
@$(emit-rsync-commands)
@$(emit-upload-commands)
+42 -9
View File
@@ -1,7 +1,38 @@
Bison News
----------
Changes in version 1.49b, 2002-08-12:
Changes in version 1.75:
* Bison should now work on 64-bit hosts.
* Indonesian translation thanks to Tedi Heriyanto.
* GLR parsers
Fix spurious parse errors.
* Pure parsers
Some people redefine yyerror to steal yyparse' private variables.
Reenable this trick until an official feature replaces it.
* Type Clashes
In agreement with POSIX and with other Yaccs, leaving a default
action is valid when $$ is untyped, and $1 typed:
untyped: ... typed;
but the converse remains an error:
typed: ... untyped;
* Values of mid-rule actions
The following code:
foo: { ... } { $$ = $1; } ...
was incorrectly rejected: $1 is defined in the second mid-rule
action, and is equal to the $$ of the first mid-rule action.
Changes in version 1.50, 2002-10-04:
* GLR parsing
The declaration
@@ -11,27 +42,30 @@ Changes in version 1.49b, 2002-08-12:
%dprec and %merge on grammar rules allow parse-time resolution of
ambiguities. Contributed by Paul Hilfinger.
Unfortunately Bison 1.50 does not work properly on 64-bit hosts
like the Alpha, so please stick to 32-bit hosts for now.
* Output Directory
When not in Yacc compatibility mode, when the output file was not
specified, runnning `bison foo/bar.y' created `foo/bar.c'. It
specified, running `bison foo/bar.y' created `foo/bar.c'. It
now creates `bar.c'.
* Undefined token
The undefined token was systematically mapped to 2 which prevented
the use of 2 from the user. This is no longer the case.
the use of 2 by the user. This is no longer the case.
* Unknown token numbers
If yylex returned a code out of range, yyparse could die. This is
If yylex returned an out of range value, yyparse could die. This is
no longer the case.
* Error token
According to POSIX, the error token should be numbered as 256.
According to POSIX, the error token must be 256.
Bison extends this requirement by making it a preference: *if* the
user specified that one of her tokens is numbered 256, then error
will be mapped onto another number.
* Verbose error messages
They no longer report `..., expecting error or...' for state where
They no longer report `..., expecting error or...' for states where
error recovery is possible.
* End token
@@ -107,12 +141,12 @@ Changes in version 1.49b, 2002-08-12:
Croatian, thanks to Denis Lackovic.
* Incorrect token definitions
When fed with `%token 'a' "A"', Bison used to output `#define 'a' 65'.
When given `%token 'a' "A"', Bison used to output `#define 'a' 65'.
* Token definitions as enums
Tokens are output both as the traditional #define's, and, provided
the compiler supports ANSI C or is a C++ compiler, as enums.
This helps debuggers producing symbols instead of values.
This lets debuggers display names instead of integers.
* Reports
In addition to --verbose, bison supports --report=THINGS, which
@@ -152,7 +186,6 @@ Changes in version 1.35, 2002-03-25:
This kludge also addresses some C++ problems when the stack was
extended.
Changes in version 1.34, 2002-03-12:
+6 -9
View File
@@ -9,14 +9,11 @@ Only the sources are installed in the CVS repository (to ease the
maintenance, merges etc.), therefore you will have to the maintainer
tools we depend upon:
- Automake 1.6 or 1.6.1
- Automake 1.7
- Autoconf 2.53a or better
ftp://alpha.gnu.org/gnu/autoconf/autoconf-2.53a.tar.gz (992 kB)
ftp://alpha.gnu.org/gnu/autoconf/autoconf-2.53a.tar.bz2 (756 kB)
- Autoconf 2.54
- Gettext 0.11.3 pre 2 or better
http://www.lrde.epita.fr/~akim/download/gettext-0.11.3-pre2.tar.gz
- Gettext 0.11.5
Only building the initial full source tree will be a bit painful,
later, a plain `cvs update -P & make' should be sufficient.
@@ -51,12 +48,12 @@ Enjoy!
Unfortunately the current Gettext still does not include all the
needed tools so that the bootstrapping always perform successfully.
If you experiment problems, I suggest the following:
If you experience problems, I suggest the following:
1. Do a regular CVS checkout
2. Fetch a recent tarball.
http://www.lrde.epita.fr/~akim/download/bison-1.49b.tar.gz
2. Fetch a recent tarball in:
http://www.lrde.epita.fr/~akim/download/
3. Extract it
+58 -53
View File
@@ -1,59 +1,64 @@
Bison was originally written by Robert Corbett. It would not be what
it is today without the invaluable help of these people:
Airy Andre [email protected]
Akim Demaille [email protected]
Albert Chin-A-Young [email protected]
Alexander Belopolsky [email protected]
Andreas Schwab [email protected]
Arnold Robbins [email protected]
Benoit Perrot [email protected]
Bruce Lilly [email protected]
Cris Bailiff c.bailiff+bison@awayweb.com
Cris van Pelt [email protected]
Daniel Hagerty [email protected]
David J. MacKenzie [email protected]
Dick Streefland [email protected]
Enrico Scholz [email protected]
Evgeny Stambulchik [email protected]l
Fabrice Bauzac [email protected]
Florian Krohm [email protected]
H. Merijn Brand [email protected]
Hans Aberg [email protected]
Jesse Thilo [email protected]
Jim Meyering [email protected]
Juan Manuel Guerrero [email protected]
Kees Zeelenberg [email protected]
Keith Browne [email protected]
Laurent Mascherpa [email protected]
Magnus Fromreide [email protected]
Marc Autret [email protected]
Matt Kraai [email protected]
Michael Hayes [email protected]
Mike Castle [email protected]
Neil Booth [email protected]
Nelson H. F. Beebe [email protected].edu
Nicolas Burrus [email protected]
Nicolas Tisserand [email protected]
Noah Friedman [email protected]
Pascal Bart [email protected]
Paul Eggert [email protected]
Paul Hilfinger [email protected]
Per Allansson [email protected]
Peter Hámorský [email protected]
Piotr Gackiewicz [email protected]
R Blake blakers@mac.com
Raja R Harinath [email protected]
Richard Stallman [email protected]
Robert Anisko [email protected]
Shura [email protected]
Tim Josling [email protected]
Tom Lane [email protected]
Tom Tromey [email protected]
Wayne Green [email protected]
Wolfram Wagner [email protected]
Wwp [email protected]
Zack Weinberg [email protected]
Airy Andre [email protected]
Akim Demaille [email protected]
Albert Chin-A-Young [email protected]
Alexander Belopolsky [email protected]
Andreas Schwab [email protected]
Arnold Robbins [email protected]
Art Haas [email protected]
Benoit Perrot [email protected]
Bruce Lilly blilly@erols.com
Charles-Henri de Boysson [email protected]
Cris Bailiff [email protected]
Cris van Pelt [email protected]
Daniel Hagerty [email protected]
David J. MacKenzie [email protected]
Dick Streefland [email protected]l
Enrico Scholz [email protected]
Evgeny Stambulchik [email protected]
Fabrice Bauzac [email protected]
Florian Krohm [email protected]
H. Merijn Brand [email protected]
Hans Aberg [email protected]
Jan Nieuwenhuizen [email protected]
Jesse Thilo [email protected]
Jim Meyering [email protected]
Juan Manuel Guerrero [email protected]
Kees Zeelenberg [email protected]
Keith Browne [email protected]
Laurent Mascherpa [email protected]
Magnus Fromreide [email protected]
Marc Autret [email protected]
Martin Mokrejs [email protected]
Matt Kraai [email protected].edu
Matt Rosing [email protected]
Michael Hayes [email protected]
Mike Castle [email protected]
Neil Booth [email protected]
Nelson H. F. Beebe [email protected]
Nicolas Burrus [email protected]
Nicolas Tisserand [email protected]
Noah Friedman [email protected]
Pascal Bart [email protected]
Paul Eggert eggert@twinsun.com
Paul Hilfinger [email protected]
Per Allansson [email protected]
Peter Hámorský [email protected]
Piotr Gackiewicz [email protected]
R Blake [email protected]
Raja R Harinath [email protected]
Richard Stallman [email protected]
Robert Anisko [email protected]
Shura [email protected]
Tim Josling [email protected]
Tom Lane [email protected]
Tom Tromey [email protected]
Wayne Green [email protected]
Wolfram Wagner [email protected]
Wwp [email protected]
Zack Weinberg [email protected]
Many people are not named here because we lost track of them. We
thank them! Please, help us keeping this list up to date.
+32 -4
View File
@@ -1,5 +1,10 @@
-*- outline -*-
* Header guards
From Franc,ois: should we keep the directory part in the CPP guard?
* URGENT: Documenting C++ output
Write a first documentation for C++ output.
@@ -28,6 +33,10 @@ check if %union is used, since the user is free to $<foo>n on her
union, doesn't she?
* GLR & C++
Currently, the GLR parser cannot compile with a C++ compiler.
* Report
** GLR
@@ -53,7 +62,7 @@ a sample text exhibiting the (LALR) ambiguity. See the paper from
DeRemer and Penello: they already provide the algorithm.
* Extentions
* Extensions
** yyerror, yysymprint interface
It should be improved, in particular when using Bison features such as
@@ -108,6 +117,25 @@ Are there any Texinfo standards for bibliography?
* Java, Fortran, etc.
** Java
There are a couple of proposed outputs:
- BYACC/J
which is based on Byacc.
<http://troi.lincom-asg.com/~rjamison/byacc/>
- Bison Java
which is based on Bison.
<http://www.goice.co.jp/member/mo/hack-progs/bison-java.html>
Sébastien Serrurier ([email protected]) is working on this: he is
expected to contact the authors, design the output, and implement it
into Bison.
* Coding system independence
Paul notes:
@@ -133,7 +161,7 @@ Show reductions. []
** %pure-parser []
** %token-table []
** Options which could use parse_dquoted_param ().
Maybe transfered in lex.c.
Maybe transferred in lex.c.
*** %skeleton [ok]
*** %output []
*** %file-prefix []
@@ -150,7 +178,7 @@ Find the best graph parameters. []
* doc/bison.texinfo
** Update
informations about ERROR_VERBOSE. []
** Add explainations about
** Add explanations about
skeleton muscles. []
%skeleton. []
@@ -171,7 +199,7 @@ First, analyze the differences between byacc and btyacc (I'm referring
to the executables). Find where the conflicts are preserved.
** Compare with the GLR tables
See how isomorphic the way BTYacc and the way the GLR adjustements in
See how isomorphic the way BTYacc and the way the GLR adjustments in
Bison are compatible. *As much as possible* one should try to use the
same implementation in the Bison executables. I insist: it should be
very feasible to use the very same conflict tables.
+1 -1
View File
@@ -1 +1 @@
1.49a
1.49c
+43 -39
View File
@@ -18,36 +18,21 @@
# 02111-1307 USA
# We need a recent Autoconf to run a recent Autotest.
AC_PREREQ(2.53)
AC_PREREQ(2.54)
AC_INIT([GNU Bison], [1.49b], [[email protected]])
AC_INIT([GNU Bison], [1.75], [[email protected]])
AC_CONFIG_AUX_DIR(config)
AM_INIT_AUTOMAKE
AM_CONFIG_HEADER(config.h:config.hin)
AM_INIT_AUTOMAKE([1.7 check-news readme-alpha dist-bzip2])
AC_CONFIG_HEADERS([config.h:config.hin])
# Initialize the test suite.
AC_CONFIG_TESTDIR(tests)
AC_CONFIG_FILES([tests/Makefile tests/atlocal])
AC_CONFIG_FILES([tests/bison], [chmod +x tests/bison])
# Needed by tests/atlocal.in.
AC_SUBST([GCC])
# Checks for programs.
# Checks for the compiler.
AC_PROG_CC
AM_PROG_LEX
AC_PROG_YACC
AC_MINIX
# Remove with Automake 1.8.
AC_ISC_POSIX
AC_GNU_SOURCE
AC_MINIX
AM_PROG_CC_STDC
AC_PROG_RANLIB
AM_MISSING_PROG([AUTOM4TE], [autom4te])
BISON_PROG_GNU_M4
if test x"$ac_cv_prog_gnu_m4" != xyes; then
AC_MSG_ERROR([GNU M4 1.4 is required])
fi
AC_DEFINE_UNQUOTED([M4], ["$M4"], [Define to the GNU M4 executable name.])
AC_ARG_ENABLE(gcc-warnings,
[ --enable-gcc-warnings turn on lots of GCC warnings (not recommended)],
[case "${enableval}" in
@@ -73,8 +58,15 @@ if test "${enableval}" = yes; then
BISON_WARNING(-Wwrite-strings)
fi
# Checks for libraries.
AC_DEFINE([_GNU_SOURCE],1,[Define to 1 for GNU C library extensions.])
# Checks for programs.
AM_PROG_LEX
AC_PROG_YACC
AC_PROG_RANLIB
BISON_PROG_GNU_M4
if test x"$ac_cv_prog_gnu_m4" != xyes; then
AC_MSG_ERROR([GNU M4 1.4 is required])
fi
AC_DEFINE_UNQUOTED([M4], ["$M4"], [Define to the GNU M4 executable name.])
# Checks for header files.
AC_HEADER_STDC
@@ -92,13 +84,17 @@ AC_FUNC_ERROR_AT_LINE
AC_FUNC_STRNLEN
UTILS_FUNC_MKSTEMP
AC_CHECK_FUNCS(setlocale)
AC_CHECK_DECLS([getenv, getopt, free, stpcpy, strchr, strspn, strnlen,
AC_CHECK_DECLS([free, getenv, getopt,
stpcpy, strchr, strspn, strnlen,
malloc, memchr, memrchr])
AC_REPLACE_FUNCS(stpcpy strchr strspn memchr memrchr)
jm_FUNC_MALLOC
jm_FUNC_REALLOC
AC_REPLACE_FUNCS(memchr memrchr \
strchr stpcpy strrchr strspn strtol)
AC_FUNC_MALLOC
AC_FUNC_REALLOC
jm_PREREQ_QUOTEARG
jm_FUNC_ARGMATCH
jm_PREREQ_ERROR
jm_PREREQ_TEMPNAME
AM_WITH_DMALLOC
BISON_PREREQ_TIMEVAR
@@ -106,14 +102,22 @@ BISON_PREREQ_TIMEVAR
AM_GNU_GETTEXT(external, need-ngettext)
AM_GNU_GETTEXT_VERSION(0.11.5)
# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
LIB@&t@OBJS=`echo $LIB@&t@OBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
AC_SUBST(LIB@&t@OBJS)
# Initialize the test suite.
AC_CONFIG_TESTDIR(tests)
AC_CONFIG_FILES([tests/Makefile tests/atlocal])
AC_CONFIG_FILES([tests/bison], [chmod +x tests/bison])
AC_CHECK_PROGS([VALGRIND], [valgrind])
AC_CHECK_PROGS([GXX], [g++])
AM_MISSING_PROG([AUTOM4TE], [autom4te])
# Needed by tests/atlocal.in.
AC_SUBST([GCC])
O0CFLAGS=`echo $CFLAGS | sed 's/-O[0-9] *//'`
AC_SUBST([O0CFLAGS])
AC_OUTPUT([Makefile
config/Makefile
po/Makefile.in
data/Makefile
lib/Makefile src/Makefile doc/Makefile
m4/Makefile])
AC_CONFIG_FILES([Makefile
config/Makefile
po/Makefile.in
data/Makefile
lib/Makefile src/Makefile doc/Makefile
m4/Makefile])
AC_OUTPUT
+4 -12
View File
@@ -44,12 +44,7 @@ m4_define([b4_copyright],
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. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */])
Boston, MA 02111-1307, USA. */])
## ------------ ##
@@ -70,7 +65,7 @@ m4_define([b4_ints_in],
# MIN to MAX (included).
m4_define([b4_int_type],
[m4_if(b4_ints_in($@, [0], [255]), [1], [unsigned char],
b4_ints_in($@, [-128], [128]), [1], [signed char],
b4_ints_in($@, [-128], [127]), [1], [yysigned_char],
b4_ints_in($@, [0], [65535]), [1], [unsigned short],
b4_ints_in($@, [-32768], [32767]), [1], [short],
@@ -113,7 +108,7 @@ m4_define([b4_token_defines],
[m4_if([$@], [[]], [],
[/* Tokens. */
#ifndef YYTOKENTYPE
# if defined (__STDC__) || defined (__cplusplus)
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
@@ -121,10 +116,7 @@ m4_map_sep([ b4_token_enum], [,
],
[$@])
};
# endif
/* POSIX requires `int' for tokens in interfaces. */
# define YYTOKENTYPE int
#endif /* !YYTOKENTYPE */
#endif
m4_map([b4_token_define], [$@])
])
])
+94 -61
View File
@@ -136,10 +136,10 @@ b4_copyright([Skeleton parser for GLR parsing with Bison], [2002])
#define yynerrs b4_prefix[]nerrs
b4_location_if([#define yylloc b4_prefix[]lloc])])
/* Copy the first part of user declarations. */
b4_pre_prologue
b4_token_defines(b4_tokens)
b4_token_defines(b4_tokens)[
/* Copy the first part of user declarations. */
b4_pre_prologue[
/* Enabling traces. */
#ifndef YYDEBUG
@@ -169,10 +169,10 @@ typedef union b4_stype yystype;
typedef struct yyltype
{
]b4_location_if([
int yyfirst_line;
int yyfirst_column;
int yylast_line;
int yylast_column;])[
int first_line;
int first_column;
int last_line;
int last_column;])[
} yyltype;
# define YYLTYPE ]b4_ltype[
# define YYLTYPE_IS_TRIVIAL 1
@@ -198,6 +198,12 @@ static YYLTYPE yyloc_default;
# define yyfalse 0
#endif
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
typedef short yysigned_char;
#endif
/*-----------------.
| GCC extensions. |
`-----------------*/
@@ -220,7 +226,6 @@ static YYLTYPE yyloc_default;
/* YYFINAL -- State number of the termination state. */
#define YYFINAL ]b4_final_state_number[
#define YYFLAG ]b4_flag[
#define YYLAST ]b4_last[
/* YYNTOKENS -- Number of terminals. */
@@ -333,24 +338,25 @@ static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] =
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says. */
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, parse error. */
#define YYTABLE_NINF ]b4_table_ninf[
static const ]b4_int_type_for([b4_table])[ yytable[] =
{
]b4_table[
};
/* YYCONFLP[YYPACT[STATE-NUM]] -- pointer into yyconfl of start of list
of conflicting reductions corresponding to action entry for state
STATE-NUM in yytable. 0 means no conflicts. The list in yyconfl
is terminated by a rule number of 0. */
/* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
list of conflicting reductions corresponding to action entry for
state STATE-NUM in yytable. 0 means no conflicts. The list in
yyconfl is terminated by a rule number of 0. */
static const ]b4_int_type_for([b4_conflict_list_heads])[ yyconflp[] =
{
]b4_conflict_list_heads[
};
/* YYCONFL[I] -- lists of conflicting rule numbers, each terminated
by 0, pointed into by YYCONFLP. */
/* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
0, pointed into by YYCONFLP. */
]dnl Do not use b4_int_type_for here, since there are places where
dnl pointers onto yyconfl are taken, which type is "short *".
dnl We probably ought to introduce a type for confl.
@@ -396,10 +402,10 @@ int yyparse (void);
#ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
yyCurrent.yyfirst_line = YYRHSLOC(yyRhs,1).yyfirst_line; \
yyCurrent.yyfirst_column = YYRHSLOC(yyRhs,1).yyfirst_column; \
yyCurrent.yylast_line = YYRHSLOC(yyRhs,YYN).yylast_line; \
yyCurrent.yylast_column = YYRHSLOC(yyRhs,YYN).yylast_column;
yyCurrent.first_line = YYRHSLOC(yyRhs,1).first_line; \
yyCurrent.first_column = YYRHSLOC(yyRhs,1).first_column; \
yyCurrent.last_line = YYRHSLOC(yyRhs,YYN).last_line; \
yyCurrent.last_column = YYRHSLOC(yyRhs,YYN).last_column;
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
@@ -692,7 +698,7 @@ yydefaultAction (yyStateNum yystate)
return yydefact[yystate];
}
/** Set *ACTION to the action to take in STATE on seeing TOKEN.
/** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
* Result R means
* R < 0: Reduce on rule -R.
* R = 0: Error.
@@ -705,16 +711,21 @@ yygetLRActions (yyStateNum yystate, int yytoken,
int* yyaction, const short** yyconflicts)
{
int yyindex = yypact[yystate] + yytoken;
if (yyindex < 0 || yyindex > YYLAST || yycheck[yyindex] != yytoken)
if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
{
*yyaction = -yydefact[yystate];
*yyconflicts = yyconfl;
}
else
else if (yytable[yyindex] != YYTABLE_NINF)
{
*yyaction = yytable[yyindex];
*yyconflicts = yyconfl + yyconflp[yyindex];
}
else
{
*yyaction = 0;
*yyconflicts = yyconfl + yyconflp[yyindex];
}
}
static inline yyStateNum
@@ -722,7 +733,7 @@ yyLRgotoState (yyStateNum yystate, yySymbol yylhs)
{
int yyr;
yyr = yypgoto[yylhs - YYNTOKENS] + yystate;
if (yyr >= 0 && yyr <= YYLAST && yycheck[yyr] == yystate)
if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
return yytable[yyr];
else
return yydefgoto[yylhs - YYNTOKENS];
@@ -737,7 +748,7 @@ yyisShiftAction (int yyaction)
static inline bool
yyisErrorAction (int yyaction)
{
return yyaction == 0 || yyaction == YYPACT_NINF;
return yyaction == 0;
}
/* GLRStates */
@@ -752,14 +763,14 @@ yyhasResolvedValue (yyGLRState* yystate)
static void
yyaddDeferredAction (yyGLRStack* yystack, yyGLRState* yystate,
yyGLRState* yyrhs, yyRuleNum yyrule)
yyGLRState* rhs, yyRuleNum yyrule)
{
yySemanticOption* yynewItem;
yynewItem = &yystack->yynextFree->yyoption;
yystack->yyspaceLeft -= 1;
yystack->yynextFree += 1;
yynewItem->yyisState = yyfalse;
yynewItem->yystate = yyrhs;
yynewItem->yystate = rhs;
yynewItem->yyrule = yyrule;
yynewItem->yynext = yystate->yysemantics.yyfirstVal;
yystate->yysemantics.yyfirstVal = yynewItem;
@@ -962,7 +973,7 @@ yyglrShift (yyGLRStack* yystack, int yyk, yyStateNum yylrState, size_t yyposn,
* the (unresolved) semantic value of RHS under the action for RULE. */
static inline void
yyglrShiftDefer (yyGLRStack* yystack, int yyk, yyStateNum yylrState,
size_t yyposn, yyGLRState* yyrhs, yyRuleNum yyrule)
size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule)
{
yyGLRStackItem* yynewItem;
@@ -976,7 +987,7 @@ yyglrShiftDefer (yyGLRStack* yystack, int yyk, yyStateNum yylrState,
yystack->yytops.yystates[yyk] = &yynewItem->yystate;
yystack->yynextFree += 1;
yystack->yyspaceLeft -= 1;
yyaddDeferredAction (yystack, &yynewItem->yystate, yyrhs, yyrule);
yyaddDeferredAction (yystack, &yynewItem->yystate, rhs, yyrule);
}
/** Pop the symbols consumed by reduction #RULE from the top of stack
@@ -994,7 +1005,7 @@ yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule,
if (yystack->yysplitPoint == NULL)
{
/* Standard special case: single stack. */
yyGLRStackItem* yyrhs = (yyGLRStackItem*) yystack->yytops.yystates[yyk];
yyGLRStackItem* rhs = (yyGLRStackItem*) yystack->yytops.yystates[yyk];
assert (yyk == 0);
yystack->yynextFree -= yynrhs;
yystack->yyspaceLeft += yynrhs;
@@ -1006,10 +1017,10 @@ yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule,
}
else
{
*yyvalp = yyrhs[1-yynrhs].yystate.yysemantics.yysval;
*yylocp = yyrhs[1-yynrhs].yystate.yyloc;
*yyvalp = rhs[1-yynrhs].yystate.yysemantics.yysval;
*yylocp = rhs[1-yynrhs].yystate.yyloc;
}
return yyuserAction (yyrule, yynrhs, yyrhs, yyvalp, yylocp, yystack);
return yyuserAction (yyrule, yynrhs, rhs, yyvalp, yylocp, yystack);
}
else
{
@@ -1063,13 +1074,25 @@ yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule,
YYSTYPE yysval;
YYLTYPE yyloc;
#if YYDEBUG
if (yydebug)
{
int yyi;
YYDPRINTF ((stderr, "Reducing stack %d by rule %d (line %d),",
yyk, yyrule - 1, yyrline[yyrule]));
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; yyrhs[yyi] >= 0; yyi++)
YYFPRINTF (stderr, "%s ", yytokenName (yyrhs[yyi]));
YYFPRINTF (stderr, " -> %s\n", yytokenName (yyr1[yyrule]));
}
#endif
YYCHK (yydoAction (yystack, yyk, yyrule, &yysval, &yyloc));
yyglrShift (yystack, yyk,
yyLRgotoState (yystack->yytops.yystates[yyk]->yylrState,
yylhsNonterm (yyrule)),
yyposn, yysval, &yyloc);
YYDPRINTF ((stderr, "Reduced stack %d by rule #%d. Now in state %d.\n",
yyk, yyrule-1, yystack->yytops.yystates[yyk]->yylrState));
YYDPRINTF ((stderr, "Stack %d entering state %d\n",
yyk, yystack->yytops.yystates[yyk]->yylrState));
}
else
{
@@ -1256,7 +1279,16 @@ yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystack,
}
#if YYDEBUG
static yyGLRState YYLEFTMOST_STATE = { 0, NULL, -1, 0, { NULL } };
static yyGLRState YYLEFTMOST_STATE =
{
0, 0, -1, NULL, 0, { NULL },
/* yyloc. */
{
#if YYLTYPE_IS_TRIVIAL
]b4_location_if([ 0, 0, 0, 0])[
#endif
}
};
static void yyreportTree (yySemanticOption* yyx, int yyindent)
{
@@ -1448,9 +1480,11 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk,
{
if (*yytokenp == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
yychar = YYLEX;
*yytokenp = YYTRANSLATE(yychar);
YYDPRINTF ((stderr, "Read token %s\n", yytokenName (*yytokenp)));
YYDPRINTF ((stderr, "Next token is %s\n",
yytokenName (*yytokenp)));
}
yygetLRActions (yystate, *yytokenp, &yyaction, &yyconflicts);
@@ -1467,7 +1501,7 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk,
if (yyisShiftAction (yyaction))
{
YYDPRINTF ((stderr, "Shifted token %s on stack %d, ",
YYDPRINTF ((stderr, "Shifting token %s on stack %d, ",
yytokenName (*yytokenp), yyk));
yyglrShift (yystack, yyk, yyaction, yyposn+1, *yylvalp, yyllocp);
YYDPRINTF ((stderr, "which is now in state #%d\n",
@@ -1524,7 +1558,7 @@ yyreportParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp)
{
yyprefix = ", expecting ";
for (yyx = yyn < 0 ? -yyn : 0; yyx < yytname_size; yyx += 1)
if (yycheck[yyx + yyn] == yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
yyp += sprintf (yyp, "%s%s", yyprefix, yytokenName (yyx));
yyprefix = " or ";
@@ -1540,13 +1574,9 @@ yyreportParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp)
}
}
/* Recover from a syntax error on STACK, assuming that TOKENP,
/* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
YYLVALP, and YYLLOCP point to the syntactic category, semantic
value, and location of the lookahead.
NOTE: This uses the panic-mode recovery algorithm described in the
Bison documentation, which differs from what is in bison.simple.
Specifically, this routine performs no reductions before shifting
the error token. */
value, and location of the lookahead. */
static void
yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp)
{
@@ -1557,34 +1587,34 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp)
if (yystack->yyerrState == 0)
yystack->yyerrState = 3;
else if (yystack->yyerrState == 3)
{
/* We just shifted the error token and (perhaps) took some
reductions. Skip tokens until we can proceed. */
do {
/* We just shifted the error token and (perhaps) took some
reductions. Skip tokens until we can proceed. */
while (yytrue)
{
if (*yytokenp == YYEOF)
yyFail (yystack, NULL);
if (*yytokenp != YYEMPTY)
YYDPRINTF ((stderr, "Discarding token %s\n",
yytokenName (*yytokenp)));
YYDPRINTF ((stderr, "Reading a token: "));
yychar = YYLEX;
*yytokenp = YYTRANSLATE (yychar);
YYDPRINTF ((stderr, "Read token %s\n", yytokenName (*yytokenp)));
YYDPRINTF ((stderr, "Next token is %s\n", yytokenName (*yytokenp)));
yyj = yypact[yystack->yytops.yystates[0]->yylrState];
if (yyj == YYPACT_NINF)
/* Something's not right; we shouldn't be here */
/* Something's not right; we shouldn't be here. */
yyFail (yystack, NULL);
yyj += *yytokenp;
if (yyj < 0 || yyj > YYLAST || yycheck[yyj] != *yytokenp)
if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != *yytokenp)
{
if (yydefact[yystack->yytops.yystates[0]->yylrState] != 0)
return;
}
else if (yytable[yyj] != 0 && yytable[yyj] != YYTABLE_NINF)
return;
} while (yytrue);
}
}
/* Reduce to one stack */
/* Reduce to one stack. */
for (yyk = 0; yyk < yystack->yytops.yysize; yyk += 1)
if (yystack->yytops.yystates[yyk] != NULL)
break;
@@ -1650,6 +1680,8 @@ yyparse (YYPARSE_PARAM_ARG)
yyinitGLRStack (&yystack, YYINITDEPTH);
yystack.yytokenp = &yytoken;
YYDPRINTF ((stderr, "Starting parse\n"));
if (setjmp (yystack.yyexception_buffer) != 0)
goto yyDone;
@@ -1687,9 +1719,10 @@ yyparse (YYPARSE_PARAM_ARG)
{
if (yytoken == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
yychar = YYLEX;
yytoken = YYTRANSLATE (yychar);
YYDPRINTF ((stderr, "Read token %s\n",
YYDPRINTF ((stderr, "Next token is %s\n",
yytokenName (yytoken)));
}
yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
@@ -1697,7 +1730,7 @@ yyparse (YYPARSE_PARAM_ARG)
break;
if (yyisShiftAction (yyaction))
{
YYDPRINTF ((stderr, "Shifted token %s. ",
YYDPRINTF ((stderr, "Shifting token %s, ",
yytokenName (yytoken)));
if (yytoken != YYEOF)
yytoken = YYEMPTY;
@@ -1705,7 +1738,7 @@ yyparse (YYPARSE_PARAM_ARG)
yyglrShift (&yystack, 0, yyaction, yyposn, yylval, yyllocp);
if (yystack.yyerrState > 0)
yystack.yyerrState -= 1;
YYDPRINTF ((stderr, "Now in state #%d\n",
YYDPRINTF ((stderr, "Entering state %d\n",
yystack.yytops.yystates[0]->yylrState));
}
else if (yyisErrorAction (yyaction))
@@ -1855,10 +1888,10 @@ b4_location_if(
[#ifndef YYLTYPE
typedef struct yyltype
{
int yyfirst_line;
int yyfirst_column;
int yylast_line;
int yylast_column;
int first_line;
int first_column;
int last_line;
int last_column;
} yyltype;
# define YYLTYPE yyltype
#endif
+6 -18
View File
@@ -33,6 +33,7 @@ m4_define([b4_lhs_value],
m4_define([b4_rhs_value],
[semantic_stack_@<:@m4_eval([$1 - $2])@:>@m4_ifval([$3], [.$3])])
m4_define_default([b4_ltype], [Location])
# b4_lhs_location()
# -----------------
@@ -103,15 +104,14 @@ b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
/* Using locations. */
#define YYLSP_NEEDED b4_locations_flag
b4_token_defines(b4_tokens)
/* Copy the first part of user declarations. */
b4_pre_prologue
/* Line __line__ of __file__. */
#line __oline__ "__ofile__"
/* Tokens. */
b4_token_defines(b4_tokens)
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG b4_debug
@@ -143,18 +143,6 @@ b4_post_prologue
Current.last_column = Rhs[[N]].last_column;
#endif
m4_if(b4_locations_flag, [0], [],
[#ifndef YYLTYPE
typedef struct yyltype
{
int first_line;
int first_column;
int last_line;
int last_column;
} yyltype;
# define YYLTYPE yyltype
#endif])
namespace yy
{
class b4_name;
@@ -293,7 +281,7 @@ namespace yy
}
#endif /* not b4_header_guard */
dnl
#output "b4_output_prefix[]b4_output_infix[].cc"
b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
[2002])
@@ -772,7 +760,7 @@ const unsigned yy::b4_name::user_token_number_max_ = b4_user_token_number_max;
const yy::b4_name::TokenNumberType yy::b4_name::undef_token_ = b4_undef_token_number;
b4_epilogue
dnl
#output "stack.hh"
b4_copyright([2002])
@@ -869,7 +857,7 @@ namespace yy
}
#endif // not BISON_STACK_HH
dnl
#output "location.hh"
b4_copyright([2002])
+75 -86
View File
@@ -130,6 +130,11 @@ m4_divert(0)dnl
b4_copyright([Skeleton parser for Yacc-like parsing with Bison],
[1984, 1989, 1990, 2000, 2001, 2002])
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
/* Written by Richard Stallman by simplifying the original so called
``semantic'' parser. */
@@ -161,11 +166,11 @@ m4_if(b4_prefix[], [yy], [],
#define yynerrs b4_prefix[]nerrs
b4_location_if([#define yylloc b4_prefix[]lloc])])
b4_token_defines(b4_tokens)
/* Copy the first part of user declarations. */
b4_pre_prologue
b4_token_defines(b4_tokens)
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG b4_debug
@@ -302,6 +307,12 @@ b4_location_if(
#endif
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
typedef short yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
#define YYFINAL b4_final_state_number
#define YYLAST b4_last
@@ -358,12 +369,14 @@ static const char *const yytname[[]] =
};
#endif
# ifdef YYPRINT
/* YYTOKNUM[[YYLEX-NUM]] -- Internal token number corresponding to
token YYLEX-NUM. */
static const b4_int_type_for([b4_toknum]) yytoknum[[]] =
{
b4_toknum
};
# endif
/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */
static const b4_int_type_for([b4_r1]) yyr1[[]] =
@@ -407,7 +420,8 @@ static const b4_int_type_for([b4_pgoto]) yypgoto[[]] =
/* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says. */
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, parse error. */
#define YYTABLE_NINF b4_table_ninf
static const b4_int_type_for([b4_table]) yytable[[]] =
{
@@ -641,74 +655,6 @@ m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
#endif /* YYDEBUG. */
/*----------------------------------------------------------.
| yyreport_parse_error -- report a parse error in YYSTATE. |
`----------------------------------------------------------*/
b4_c_function([yyreport_parse_error],
[static void],
[[int], [yystate]],
[[int], [yychar]],
[[YYSTYPE], [yyvalue]]b4_location_if([,
[[YYLTYPE], [yylloc]]]))
[{
#if YYERROR_VERBOSE
int yyn = yypact[yystate];
if (YYPACT_NINF < yyn && yyn < YYLAST)
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
char *yymsg;
int yyx, yycount;
yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
yysize += yystrlen (yytname[yyx]) + 15, yycount++;
yysize += yystrlen ("parse error, unexpected ") + 1;
yysize += yystrlen (yytname[yytype]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
yyp = yystpcpy (yyp, yytname[yytype]);
if (yycount < 5)
{
yycount = 0;
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *));
yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
const char *yyq = ! yycount ? ", expecting " : " or ";
yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
yycount++;
}
}
yyerror (yymsg);
YYSTACK_FREE (yymsg);
}
else
yyerror ("parse error; also virtual memory exhausted");
}
else
#endif /* YYERROR_VERBOSE */
yyerror ("parse error");
/* Pacify ``unused variable'' warnings. */
(void) yystate;
(void) yychar;
(void) yyvalue;
]b4_location_if([(void) yylloc;])[
}]
/*-----------------------------------------------.
| Release the memory associated to this symbol. |
`-----------------------------------------------*/
@@ -978,28 +924,19 @@ yybackup:
YYDPRINTF ((stderr, "\n"));
}
/* If the proper action on seeing token YYCHAR1 is to reduce or to
detect an error, take that action. */
yyn += yychar1;
if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
goto yydefault;
yyn = yytable[yyn];
/* yyn is what to do for this token type in this state.
Negative => reduce, -yyn is rule number.
Positive => shift, yyn is new state.
New state is final state => don't bother to shift,
just return success.
0, or most negative number => error. */
if (yyn < 0)
if (yyn <= 0)
{
if (yyn == YYTABLE_NINF)
if (yyn == 0 || yyn == YYTABLE_NINF)
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
else if (yyn == 0)
goto yyerrlab;
if (yyn == YYFINAL)
YYACCEPT;
@@ -1120,7 +1057,54 @@ yyerrlab:
if (!yyerrstatus)
{
++yynerrs;
yyreport_parse_error (yystate, yychar, yylval]b4_location_if([, yylloc])[);
#if YYERROR_VERBOSE
yyn = yypact[yystate];
if (YYPACT_NINF < yyn && yyn < YYLAST)
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
char *yymsg;
int yyx, yycount;
yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
yysize += yystrlen (yytname[yyx]) + 15, yycount++;
yysize += yystrlen ("parse error, unexpected ") + 1;
yysize += yystrlen (yytname[yytype]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
yyp = yystpcpy (yyp, yytname[yytype]);
if (yycount < 5)
{
yycount = 0;
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *));
yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
const char *yyq = ! yycount ? ", expecting " : " or ";
yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
yycount++;
}
}
yyerror (yymsg);
YYSTACK_FREE (yymsg);
}
else
yyerror ("parse error; also virtual memory exhausted");
}
else
#endif /* YYERROR_VERBOSE */
yyerror ("parse error");
}
goto yyerrlab1;
@@ -1253,7 +1237,12 @@ b4_epilogue
m4_if(b4_defines_flag, 0, [],
[#output "b4_output_header_name"
b4_copyright([Skeleton parser for Yacc-like parsing with Bison],
[1984, 1989, 1990, 2000, 2001, 2002])
[1984, 1989, 1990, 2000, 2001, 2002])
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
#ifndef b4_header_guard
# define b4_header_guard
+165 -103
View File
@@ -114,6 +114,7 @@ Reference sections:
* Invocation:: How to run Bison (to produce the parser source file).
* Table of Symbols:: All the keywords of the Bison language are explained.
* Glossary:: Basic concepts are explained.
* FAQ:: Frequently Asked Questions
* Copying This Manual:: License for copying this manual.
* Index:: Cross-references to the text.
@@ -268,6 +269,10 @@ Invoking Bison
* Option Cross Key:: Alphabetical list of long options.
* VMS Invocation:: Bison command syntax on VMS.
Frequently Asked Questions
* Parser Stack Overflow:: Breaking the Stack Limits
Copying This Manual
* GNU Free Documentation License:: License for copying this manual.
@@ -305,9 +310,9 @@ This edition corresponds to version @value{VERSION} of Bison.
@unnumbered Conditions for Using Bison
As of Bison version 1.24, we have changed the distribution terms for
@code{yyparse} to permit using Bison's output in nonfree programs.
Formerly, Bison parsers could be used only in programs that were free
software.
@code{yyparse} to permit using Bison's output in nonfree programs when
Bison is generating C code for LALR(1) parsers. Formerly, these
parsers could be used only in programs that were free software.
The other GNU programming tools, such as the GNU C compiler, have never
had such a requirement. They could always be used for nonfree
@@ -329,6 +334,13 @@ encourage people to make other software free. So we decided to make the
practical conditions for using Bison match the practical conditions for
using the other GNU tools.
This exception applies only when Bison is generating C code for a
LALR(1) parser; otherwise, the GPL terms operate as usual. You can
tell whether the exception applies to your @samp{.c} output file by
inspecting it to see whether it says ``As a special exception, when
this file is copied by Bison into a Bison output file, you may use
that output file without restriction.''
@include gpl.texi
@node Concepts
@@ -794,25 +806,25 @@ as both an @code{expr} and a @code{decl}, and print
@cindex position, textual
Many applications, like interpreters or compilers, have to produce verbose
and useful error messages. To achieve this, one must be able to keep track of
and useful error messages. To achieve this, one must be able to keep track of
the @dfn{textual position}, or @dfn{location}, of each syntactic construct.
Bison provides a mechanism for handling these locations.
Each token has a semantic value. In a similar fashion, each token has an
Each token has a semantic value. In a similar fashion, each token has an
associated location, but the type of locations is the same for all tokens and
groupings. Moreover, the output parser is equipped with a default data
groupings. Moreover, the output parser is equipped with a default data
structure for storing locations (@pxref{Locations}, for more details).
Like semantic values, locations can be reached in actions using a dedicated
set of constructs. In the example above, the location of the whole grouping
set of constructs. In the example above, the location of the whole grouping
is @code{@@$}, while the locations of the subexpressions are @code{@@1} and
@code{@@3}.
When a rule is matched, a default action is used to compute the semantic value
of its left hand side (@pxref{Actions}). In the same way, another default
action is used for locations. However, the action for locations is general
of its left hand side (@pxref{Actions}). In the same way, another default
action is used for locations. However, the action for locations is general
enough for most cases, meaning there is usually no need to describe for each
rule how @code{@@$} should be formed. When building a new location for a given
rule how @code{@@$} should be formed. When building a new location for a given
grouping, the default behavior of the output parser is to take the beginning
of the first symbol, and the end of the last symbol.
@@ -940,7 +952,7 @@ general form of a Bison grammar file is as follows:
The @samp{%%}, @samp{%@{} and @samp{%@}} are punctuation that appears
in every Bison grammar file to separate the sections.
The prologue may define types and variables used in the actions. You can
The prologue may define types and variables used in the actions. You can
also use preprocessor commands to define macros used there, and use
@code{#include} to include header files that do any of these things.
@@ -951,7 +963,7 @@ semantic values of various symbols.
The grammar rules define how to construct each nonterminal symbol from its
parts.
The epilogue can contain any code you want to use. Often the definition of
The epilogue can contain any code you want to use. Often the definition of
the lexical analyzer @code{yylex} goes here, plus subroutines called by the
actions in the grammar rules. In a simple program, all the rest of the
program can go here.
@@ -1018,7 +1030,7 @@ Here are the C and Bison declarations for the reverse polish notation
calculator. As in C, comments are placed between @samp{/*@dots{}*/}.
@example
/* Reverse polish notation calculator. */
/* Reverse polish notation calculator. */
%@{
#define YYSTYPE double
@@ -1027,7 +1039,7 @@ calculator. As in C, comments are placed between @samp{/*@dots{}*/}.
%token NUM
%% /* Grammar rules and actions follow */
%% /* Grammar rules and actions follow. */
@end example
The declarations section (@pxref{Prologue, , The prologue}) contains two
@@ -1136,7 +1148,7 @@ more times.
The parser function @code{yyparse} continues to process input until a
grammatical error is seen or the lexical analyzer says there are no more
input tokens; we will arrange for the latter to happen at end of file.
input tokens; we will arrange for the latter to happen at end-of-input.
@node Rpcalc Line
@subsubsection Explanation of @code{line}
@@ -1203,7 +1215,7 @@ action, Bison by default copies the value of @code{$1} into @code{$$}.
This is what happens in the first rule (the one that uses @code{NUM}).
The formatting shown here is the recommended convention, but Bison does
not require it. You can add or change whitespace as much as you wish.
not require it. You can add or change white space as much as you wish.
For example, this:
@example
@@ -1254,18 +1266,17 @@ for it. (The C data type of @code{yylval} is @code{YYSTYPE}, which was
defined at the beginning of the grammar; @pxref{Rpcalc Decls,
,Declarations for @code{rpcalc}}.)
A token type code of zero is returned if the end-of-file is encountered.
(Bison recognizes any nonpositive value as indicating the end of the
input.)
A token type code of zero is returned if the end-of-input is encountered.
(Bison recognizes any nonpositive value as indicating end-of-input.)
Here is the code for the lexical analyzer:
@example
@group
/* Lexical analyzer returns a double floating point
/* The lexical analyzer returns a double floating point
number on the stack and the token NUM, or the numeric code
of the character read if not a number. Skips all blanks
and tabs, returns 0 for EOF. */
of the character read if not a number. It skips all blanks
and tabs, and returns 0 for end-of-input. */
#include <ctype.h>
@end group
@@ -1276,12 +1287,12 @@ yylex (void)
@{
int c;
/* skip white space */
/* Skip white space. */
while ((c = getchar ()) == ' ' || c == '\t')
;
@end group
@group
/* process numbers */
/* Process numbers. */
if (c == '.' || isdigit (c))
@{
ungetc (c, stdin);
@@ -1290,10 +1301,10 @@ yylex (void)
@}
@end group
@group
/* return end-of-file */
/* Return end-of-input. */
if (c == EOF)
return 0;
/* return single chars */
/* Return a single char. */
return c;
@}
@end group
@@ -1333,7 +1344,7 @@ here is the definition we will use:
#include <stdio.h>
void
yyerror (const char *s) /* Called by yyparse on error */
yyerror (const char *s) /* called by yyparse on error */
@{
printf ("%s\n", s);
@}
@@ -1371,7 +1382,7 @@ bison @var{file_name}.y
@noindent
In this example the file was called @file{rpcalc.y} (for ``Reverse Polish
CALCulator''). Bison produces a file named @file{@var{file_name}.tab.c},
removing the @samp{.y} from the original file name. The file output by
removing the @samp{.y} from the original file name. The file output by
Bison contains the source code for @code{yyparse}. The additional
functions in the input file (@code{yylex}, @code{yyerror} and @code{main})
are copied verbatim to the output.
@@ -1392,7 +1403,7 @@ rpcalc.tab.c rpcalc.y
@group
# @r{Compile the Bison parser.}
# @r{@samp{-lm} tells compiler to search math library for @code{pow}.}
$ @kbd{cc rpcalc.tab.c -lm -o rpcalc}
$ @kbd{cc -lm -o rpcalc rpcalc.tab.c}
@end group
@group
@@ -1561,7 +1572,7 @@ This example extends the infix notation calculator with location
tracking. This feature will be used to improve the error messages. For
the sake of clarity, this example is a simple integer calculator, since
most of the work needed to use locations will be done in the lexical
analyser.
analyzer.
@menu
* Decls: Ltcalc Decls. Bison and C declarations for ltcalc.
@@ -1669,7 +1680,7 @@ hand.
@subsection The @code{ltcalc} Lexical Analyzer.
Until now, we relied on Bison's defaults to enable location
tracking. The next step is to rewrite the lexical analyser, and make it
tracking. The next step is to rewrite the lexical analyzer, and make it
able to feed the parser with the token locations, as it already does for
semantic values.
@@ -1683,17 +1694,17 @@ yylex (void)
@{
int c;
/* skip white space */
/* Skip white space. */
while ((c = getchar ()) == ' ' || c == '\t')
++yylloc.last_column;
/* step */
/* Step. */
yylloc.first_line = yylloc.last_line;
yylloc.first_column = yylloc.last_column;
@end group
@group
/* process numbers */
/* Process numbers. */
if (isdigit (c))
@{
yylval = c - '0';
@@ -1708,11 +1719,11 @@ yylex (void)
@}
@end group
/* return end-of-file */
/* Return end-of-input. */
if (c == EOF)
return 0;
/* return single chars and update location */
/* Return a single char, and update location. */
if (c == '\n')
@{
++yylloc.last_line;
@@ -1730,7 +1741,7 @@ In addition, it updates @code{yylloc}, the global variable (of type
@code{YYLTYPE}) containing the token's location.
Now, each time this function returns a token, the parser has its number
as well as its semantic value, and its location in the text. The last
as well as its semantic value, and its location in the text. The last
needed change is to initialize @code{yylloc}, for example in the
controlling function:
@@ -1809,7 +1820,7 @@ Here are the C and Bison declarations for the multi-function calculator.
@smallexample
%@{
#include <math.h> /* For math functions, cos(), sin(), etc. */
#include <math.h> /* For math functions, cos(), sin(), etc. */
#include "calc.h" /* Contains definition of `symrec' */
%@}
%union @{
@@ -1903,7 +1914,7 @@ provides for either functions or variables to be placed in the table.
@smallexample
@group
/* Fonctions type. */
/* Function type. */
typedef double (*func_t) (double);
/* Data type for links in the chain of symbols. */
@@ -1978,7 +1989,7 @@ symrec *sym_table = (symrec *) 0;
@end group
@group
/* Put arithmetic functions in table. */
/* Put arithmetic functions in table. */
void
init_table (void)
@{
@@ -2012,7 +2023,7 @@ putsym (char *sym_name, int sym_type)
ptr->name = (char *) malloc (strlen (sym_name) + 1);
strcpy (ptr->name,sym_name);
ptr->type = sym_type;
ptr->value.var = 0; /* set value to 0 even if fctn. */
ptr->value.var = 0; /* Set value to 0 even if fctn. */
ptr->next = (struct symrec *)sym_table;
sym_table = ptr;
return ptr;
@@ -2054,7 +2065,7 @@ yylex (void)
@{
int c;
/* Ignore whitespace, get first nonwhite character. */
/* Ignore white space, get first nonwhite character. */
while ((c = getchar ()) == ' ' || c == '\t');
if (c == EOF)
@@ -2105,7 +2116,7 @@ yylex (void)
@}
@end group
@group
while (c != EOF && isalnum (c));
while (isalnum (c));
ungetc (c, stdin);
symbuf[i] = '\0';
@@ -2125,7 +2136,7 @@ yylex (void)
@end group
@end smallexample
This program is both powerful and flexible. You may easily add new
This program is both powerful and flexible. You may easily add new
functions, and it is a simple job to modify this code to install
predefined variables such as @code{pi} or @code{e} as well.
@@ -2334,8 +2345,8 @@ your program will confuse other readers.
All the usual escape sequences used in character literals in C can be
used in Bison as well, but you must not use the null character as a
character literal because its numeric code, zero, is the code @code{yylex}
returns for end-of-input (@pxref{Calling Convention, ,Calling Convention
character literal because its numeric code, zero, signifies
end-of-input (@pxref{Calling Convention, ,Calling Convention
for @code{yylex}}).
@item
@@ -2372,12 +2383,15 @@ How you choose to write a terminal symbol has no effect on its
grammatical meaning. That depends only on where it appears in rules and
on when the parser function returns that symbol.
The value returned by @code{yylex} is always one of the terminal symbols
(or 0 for end-of-input). Whichever way you write the token type in the
grammar rules, you write it the same way in the definition of @code{yylex}.
The numeric code for a character token type is simply the numeric code of
the character, so @code{yylex} can use the identical character constant to
generate the requisite code. Each named token type becomes a C macro in
The value returned by @code{yylex} is always one of the terminal
symbols, except that a zero or negative value signifies end-of-input.
Whichever way you write the token type in the grammar rules, you write
it the same way in the definition of @code{yylex}. The numeric code
for a character token type is simply the positive numeric code of the
character, so @code{yylex} can use the identical value to generate the
requisite code, though you may need to convert it to @code{unsigned
char} to avoid sign-extension on hosts where @code{char} is signed.
Each named token type becomes a C macro in
the parser file, so @code{yylex} can use the name to stand for the code.
(This is why periods don't make sense in terminal symbols.)
@xref{Calling Convention, ,Calling Convention for @code{yylex}}.
@@ -2388,15 +2402,23 @@ option when you run Bison, so that it will write these macro definitions
into a separate header file @file{@var{name}.tab.h} which you can include
in the other source files that need it. @xref{Invocation, ,Invoking Bison}.
The @code{yylex} function must use the same character set and encoding
that was used by Bison. For example, if you run Bison in an
If you want to write a grammar that is portable to any Standard C
host, you must use only non-null character tokens taken from the basic
execution character set of Standard C. This set consists of the ten
digits, the 52 lower- and upper-case English letters, and the
characters in the following C-language string:
@example
"\a\b\t\n\v\f\r !\"#%&'()*+,-./:;<=>?[\\]^_@{|@}~"
@end example
The @code{yylex} function and Bison must use a consistent character
set and encoding for character tokens. For example, if you run Bison in an
@sc{ascii} environment, but then compile and run the resulting program
in an environment that uses an incompatible character set like
@sc{ebcdic}, the resulting program will probably not work because the
@sc{ebcdic}, the resulting program may not work because the
tables generated by Bison will assume @sc{ascii} numeric values for
character tokens. Portable grammars should avoid non-@sc{ascii}
character tokens, as implementations in practice often use different
and incompatible extensions in this area. However, it is standard
character tokens. It is standard
practice for software distributions to contain C source files that
were generated by Bison in an @sc{ascii} environment, so installers on
platforms that are incompatible with @sc{ascii} must rebuild those
@@ -2441,8 +2463,8 @@ exp: exp '+' exp
says that two groupings of type @code{exp}, with a @samp{+} token in between,
can be combined into a larger grouping of type @code{exp}.
Whitespace in rules is significant only to separate symbols. You can add
extra whitespace as you wish.
White space in rules is significant only to separate symbols. You can add
extra white space as you wish.
Scattered among the components can be @var{actions} that determine
the semantics of the rule. An action looks like this:
@@ -2947,7 +2969,7 @@ actually does to implement mid-rule actions.
@cindex position, textual
Though grammar rules and semantic actions are enough to write a fully
functional parser, it can be useful to process some additionnal informations,
functional parser, it can be useful to process some additional information,
especially symbol locations.
@c (terminal or not) ?
@@ -2994,7 +3016,7 @@ Actions are not only useful for defining language semantics, but also for
describing the behavior of the output parser with locations.
The most obvious way for building locations of syntactic groupings is very
similar to the way semantic values are computed. In a given rule, several
similar to the way semantic values are computed. In a given rule, several
constructs can be used to access the locations of the elements being matched.
The location of the @var{n}th component of the right hand side is
@code{@@@var{n}}, while the location of the left hand side grouping is
@@ -3025,11 +3047,11 @@ exp: @dots{}
@end example
As for semantic values, there is a default action for locations that is
run each time a rule is matched. It sets the beginning of @code{@@$} to the
run each time a rule is matched. It sets the beginning of @code{@@$} to the
beginning of the first symbol, and the end of @code{@@$} to the end of the
last symbol.
With this default action, the location tracking can be fully automatic. The
With this default action, the location tracking can be fully automatic. The
example above simply rewrites this way:
@example
@@ -3054,19 +3076,19 @@ exp: @dots{}
@subsection Default Action for Locations
@vindex YYLLOC_DEFAULT
Actually, actions are not the best place to compute locations. Since
Actually, actions are not the best place to compute locations. Since
locations are much more general than semantic values, there is room in
the output parser to redefine the default action to take for each
rule. The @code{YYLLOC_DEFAULT} macro is invoked each time a rule is
rule. The @code{YYLLOC_DEFAULT} macro is invoked each time a rule is
matched, before the associated action is run.
Most of the time, this macro is general enough to suppress location
dedicated code from semantic actions.
The @code{YYLLOC_DEFAULT} macro takes three parameters. The first one is
the location of the grouping (the result of the computation). The second one
The @code{YYLLOC_DEFAULT} macro takes three parameters. The first one is
the location of the grouping (the result of the computation). The second one
is an array holding locations of all right hand side elements of the rule
being matched. The last one is the size of the right hand side rule.
being matched. The last one is the size of the right hand side rule.
By default, it is defined this way for simple LALR(1) parsers:
@@ -3097,7 +3119,7 @@ When defining @code{YYLLOC_DEFAULT}, you should consider that:
@itemize @bullet
@item
All arguments are free of side-effects. However, only the first one (the
All arguments are free of side-effects. However, only the first one (the
result) should be modified by @code{YYLLOC_DEFAULT}.
@item
@@ -3585,7 +3607,7 @@ The number of parser states (@pxref{Parser States}).
@item %verbose
Write an extra output file containing verbose descriptions of the
parser states and what is done for each type of look-ahead token in
that state. @xref{Understanding, , Understanding Your Parser}, for more
that state. @xref{Understanding, , Understanding Your Parser}, for more
information.
@@ -3710,8 +3732,9 @@ that need it. @xref{Invocation, ,Invoking Bison}.
@node Calling Convention
@subsection Calling Convention for @code{yylex}
The value that @code{yylex} returns must be the numeric code for the type
of token it has just found, or 0 for end-of-input.
The value that @code{yylex} returns must be the positive numeric code
for the type of token it has just found; a zero or negative value
signifies end-of-input.
When a token is referred to in the grammar rules by a name, that name
in the parser file becomes a C macro whose definition is the proper
@@ -3720,8 +3743,9 @@ to indicate that type. @xref{Symbols}.
When a token is referred to in the grammar rules by a character literal,
the numeric code for that character is also the code for the token type.
So @code{yylex} can simply return that character code. The null character
must not be used this way, because its code is zero and that is what
So @code{yylex} can simply return that character code, possibly converted
to @code{unsigned char} to avoid sign-extension. The null character
must not be used this way, because its code is zero and that
signifies end-of-input.
Here is an example showing these things:
@@ -3731,13 +3755,13 @@ int
yylex (void)
@{
@dots{}
if (c == EOF) /* Detect end of file. */
if (c == EOF) /* Detect end-of-input. */
return 0;
@dots{}
if (c == '+' || c == '-')
return c; /* Assume token type for `+' is '+'. */
return c; /* Assume token type for `+' is '+'. */
@dots{}
return INT; /* Return the type of the token. */
return INT; /* Return the type of the token. */
@dots{}
@}
@end example
@@ -3772,8 +3796,8 @@ for (i = 0; i < YYNTOKENS; i++)
@{
if (yytname[i] != 0
&& yytname[i][0] == '"'
&& strncmp (yytname[i] + 1, token_buffer,
strlen (token_buffer))
&& ! strncmp (yytname[i] + 1, token_buffer,
strlen (token_buffer))
&& yytname[i][strlen (token_buffer) + 1] == '"'
&& yytname[i][strlen (token_buffer) + 2] == 0)
break;
@@ -3797,8 +3821,8 @@ Thus, if the type is @code{int} (the default), you might write this in
@example
@group
@dots{}
yylval = value; /* Put value onto Bison stack. */
return INT; /* Return the type of the token. */
yylval = value; /* Put value onto Bison stack. */
return INT; /* Return the type of the token. */
@dots{}
@end group
@end example
@@ -3825,8 +3849,8 @@ then the code in @code{yylex} might look like this:
@example
@group
@dots{}
yylval.intval = value; /* Put value onto Bison stack. */
return INT; /* Return the type of the token. */
yylval.intval = value; /* Put value onto Bison stack. */
return INT; /* Return the type of the token. */
@dots{}
@end group
@end example
@@ -4881,6 +4905,10 @@ not reduced. When this happens, the parser function @code{yyparse}
returns a nonzero value, pausing only to call @code{yyerror} to report
the overflow.
Becaue Bison parsers have growing stacks, hitting the upper limit
usually results from using a right recursion instead of a left
recursion, @xref{Recursion, ,Recursive Rules}.
@vindex YYMAXDEPTH
By defining the macro @code{YYMAXDEPTH}, you can control how deep the
parser stack can become before a stack overflow occurs. Define the
@@ -4904,6 +4932,13 @@ You can control how much stack is allocated initially by defining the
macro @code{YYINITDEPTH}. This value too must be a compile-time
constant integer. The default is 200.
@c FIXME: C++ output.
Because of semantical differences between C and C++, the LALR(1) parsers
in C produced by Bison by compiled as C++ cannot grow. In this precise
case (compiling a C parser as C++) you are suggested to grow
@code{YYINITDEPTH}. In the near future, a C++ output output will be
provided which addresses this issue.
@node Error Recovery
@chapter Error Recovery
@cindex error recovery
@@ -4966,7 +5001,7 @@ error recovery. A simple and useful strategy is simply to skip the rest of
the current input line or current statement if an error is detected:
@example
stmnt: error ';' /* on error, skip until ';' is read */
stmnt: error ';' /* On error, skip until ';' is read. */
@end example
It is also useful to recover to the matching close-delimiter of an
@@ -5760,10 +5795,11 @@ Here @var{infile} is the grammar file name, which usually ends in
@samp{.y}. The parser file's name is made by replacing the @samp{.y}
with @samp{.tab.c}. Thus, the @samp{bison foo.y} filename yields
@file{foo.tab.c}, and the @samp{bison hack/foo.y} filename yields
@file{hack/foo.tab.c}. It's is also possible, in case you are writing
@file{hack/foo.tab.c}. It's also possible, in case you are writing
C++ code instead of C in your grammar file, to name it @file{foo.ypp}
or @file{foo.y++}. Then, the output files will take an extention like
the given one as input (repectively @file{foo.tab.cpp} and @file{foo.tab.c++}).
or @file{foo.y++}. Then, the output files will take an extension like
the given one as input (respectively @file{foo.tab.cpp} and
@file{foo.tab.c++}).
This feature takes effect with all options that manipulate filenames like
@samp{-o} or @samp{-d}.
@@ -5773,15 +5809,14 @@ For example :
bison -d @var{infile.yxx}
@end example
@noindent
will produce @file{infile.tab.cxx} and @file{infile.tab.hxx}. and
will produce @file{infile.tab.cxx} and @file{infile.tab.hxx}, and
@example
bison -d @var{infile.y} -o @var{output.c++}
bison -d -o @var{output.c++} @var{infile.y}
@end example
@noindent
will produce @file{output.c++} and @file{outfile.h++}.
@menu
* Bison Options:: All the options described in detail,
in alphabetical order by short options.
@@ -5886,7 +5921,7 @@ Same as above, but save in the file @var{defines-file}.
@item -b @var{file-prefix}
@itemx --file-prefix=@var{prefix}
Pretend that @code{%verbose} was specified, i.e, specify prefix to use
for all Bison output file names. @xref{Decl Summary}.
for all Bison output file names. @xref{Decl Summary}.
@item -r @var{things}
@itemx --report=@var{things}
@@ -5913,7 +5948,7 @@ For instance, on the following grammar
@itemx --verbose
Pretend that @code{%verbose} was specified, i.e, write an extra output
file containing verbose descriptions of the grammar and
parser. @xref{Decl Summary}.
parser. @xref{Decl Summary}.
@item -o @var{filename}
@itemx --output=@var{filename}
@@ -5924,12 +5959,12 @@ described under the @samp{-v} and @samp{-d} options.
@item -g
Output a VCG definition of the LALR(1) grammar automaton computed by
Bison. If the grammar file is @file{foo.y}, the VCG output file will
Bison. If the grammar file is @file{foo.y}, the VCG output file will
be @file{foo.vcg}.
@item --graph=@var{graph-file}
The behaviour of @var{--graph} is the same than @samp{-g}. The only
difference is that it has an optionnal argument which is the name of
The behavior of @var{--graph} is the same than @samp{-g}. The only
difference is that it has an optional argument which is the name of
the output graph filename.
@end table
@@ -6005,6 +6040,33 @@ The VMS file system does not permit filenames such as
@file{foo.tab.c}. In the above example, the output file
would instead be named @file{foo_tab.c}.
@c ================================================= Invoking Bison
@node FAQ
@chapter Frequently Asked Questions
@cindex frequently asked questions
@cindex questions
Several questions about Bison come up occasionally. Here some of them
are addressed.
@menu
* Parser Stack Overflow:: Breaking the Stack Limits
@end menu
@node Parser Stack Overflow
@section Parser Stack Overflow
@display
My parser returns with error with a @samp{parser stack overflow}
message. What can I do?
@end display
This question is already addressed elsewhere, @xref{Recursion,
,Recursive Rules}.
@c ================================================= Table of Symbols
@node Table of Symbols
@appendix Bison Symbols
@cindex Bison symbols, table of
@@ -6067,7 +6129,7 @@ Macro to discard a value from the parser stack and fake a look-ahead
token. @xref{Action Features, ,Special Features for Use in Actions}.
@item YYDEBUG
Macro to define to equip the parser with tracing code. @xref{Tracing,
Macro to define to equip the parser with tracing code. @xref{Tracing,
,Tracing Your Parser}.
@item YYERROR
@@ -6110,9 +6172,9 @@ Macro whose value indicates whether the parser is recovering from a
syntax error. @xref{Action Features, ,Special Features for Use in Actions}.
@item YYSTACK_USE_ALLOCA
Macro used to control the use of @code{alloca}. If defined to @samp{0},
Macro used to control the use of @code{alloca}. If defined to @samp{0},
the parser will not use @code{alloca} but @code{malloc} when trying to
grow its internal stacks. Do @emph{not} define @code{YYSTACK_USE_ALLOCA}
grow its internal stacks. Do @emph{not} define @code{YYSTACK_USE_ALLOCA}
to anything else.
@item YYSTYPE
@@ -6184,7 +6246,7 @@ Bison declaration to assign a precedence to a rule that is used at parse
time to resolve reduce/reduce conflicts. @xref{GLR Parsers}.
@item %file-prefix="@var{prefix}"
Bison declaration to set the prefix of the output files. @xref{Decl
Bison declaration to set the prefix of the output files. @xref{Decl
Summary}.
@item %glr-parser
@@ -6196,7 +6258,7 @@ Bison declaration to produce a GLR parser. @xref{GLR Parsers}.
@c
@c @item %header-extension
@c Bison declaration to specify the generated parser header file extension
@c if required. @xref{Decl Summary}.
@c if required. @xref{Decl Summary}.
@item %left
Bison declaration to assign left associativity to token(s).
@@ -6209,7 +6271,7 @@ function is applied to the two semantic values to get a single result.
@xref{GLR Parsers}.
@item %name-prefix="@var{prefix}"
Bison declaration to rename the external symbols. @xref{Decl Summary}.
Bison declaration to rename the external symbols. @xref{Decl Summary}.
@item %no-lines
Bison declaration to avoid generating @code{#line} directives in the
@@ -6220,7 +6282,7 @@ Bison declaration to assign non-associativity to token(s).
@xref{Precedence Decl, ,Operator Precedence}.
@item %output="@var{filename}"
Bison declaration to set the name of the parser file. @xref{Decl
Bison declaration to set the name of the parser file. @xref{Decl
Summary}.
@item %prec
+1 -2
View File
@@ -17,7 +17,7 @@
AUTOMAKE_OPTIONS = ansi2knr
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS)
AM_CFLAGS = $(WARNING_CFLAGS)
noinst_LIBRARIES = libbison.a
@@ -32,7 +32,6 @@ INCLUDES = -I$(top_builddir) \
EXTRA_DIST = malloc.c realloc.c strnlen.c
libbison_a_SOURCES = \
argmatch.h argmatch.c \
gettext.h \
basename.c dirname.h dirname.c \
getopt.h getopt.c getopt1.c \
+505 -213
View File
@@ -22,43 +22,49 @@
#endif
#include "abitset.h"
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
/* This file implements fixed size bitsets stored as an array
of words. Any unused bits in the last word must be zero. */
typedef struct abitset_struct
{
unsigned int n_bits; /* Number of bits. */
bitset_word words[1]; /* The array of bits. */
}
*abitset;
struct bitset_struct
{
struct bbitset_struct b;
struct abitset_struct a;
};
static void abitset_unused_clear PARAMS ((bitset));
static void abitset_ones PARAMS ((bitset));
static void abitset_zero PARAMS ((bitset));
static int abitset_empty_p PARAMS ((bitset));
static void abitset_copy1 PARAMS ((bitset, bitset));
static void abitset_not PARAMS ((bitset, bitset));
static int abitset_equal_p PARAMS ((bitset, bitset));
static int abitset_subset_p PARAMS ((bitset, bitset));
static int abitset_disjoint_p PARAMS ((bitset, bitset));
static void abitset_and PARAMS ((bitset, bitset, bitset));
static int abitset_and_cmp PARAMS ((bitset, bitset, bitset));
static void abitset_andn PARAMS ((bitset, bitset, bitset));
static int abitset_andn_cmp PARAMS ((bitset, bitset, bitset));
static void abitset_or PARAMS ((bitset, bitset, bitset));
static int abitset_or_cmp PARAMS ((bitset, bitset, bitset));
static void abitset_xor PARAMS ((bitset, bitset, bitset));
static int abitset_xor_cmp PARAMS ((bitset, bitset, bitset));
static void abitset_and_or PARAMS ((bitset, bitset, bitset, bitset));
static int abitset_and_or_cmp PARAMS ((bitset, bitset, bitset, bitset));
static void abitset_andn_or PARAMS ((bitset, bitset, bitset, bitset));
static int abitset_andn_or_cmp PARAMS ((bitset, bitset, bitset, bitset));
static void abitset_or_and PARAMS ((bitset, bitset, bitset, bitset));
static int abitset_or_and_cmp PARAMS ((bitset, bitset, bitset, bitset));
static void abitset_copy PARAMS ((bitset, bitset));
static int abitset_small_list PARAMS ((bitset, bitset_bindex *, bitset_bindex,
bitset_bindex *));
static bitset_bindex abitset_small_list PARAMS ((bitset, bitset_bindex *,
bitset_bindex,
bitset_bindex *));
static void abitset_set PARAMS ((bitset, bitset_bindex));
static void abitset_reset PARAMS ((bitset, bitset_bindex));
static int abitset_test PARAMS ((bitset, bitset_bindex));
static int abitset_size PARAMS ((bitset));
static int abitset_op1 PARAMS ((bitset, enum bitset_ops));
static int abitset_op2 PARAMS ((bitset, bitset, enum bitset_ops));
static int abitset_op3 PARAMS ((bitset, bitset, bitset, enum bitset_ops));
static int abitset_op4 PARAMS ((bitset, bitset, bitset, bitset,
enum bitset_ops));
static int abitset_list PARAMS ((bitset, bitset_bindex *, bitset_bindex,
bitset_bindex *));
static int abitset_reverse_list
static bitset_bindex abitset_size PARAMS ((bitset));
static bitset_bindex abitset_list PARAMS ((bitset, bitset_bindex *,
bitset_bindex, bitset_bindex *));
static bitset_bindex abitset_list_reverse
PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
#define ABITSET_N_WORDS(N) (((N) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS)
@@ -67,7 +73,7 @@ PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
/* Return size in bits of bitset SRC. */
static int
static bitset_bindex
abitset_size (src)
bitset src;
{
@@ -78,7 +84,7 @@ abitset_size (src)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT and store in array LIST. Return with actual number of bits
found and with *NEXT indicating where search stopped. */
static int
static bitset_bindex
abitset_small_list (src, list, num, next)
bitset src;
bitset_bindex *list;
@@ -143,7 +149,8 @@ abitset_set (dst, bitno)
bitset dst ATTRIBUTE_UNUSED;
bitset_bindex bitno ATTRIBUTE_UNUSED;
{
/* This should never occur for abitsets. */
/* This should never occur for abitsets since we should always
hit the cache. */
abort ();
}
@@ -154,7 +161,8 @@ abitset_reset (dst, bitno)
bitset dst ATTRIBUTE_UNUSED;
bitset_bindex bitno ATTRIBUTE_UNUSED;
{
/* This should never occur for abitsets. */
/* This should never occur for abitsets since we should always
hit the cache. */
abort ();
}
@@ -165,7 +173,8 @@ abitset_test (src, bitno)
bitset src ATTRIBUTE_UNUSED;
bitset_bindex bitno ATTRIBUTE_UNUSED;
{
/* This should never occur for abitsets. */
/* This should never occur for abitsets since we should always
hit the cache. */
abort ();
return 0;
}
@@ -175,8 +184,8 @@ abitset_test (src, bitno)
from and including NEXT and store in array LIST. Return with
actual number of bits found and with *NEXT indicating where search
stopped. */
static int
abitset_reverse_list (src, list, num, next)
static bitset_bindex
abitset_list_reverse (src, list, num, next)
bitset src;
bitset_bindex *list;
bitset_bindex num;
@@ -188,7 +197,6 @@ abitset_reverse_list (src, list, num, next)
bitset_windex windex;
unsigned int bitcnt;
bitset_bindex bitoff;
bitset_word word;
bitset_word *srcp = ABITSET_WORDS (src);
bitset_bindex n_bits = ABITSET_N_BITS (src);
@@ -210,6 +218,8 @@ abitset_reverse_list (src, list, num, next)
do
{
bitset_word word;
word = srcp[windex] << (BITSET_WORD_BITS - 1 - bitcnt);
for (; word; bitcnt--)
{
@@ -237,7 +247,7 @@ abitset_reverse_list (src, list, num, next)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT and store in array LIST. Return with actual number of bits
found and with *NEXT indicating where search stopped. */
static int
static bitset_bindex
abitset_list (src, list, num, next)
bitset src;
bitset_bindex *list;
@@ -354,277 +364,559 @@ abitset_unused_clear (dst)
}
static int
abitset_op1 (dst, op)
static void
abitset_ones (dst)
bitset dst;
enum bitset_ops op;
{
unsigned int i;
bitset_word *dstp = ABITSET_WORDS (dst);
unsigned int bytes;
size_t bytes;
bytes = sizeof (bitset_word) * dst->b.csize;
switch (op)
{
case BITSET_OP_ZERO:
memset (dstp, 0, bytes);
break;
memset (dstp, -1, bytes);
abitset_unused_clear (dst);
}
case BITSET_OP_ONES:
memset (dstp, -1, bytes);
abitset_unused_clear (dst);
break;
case BITSET_OP_EMPTY_P:
for (i = 0; i < dst->b.csize; i++)
if (dstp[i])
return 0;
break;
static void
abitset_zero (dst)
bitset dst;
{
bitset_word *dstp = ABITSET_WORDS (dst);
size_t bytes;
default:
abort ();
}
bytes = sizeof (bitset_word) * dst->b.csize;
memset (dstp, 0, bytes);
}
static int
abitset_empty_p (dst)
bitset dst;
{
bitset_windex i;
bitset_word *dstp = ABITSET_WORDS (dst);
for (i = 0; i < dst->b.csize; i++)
if (dstp[i])
return 0;
return 1;
}
static int
abitset_op2 (dst, src, op)
static void
abitset_copy1 (dst, src)
bitset dst;
bitset src;
enum bitset_ops op;
{
unsigned int i;
bitset_word *srcp = ABITSET_WORDS (src);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
switch (op)
{
case BITSET_OP_COPY:
if (srcp == dstp)
break;
memcpy (dstp, srcp, sizeof (bitset_word) * size);
break;
if (srcp == dstp)
return;
memcpy (dstp, srcp, sizeof (bitset_word) * size);
}
case BITSET_OP_NOT:
for (i = 0; i < size; i++)
*dstp++ = ~(*srcp++);
abitset_unused_clear (dst);
break;
case BITSET_OP_EQUAL_P:
for (i = 0; i < size; i++)
if (*srcp++ != *dstp++)
return 0;
break;
case BITSET_OP_SUBSET_P:
for (i = 0; i < size; i++, dstp++, srcp++)
if (*dstp != (*srcp | *dstp))
return 0;
break;
case BITSET_OP_DISJOINT_P:
for (i = 0; i < size; i++)
if (*srcp++ & *dstp++)
return 0;
break;
default:
abort ();
}
static void
abitset_not (dst, src)
bitset dst;
bitset src;
{
bitset_windex i;
bitset_word *srcp = ABITSET_WORDS (src);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
*dstp++ = ~(*srcp++);
abitset_unused_clear (dst);
}
static int
abitset_equal_p (dst, src)
bitset dst;
bitset src;
{
bitset_windex i;
bitset_word *srcp = ABITSET_WORDS (src);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
if (*srcp++ != *dstp++)
return 0;
return 1;
}
static int
abitset_op3 (dst, src1, src2, op)
abitset_subset_p (dst, src)
bitset dst;
bitset src;
{
bitset_windex i;
bitset_word *srcp = ABITSET_WORDS (src);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++, dstp++, srcp++)
if (*dstp != (*srcp | *dstp))
return 0;
return 1;
}
static int
abitset_disjoint_p (dst, src)
bitset dst;
bitset src;
{
bitset_windex i;
bitset_word *srcp = ABITSET_WORDS (src);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
if (*srcp++ & *dstp++)
return 0;
return 1;
}
static void
abitset_and (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
enum bitset_ops op;
{
unsigned int i;
bitset_windex i;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
*dstp++ = *src1p++ & *src2p++;
}
static int
abitset_and_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
bitset_windex i;
int changed = 0;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
switch (op)
for (i = 0; i < size; i++, dstp++)
{
case BITSET_OP_OR:
for (i = 0; i < size; i++, dstp++)
bitset_word tmp = *src1p++ & *src2p++;
if (*dstp != tmp)
{
bitset_word tmp = *src1p++ | *src2p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
changed = 1;
*dstp = tmp;
}
break;
case BITSET_OP_AND:
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = *src1p++ & *src2p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
break;
case BITSET_OP_XOR:
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = *src1p++ ^ *src2p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
break;
case BITSET_OP_ANDN:
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = *src1p++ & ~(*src2p++);
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
break;
default:
abort ();
}
return changed;
}
static void
abitset_andn (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
bitset_windex i;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
*dstp++ = *src1p++ & ~(*src2p++);
}
static int
abitset_op4 (dst, src1, src2, src3, op)
abitset_andn_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
bitset_windex i;
int changed = 0;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = *src1p++ & ~(*src2p++);
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
return changed;
}
static void
abitset_or (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
bitset_windex i;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
*dstp++ = *src1p++ | *src2p++;
}
static int
abitset_or_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
bitset_windex i;
int changed = 0;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = *src1p++ | *src2p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
return changed;
}
static void
abitset_xor (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
bitset_windex i;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
*dstp++ = *src1p++ ^ *src2p++;
}
static int
abitset_xor_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
bitset_windex i;
int changed = 0;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = *src1p++ ^ *src2p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
return changed;
}
static void
abitset_and_or (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
enum bitset_ops op;
{
unsigned int i;
bitset_windex i;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *src3p = ABITSET_WORDS (src3);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
*dstp++ = (*src1p++ & *src2p++) | *src3p++;
}
static int
abitset_and_or_cmp (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
bitset_windex i;
int changed = 0;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *src3p = ABITSET_WORDS (src3);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
switch (op)
for (i = 0; i < size; i++, dstp++)
{
case BITSET_OP_OR_AND:
for (i = 0; i < size; i++, dstp++)
bitset_word tmp = (*src1p++ & *src2p++) | *src3p++;
if (*dstp != tmp)
{
bitset_word tmp = (*src1p++ | *src2p++) & *src3p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
changed = 1;
*dstp = tmp;
}
break;
case BITSET_OP_AND_OR:
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = (*src1p++ & *src2p++) | *src3p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
break;
case BITSET_OP_ANDN_OR:
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = (*src1p++ & ~(*src2p++)) | *src3p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
break;
default:
abort ();
}
return changed;
}
static void
abitset_andn_or (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
bitset_windex i;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *src3p = ABITSET_WORDS (src3);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
*dstp++ = (*src1p++ & ~(*src2p++)) | *src3p++;
}
static int
abitset_andn_or_cmp (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
bitset_windex i;
int changed = 0;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *src3p = ABITSET_WORDS (src3);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = (*src1p++ & ~(*src2p++)) | *src3p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
return changed;
}
static void
abitset_or_and (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
bitset_windex i;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *src3p = ABITSET_WORDS (src3);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++)
*dstp++ = (*src1p++ | *src2p++) & *src3p++;
}
static int
abitset_or_and_cmp (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
bitset_windex i;
int changed = 0;
bitset_word *src1p = ABITSET_WORDS (src1);
bitset_word *src2p = ABITSET_WORDS (src2);
bitset_word *src3p = ABITSET_WORDS (src3);
bitset_word *dstp = ABITSET_WORDS (dst);
bitset_windex size = dst->b.csize;
for (i = 0; i < size; i++, dstp++)
{
bitset_word tmp = (*src1p++ | *src2p++) & *src3p++;
if (*dstp != tmp)
{
changed = 1;
*dstp = tmp;
}
}
return changed;
}
static void
abitset_copy (dst, src)
bitset dst;
bitset src;
{
if (BITSET_COMPATIBLE_ (dst, src))
abitset_copy1 (dst, src);
else
bitset_copy_ (dst, src);
}
/* Vector of operations for single word bitsets. */
struct bitset_ops_struct abitset_small_ops = {
struct bitset_vtable abitset_small_vtable = {
abitset_set,
abitset_reset,
bitset_toggle_,
abitset_test,
abitset_size,
abitset_op1,
abitset_op2,
abitset_op3,
abitset_op4,
bitset_count_,
abitset_empty_p,
abitset_ones,
abitset_zero,
abitset_copy,
abitset_disjoint_p,
abitset_equal_p,
abitset_not,
abitset_subset_p,
abitset_and,
abitset_and_cmp,
abitset_andn,
abitset_andn_cmp,
abitset_or,
abitset_or_cmp,
abitset_xor,
abitset_xor_cmp,
abitset_and_or,
abitset_and_or_cmp,
abitset_andn_or,
abitset_andn_or_cmp,
abitset_or_and,
abitset_or_and_cmp,
abitset_small_list,
abitset_reverse_list,
abitset_list_reverse,
NULL,
BITSET_ARRAY
};
/* Vector of operations for multiple word bitsets. */
struct bitset_ops_struct abitset_ops = {
struct bitset_vtable abitset_vtable = {
abitset_set,
abitset_reset,
bitset_toggle_,
abitset_test,
abitset_size,
abitset_op1,
abitset_op2,
abitset_op3,
abitset_op4,
bitset_count_,
abitset_empty_p,
abitset_ones,
abitset_zero,
abitset_copy,
abitset_disjoint_p,
abitset_equal_p,
abitset_not,
abitset_subset_p,
abitset_and,
abitset_and_cmp,
abitset_andn,
abitset_andn_cmp,
abitset_or,
abitset_or_cmp,
abitset_xor,
abitset_xor_cmp,
abitset_and_or,
abitset_and_or_cmp,
abitset_andn_or,
abitset_andn_or_cmp,
abitset_or_and,
abitset_or_and_cmp,
abitset_list,
abitset_reverse_list,
abitset_list_reverse,
NULL,
BITSET_ARRAY
};
int
size_t
abitset_bytes (n_bits)
bitset_bindex n_bits;
{
unsigned int bytes, size;
bitset_windex size;
size_t bytes;
size_t header_size = offsetof (union bitset_union, a.words);
struct bitset_align_struct { char a; union bitset_union b; };
size_t bitset_alignment = offsetof (struct bitset_align_struct, b);
size = ABITSET_N_WORDS (n_bits);
bytes = size * sizeof (bitset_word);
return sizeof (struct bitset_struct) + bytes - sizeof (bitset_word);
bytes = header_size + size * sizeof (bitset_word);
/* Align the size properly for a vector of abitset objects. */
if (header_size % bitset_alignment != 0
|| sizeof (bitset_word) % bitset_alignment != 0)
{
bytes += bitset_alignment - 1;
bytes -= bytes % bitset_alignment;
}
return bytes;
}
@@ -642,9 +934,9 @@ abitset_init (bset, n_bits)
There is probably little merit if using caching since
the small bitset will always fit in the cache. */
if (size == 1)
bset->b.ops = &abitset_small_ops;
bset->b.vtable = &abitset_small_vtable;
else
bset->b.ops = &abitset_ops;
bset->b.vtable = &abitset_vtable;
bset->b.cindex = 0;
bset->b.csize = size;
+2 -2
View File
@@ -19,9 +19,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef _ABITSET_H
#define _ABITSET_H
#include "bbitset.h"
#include "bitset.h"
extern int abitset_bytes PARAMS ((bitset_bindex));
extern size_t abitset_bytes PARAMS ((bitset_bindex));
extern bitset abitset_init PARAMS ((bitset, bitset_bindex));
+194 -130
View File
@@ -25,12 +25,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <limits.h>
#endif
/* Use the following types for function parameters where the
corresponding enum would be the correct type if we could use
prototyped function definitions. Standard C says that one cannot
portably use an enum as a parameter of an old-style function
definition that is also declared with a prototype. */
typedef int enum_bitset_ops;
typedef int enum_bitset_type;
/* Currently we support three flavours of bitsets:
BITSET_ARRAY: Array of bits (fixed size, faster).
BITSET_ARRAY: Array of bits (fixed size, fast for dense bitsets).
BITSET_LIST: Linked list of array of bits (variable size, least storage
for large very sparse sets).
for large very sparse sets).
BITSET_TABLE: Expandable table of pointers to array of bits
(variable size, less storage for large sparse sets).
(variable size, less storage for large sparse sets).
BITSET_STATS: Wrapper bitset for internal use only.
*/
@@ -38,6 +47,8 @@ enum bitset_type {BITSET_ARRAY, BITSET_LIST, BITSET_TABLE, BITSET_TYPE_NUM,
BITSET_STATS};
#define BITSET_TYPE_NAMES {"abitset", "lbitset", "ebitset"}
extern const char * const bitset_type_names[];
enum bitset_alloc_type {BITSET_MALLOC, BITSET_OBALLOC};
/* Non-zero to use inline functions instead of macros. */
@@ -49,13 +60,23 @@ typedef unsigned long bitset_word;
/* Bit index. In theory we might need a type wider than size_t, but
in practice we lose at most a factor of CHAR_BIT by going with
size_t, and that is good enough. */
size_t, and that is good enough. If this type is changed to be
wider than size_t, the code needs to be modified to check for
overflow when converting bit counts to byte or word counts.
The bit and word index types must be unsigned. */
typedef size_t bitset_bindex;
/* Word index. */
typedef size_t bitset_windex;
#define BITSET_INDEX_MAX ((bitset_word) 1 << (BITSET_WORD_BITS - 1))
/* Maximum values for commonly-used unsigned types. BITSET_SIZE_MAX
always equals SIZE_MAX, but some older systems lack SIZE_MAX. */
#define BITSET_BINDEX_MAX ((bitset_bindex) -1)
/* Limit max word index to the maximum value of a signed integer
to simplify cache disabling. */
#define BITSET_WINDEX_MAX (((bitset_windex) -1) >> 1)
#define BITSET_SIZE_MAX ((size_t) -1)
#define BITSET_MSB ((bitset_word) 1 << (BITSET_WORD_BITS - 1))
@@ -68,111 +89,9 @@ enum bitset_ops {BITSET_OP_ZERO, BITSET_OP_ONES,
BITSET_OP_AND, BITSET_OP_OR, BITSET_OP_XOR, BITSET_OP_ANDN,
BITSET_OP_OR_AND, BITSET_OP_AND_OR, BITSET_OP_ANDN_OR};
/* Return size in bits of bitset SRC. */
#define BITSET_SIZE_(SRC) (SRC)->b.ops->size (SRC)
/* Return type of bitset SRC. */
#define BITSET_TYPE_(DST) (DST)->b.ops->type
/* Set bit BITNO in bitset DST. */
#define BITSET_SET_(DST, BITNO) (DST)->b.ops->set (DST, BITNO)
/* Reset bit BITNO in bitset DST. */
#define BITSET_RESET_(DST, BITNO) (DST)->b.ops->reset (DST, BITNO)
/* Return non-zero if bit BITNO in bitset SRC is set. */
#define BITSET_TEST_(SRC, BITNO) (SRC)->b.ops->test (SRC, BITNO)
/* Free bitset SRC. */
#define BITSET_FREE_(SRC)\
((SRC)->b.ops->free ? (SRC)->b.ops->free (SRC) :(void)0)
/* Perform operation OP on DST. */
#define BITSET_OP1_(DST, OP) (DST)->b.ops->op1 (DST, OP)
/* Perform operation OP on SRC and store in DST. */
#define BITSET_OP2_(DST, SRC, OP) (DST)->b.ops->op2 (DST, SRC, OP)
/* DST = SRC1 OP SRC2. */
#define BITSET_OP3_(DST, SRC1, SRC2, OP) \
(DST)->b.ops->op3 (DST, SRC1, SRC2, OP)
/* DST = (SRC1 OP1 SRC2) OP2 SRC3. */
#define BITSET_OP4_(DST, SRC1, SRC2, SRC3, OP) \
(DST)->b.ops->op4 (DST, SRC1, SRC2, SRC3, OP)
/* DST = 0. */
#define BITSET_ZERO_(DST) BITSET_OP1_ (DST, BITSET_OP_ZERO);
/* DST = ~0. */
#define BITSET_ONES_(DST) BITSET_OP1_ (DST, BITSET_OP_ONES);
/* Return SRC == 0. */
#define BITSET_EMPTY_P_(SRC) BITSET_OP1_ (SRC, BITSET_OP_EMPTY_P);
/* Return DST == SRC. */
#define BITSET_EQUAL_P_(DST, SRC) BITSET_OP2_ (DST, SRC, BITSET_OP_EQUAL_P)
/* Return DST == DST | SRC. */
#define BITSET_SUBSET_P_(DST, SRC) BITSET_OP2_ (DST, SRC, BITSET_OP_SUBSET_P)
/* Return DST & SRC == 0. */
#define BITSET_DISJOINT_P_(DST, SRC)\
BITSET_OP2_ (DST, SRC, BITSET_OP_DISJOINT_P)
/* DST = SRC. */
#define BITSET_COPY_(DST, SRC) BITSET_OP2_ (DST, SRC, BITSET_OP_COPY)
/* DST = ~SRC. */
#define BITSET_NOT_(DST, SRC) BITSET_OP2_ (DST, SRC, BITSET_OP_NOT)
/* DST = SRC1 | SRC2. */
#define BITSET_OR_(DST, SRC1, SRC2) BITSET_OP3_ (DST, SRC1, SRC2,\
BITSET_OP_OR)
/* DST = SRC1 ^ SRC2. */
#define BITSET_XOR_(DST, SRC1, SRC2) BITSET_OP3_ (DST, SRC1, SRC2,\
BITSET_OP_XOR)
/* DST = SRC1 & SRC2. */
#define BITSET_AND_(DST, SRC1, SRC2) BITSET_OP3_ (DST, SRC1, SRC2, \
BITSET_OP_AND)
/* DST = SRC1 & ~SRC2. */
#define BITSET_ANDN_(DST, SRC1, SRC2) BITSET_OP3_ (DST, SRC1, SRC2, \
BITSET_OP_ANDN)
/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if
DST != (SRC1 & SRC2) | SRC3. */
#define BITSET_AND_OR_(DST, SRC1, SRC2, SRC3)\
BITSET_OP4_ (DST, SRC1, SRC2, SRC3, BITSET_OP_AND_OR)
/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if
DST != (SRC1 | SRC2) & SRC3. */
#define BITSET_OR_AND_(DST, SRC1, SRC2, SRC3)\
BITSET_OP4_ (DST, SRC1, SRC2, SRC3, BITSET_OP_OR_AND)
/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if
DST != (SRC1 & ~SRC2) | SRC3. */
#define BITSET_ANDN_OR_(DST, SRC1, SRC2, SRC3)\
BITSET_OP4_ (DST, SRC1, SRC2, SRC3, BITSET_OP_ANDN_OR)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT. Return with actual number of bits found and with *NEXT
indicating where search stopped. */
#define BITSET_LIST_(BSET, LIST, NUM, NEXT) \
(BSET)->b.ops->list (BSET, LIST, NUM, NEXT)
/* Find reverse list of up to NUM bits set in BSET starting from and
including NEXT. Return with actual number of bits found and with
*NEXT indicating where search stopped. */
#define BITSET_REVERSE_LIST_(BSET, LIST, NUM, NEXT) \
(BSET)->b.ops->reverse_list (BSET, LIST, NUM, NEXT)
struct bbitset_struct
{
struct bitset_ops_struct *ops;
const struct bitset_vtable * vtable;
bitset_windex cindex; /* Cache word index. */
bitset_windex csize; /* Cache size in words. */
bitset_word *cdata; /* Cache data pointer. */
@@ -184,33 +103,55 @@ struct bbitset_struct
};
typedef struct bitset_struct *bitset;
typedef union bitset_union *bitset;
/* The contents of this structure should be considered private. */
struct bitset_ops_struct
struct bitset_vtable
{
void (*set) PARAMS ((struct bitset_struct *, bitset_bindex));
void (*reset) PARAMS ((struct bitset_struct *, bitset_bindex));
int (*test) PARAMS ((struct bitset_struct *, bitset_bindex));
int (*size) PARAMS ((struct bitset_struct *));
int (*op1) PARAMS ((struct bitset_struct *, enum bitset_ops));
int (*op2) PARAMS ((struct bitset_struct *, struct bitset_struct *,
enum bitset_ops));
int (*op3) PARAMS ((struct bitset_struct *, struct bitset_struct *,
struct bitset_struct *, enum bitset_ops));
int (*op4) PARAMS ((struct bitset_struct *, struct bitset_struct *,
struct bitset_struct *, struct bitset_struct *,
enum bitset_ops));
int (*list) PARAMS ((struct bitset_struct *, bitset_bindex *,
bitset_bindex, bitset_bindex *));
int (*reverse_list) PARAMS ((struct bitset_struct *, bitset_bindex *,
bitset_bindex, bitset_bindex *));
void (*free) PARAMS ((struct bitset_struct *));
void (*set) PARAMS ((bitset, bitset_bindex));
void (*reset) PARAMS ((bitset, bitset_bindex));
int (*toggle) PARAMS ((bitset, bitset_bindex));
int (*test) PARAMS ((bitset, bitset_bindex));
bitset_bindex (*size) PARAMS ((bitset));
bitset_bindex (*count) PARAMS ((bitset));
int (*empty_p) PARAMS ((bitset));
void (*ones) PARAMS ((bitset));
void (*zero) PARAMS ((bitset));
void (*copy) PARAMS ((bitset, bitset));
int (*disjoint_p) PARAMS ((bitset, bitset));
int (*equal_p) PARAMS ((bitset, bitset));
void (*not) PARAMS ((bitset, bitset));
int (*subset_p) PARAMS ((bitset, bitset));
void (*and) PARAMS ((bitset, bitset, bitset));
int (*and_cmp) PARAMS ((bitset, bitset, bitset));
void (*andn) PARAMS ((bitset, bitset, bitset));
int (*andn_cmp) PARAMS ((bitset, bitset, bitset));
void (*or) PARAMS ((bitset, bitset, bitset));
int (*or_cmp) PARAMS ((bitset, bitset, bitset));
void (*xor) PARAMS ((bitset, bitset, bitset));
int (*xor_cmp) PARAMS ((bitset, bitset, bitset));
void (*and_or) PARAMS ((bitset, bitset, bitset, bitset));
int (*and_or_cmp) PARAMS ((bitset, bitset, bitset, bitset));
void (*andn_or) PARAMS ((bitset, bitset, bitset, bitset));
int (*andn_or_cmp) PARAMS ((bitset, bitset, bitset, bitset));
void (*or_and) PARAMS ((bitset, bitset, bitset, bitset));
int (*or_and_cmp) PARAMS ((bitset, bitset, bitset, bitset));
bitset_bindex (*list) PARAMS ((bitset, bitset_bindex *,
bitset_bindex, bitset_bindex *));
bitset_bindex (*list_reverse) PARAMS ((bitset,
bitset_bindex *, bitset_bindex,
bitset_bindex *));
void (*free) PARAMS ((bitset));
enum bitset_type type;
};
#define BITSET_COMPATIBLE_(BSET1, BSET2) ((BSET1)->b.ops == (BSET2)->b.ops)
#define BITSET_COMPATIBLE_(BSET1, BSET2) ((BSET1)->b.vtable == (BSET2)->b.vtable)
#define BITSET_CHECK2_(DST, SRC) \
if (!BITSET_COMPATIBLE_ (DST, SRC)) abort ();
@@ -224,7 +165,130 @@ if (!BITSET_COMPATIBLE_ (DST, SRC1) || !BITSET_COMPATIBLE_ (DST, SRC2) \
|| !BITSET_COMPATIBLE_ (DST, SRC3)) abort ();
extern int bitset_op4 PARAMS ((bitset, bitset, bitset, bitset,
enum bitset_ops op));
/* Return size in bits of bitset SRC. */
#define BITSET_SIZE_(SRC) (SRC)->b.vtable->size (SRC)
/* Return number of bits set in bitset SRC. */
#define BITSET_COUNT_(SRC) (SRC)->b.vtable->count (SRC)
/* Return type of bitset SRC. */
#define BITSET_TYPE_(DST) (DST)->b.vtable->type
/* Set bit BITNO in bitset DST. */
#define BITSET_SET_(DST, BITNO) (DST)->b.vtable->set (DST, BITNO)
/* Reset bit BITNO in bitset DST. */
#define BITSET_RESET_(DST, BITNO) (DST)->b.vtable->reset (DST, BITNO)
/* Toggle bit BITNO in bitset DST. */
#define BITSET_TOGGLE_(DST, BITNO) (DST)->b.vtable->toggle (DST, BITNO)
/* Return non-zero if bit BITNO in bitset SRC is set. */
#define BITSET_TEST_(SRC, BITNO) (SRC)->b.vtable->test (SRC, BITNO)
/* Free bitset SRC. */
#define BITSET_FREE_(SRC)\
((SRC)->b.vtable->free ? (SRC)->b.vtable->free (SRC) :(void)0)
/* Return SRC == 0. */
#define BITSET_EMPTY_P_(SRC) (SRC)->b.vtable->empty_p (SRC)
/* DST = ~0. */
#define BITSET_ONES_(DST) (DST)->b.vtable->ones (DST)
/* DST = 0. */
#define BITSET_ZERO_(DST) (DST)->b.vtable->zero (DST)
/* DST = SRC. */
#define BITSET_COPY_(DST, SRC) (SRC)->b.vtable->copy (DST, SRC)
/* Return DST & SRC == 0. */
#define BITSET_DISJOINT_P_(DST, SRC) (SRC)->b.vtable->disjoint_p (DST, SRC)
/* Return DST == SRC. */
#define BITSET_EQUAL_P_(DST, SRC) (SRC)->b.vtable->equal_p (DST, SRC)
/* DST = ~SRC. */
#define BITSET_NOT_(DST, SRC) (SRC)->b.vtable->not (DST, SRC)
/* Return DST == DST | SRC. */
#define BITSET_SUBSET_P_(DST, SRC) (SRC)->b.vtable->subset_p (DST, SRC)
/* DST = SRC1 & SRC2. */
#define BITSET_AND_(DST, SRC1, SRC2) (SRC1)->b.vtable->and (DST, SRC1, SRC2)
#define BITSET_AND_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->and_cmp (DST, SRC1, SRC2)
/* DST = SRC1 & ~SRC2. */
#define BITSET_ANDN_(DST, SRC1, SRC2) (SRC1)->b.vtable->andn (DST, SRC1, SRC2)
#define BITSET_ANDN_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->andn_cmp (DST, SRC1, SRC2)
/* DST = SRC1 | SRC2. */
#define BITSET_OR_(DST, SRC1, SRC2) (SRC1)->b.vtable->or (DST, SRC1, SRC2)
#define BITSET_OR_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->or_cmp (DST, SRC1, SRC2)
/* DST = SRC1 ^ SRC2. */
#define BITSET_XOR_(DST, SRC1, SRC2) (SRC1)->b.vtable->xor (DST, SRC1, SRC2)
#define BITSET_XOR_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->xor_cmp (DST, SRC1, SRC2)
/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if
DST != (SRC1 & SRC2) | SRC3. */
#define BITSET_AND_OR_(DST, SRC1, SRC2, SRC3) \
(SRC1)->b.vtable->and_or (DST, SRC1, SRC2, SRC3)
#define BITSET_AND_OR_CMP_(DST, SRC1, SRC2, SRC3) \
(SRC1)->b.vtable->and_or_cmp (DST, SRC1, SRC2, SRC3)
/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if
DST != (SRC1 & ~SRC2) | SRC3. */
#define BITSET_ANDN_OR_(DST, SRC1, SRC2, SRC3) \
(SRC1)->b.vtable->andn_or (DST, SRC1, SRC2, SRC3)
#define BITSET_ANDN_OR_CMP_(DST, SRC1, SRC2, SRC3) \
(SRC1)->b.vtable->andn_or_cmp (DST, SRC1, SRC2, SRC3)
/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if
DST != (SRC1 | SRC2) & SRC3. */
#define BITSET_OR_AND_(DST, SRC1, SRC2, SRC3) \
(SRC1)->b.vtable->or_and (DST, SRC1, SRC2, SRC3)
#define BITSET_OR_AND_CMP_(DST, SRC1, SRC2, SRC3) \
(SRC1)->b.vtable->or_and_cmp (DST, SRC1, SRC2, SRC3)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT. Return with actual number of bits found and with *NEXT
indicating where search stopped. */
#define BITSET_LIST_(BSET, LIST, NUM, NEXT) \
(BSET)->b.vtable->list (BSET, LIST, NUM, NEXT)
/* Find reverse list of up to NUM bits set in BSET starting from and
including NEXT. Return with actual number of bits found and with
*NEXT indicating where search stopped. */
#define BITSET_LIST_REVERSE_(BSET, LIST, NUM, NEXT) \
(BSET)->b.vtable->list_reverse (BSET, LIST, NUM, NEXT)
/* Private functions for bitset implementations. */
extern int bitset_toggle_ PARAMS ((bitset, bitset_bindex));
extern bitset_bindex bitset_count_ PARAMS ((bitset));
extern int bitset_copy_ PARAMS ((bitset, bitset));
extern void bitset_and_or_ PARAMS ((bitset, bitset, bitset, bitset));
extern int bitset_and_or_cmp_ PARAMS ((bitset, bitset, bitset, bitset));
extern void bitset_andn_or_ PARAMS ((bitset, bitset, bitset, bitset));
extern int bitset_andn_or_cmp_ PARAMS ((bitset, bitset, bitset, bitset));
extern void bitset_or_and_ PARAMS ((bitset, bitset, bitset, bitset));
extern int bitset_or_and_cmp_ PARAMS ((bitset, bitset, bitset, bitset));
#endif /* _BBITSET_H */
+144 -207
View File
@@ -28,17 +28,20 @@
#include "bitset_stats.h"
#include "obstack.h"
const char * const bitset_type_names[] = BITSET_TYPE_NAMES;
static void bitset_print PARAMS ((FILE *, bitset, int));
static int bitset_op4_cmp PARAMS ((bitset, bitset, bitset, bitset, int));
/* Return number of bytes required to create a N_BIT bitset
of TYPE. The bitset may grow to require more bytes than this. */
int
size_t
bitset_bytes (type, n_bits)
enum bitset_type type;
enum_bitset_type type;
bitset_bindex n_bits;
{
unsigned int bytes;
size_t bytes;
if (bitset_stats_enabled)
return bitset_stats_bytes ();
@@ -70,7 +73,7 @@ bitset
bitset_init (bset, n_bits, type)
bitset bset;
bitset_bindex n_bits;
enum bitset_type type;
enum_bitset_type type;
{
if (bitset_stats_enabled)
return bitset_stats_init (bset, n_bits, type);
@@ -108,10 +111,8 @@ bitset_type_choose (n_bits, attr)
if (attr & BITSET_SPARSE && attr & BITSET_DENSE)
abort ();
/* Note that sometimes we will be asked for a zero length
fixed size bitset. */
/* Choose the type of bitset. */
/* Choose the type of bitset. Note that sometimes we will be asked
for a zero length fixed size bitset. */
type = BITSET_ARRAY;
/* Currently, the simple bitsets do not support a variable size. */
@@ -130,9 +131,9 @@ bitset_type_choose (n_bits, attr)
bitset
bitset_alloc (n_bits, type)
bitset_bindex n_bits;
enum bitset_type type;
enum_bitset_type type;
{
unsigned int bytes;
size_t bytes;
bitset bset;
bytes = bitset_bytes (type, n_bits);
@@ -152,9 +153,9 @@ bitset
bitset_obstack_alloc (bobstack, n_bits, type)
struct obstack *bobstack;
bitset_bindex n_bits;
enum bitset_type type;
enum_bitset_type type;
{
unsigned int bytes;
size_t bytes;
bitset bset;
bytes = bitset_bytes (type, n_bits);
@@ -215,9 +216,22 @@ bitset_type_get (bset)
}
/* Return name of bitset type. */
const char *
bitset_type_name_get (bset)
bitset bset;
{
enum bitset_type type;
type = bitset_type_get (bset);
return bitset_type_names[type];
}
/* Find next bit set in SRC starting from and including BITNO.
Return -1 if SRC empty. */
int
Return BITSET_BINDEX_MAX if SRC empty. */
bitset_bindex
bitset_next (src, bitno)
bitset src;
bitset_bindex bitno;
@@ -226,14 +240,14 @@ bitset_next (src, bitno)
bitset_bindex next = bitno;
if (!bitset_list (src, &val, 1, &next))
return -1;
return BITSET_BINDEX_MAX;
return val;
}
/* Find previous bit set in SRC starting from and including BITNO.
Return -1 if SRC empty. */
int
Return BITSET_BINDEX_MAX if SRC empty. */
bitset_bindex
bitset_prev (src, bitno)
bitset src;
bitset_bindex bitno;
@@ -241,14 +255,14 @@ bitset_prev (src, bitno)
bitset_bindex val;
bitset_bindex next = bitno;
if (!bitset_reverse_list (src, &val, 1, &next))
return -1;
if (!bitset_list_reverse (src, &val, 1, &next))
return BITSET_BINDEX_MAX;
return val;
}
/* Find first set bit. */
int
bitset_bindex
bitset_first (src)
bitset src;
{
@@ -257,7 +271,7 @@ bitset_first (src)
/* Find last set bit. */
int
bitset_bindex
bitset_last (src)
bitset src;
{
@@ -280,27 +294,6 @@ bitset_only_set_p (src, bitno)
}
/* Toggle bit BITNO in bitset BSET and return non-zero if now set. */
int
bitset_toggle (bset, bitno)
bitset bset;
bitset_bindex bitno;
{
/* This routine is for completeness. It could be optimized if
required. */
if (bitset_test (bset, bitno))
{
bitset_reset (bset, bitno);
return 0;
}
else
{
bitset_set (bset, bitno);
return 1;
}
}
/* Print contents of bitset BSET to FILE. */
static void
bitset_print (file, bset, verbose)
@@ -308,11 +301,13 @@ bitset_print (file, bset, verbose)
bitset bset;
int verbose;
{
unsigned int i, pos;
unsigned int pos;
bitset_bindex i;
bitset_iterator iter;
if (verbose)
fprintf (file, "n_bits = %d, set = {", bitset_size (bset));
fprintf (file, "n_bits = %lu, set = {",
(unsigned long) bitset_size (bset));
pos = 30;
BITSET_FOR_EACH (iter, bset, i, 0)
@@ -332,48 +327,57 @@ bitset_print (file, bset, verbose)
}
/* DST = SRC. Return non-zero if DST != SRC. */
int
bitset_copy (dst, src)
bitset dst;
bitset src;
/* Dump bitset BSET to FILE. */
void
bitset_dump (file, bset)
FILE *file;
bitset bset;
{
unsigned int i;
bitset_iterator iter;
if (BITSET_COMPATIBLE_ (dst, src))
return BITSET_COPY_ (dst, src);
/* Convert bitset types. We assume that the DST bitset
is large enough to hold the SRC bitset. */
bitset_zero (dst);
BITSET_FOR_EACH (iter, src, i, 0)
{
bitset_set (dst, i);
};
return 1;
bitset_print (file, bset, 0);
}
/* Return size in bits of bitset SRC. */
int
bitset_size (src)
bitset src;
/* Release memory associated with bitsets. */
void
bitset_release_memory ()
{
return BITSET_SIZE_ (src);
lbitset_release_memory ();
ebitset_release_memory ();
}
/* Toggle bit BITNO in bitset BSET and return non-zero if not set. */
int
bitset_toggle_ (bset, bitno)
bitset bset;
bitset_bindex bitno;
{
/* This routine is for completeness. It could be optimized if
required. */
if (bitset_test (bset, bitno))
{
bitset_reset (bset, bitno);
return 0;
}
else
{
bitset_set (bset, bitno);
return 1;
}
}
/* Return number of bits set in bitset SRC. */
int
bitset_count (src)
bitset_bindex
bitset_count_ (src)
bitset src;
{
bitset_bindex list[BITSET_LIST_SIZE];
bitset_bindex next;
int num;
int count;
bitset_bindex num;
bitset_bindex count;
/* This could be greatly sped up by adding a count method for each
bitset implementation that uses a direct technique (based on
@@ -388,148 +392,64 @@ bitset_count (src)
}
/* DST = 0. */
/* DST = SRC. Return non-zero if DST != SRC.
This is a fallback for the case where SRC and DST are different
bitset types. */
int
bitset_zero (dst)
bitset dst;
{
return BITSET_ZERO_ (dst);
}
/* DST = ~0. */
int
bitset_ones (dst)
bitset dst;
{
return BITSET_ONES_ (dst);
}
/* Return SRC == 0. */
int
bitset_empty_p (src)
bitset src;
{
return BITSET_EMPTY_P_ (src);
}
/* Return DST == DST | SRC. */
int
bitset_subset_p (dst, src)
bitset_copy_ (dst, src)
bitset dst;
bitset src;
{
return BITSET_SUBSET_P_ (dst, src);
}
bitset_bindex i;
bitset_iterator iter;
/* Convert bitset types. We assume that the DST bitset
is large enough to hold the SRC bitset. */
bitset_zero (dst);
BITSET_FOR_EACH (iter, src, i, 0)
{
bitset_set (dst, i);
};
/* Return DST == SRC. */
int
bitset_equal_p (dst, src)
bitset dst;
bitset src;
{
return BITSET_EQUAL_P_ (dst, src);
}
/* Return DST & SRC == 0. */
int
bitset_disjoint_p (dst, src)
bitset dst;
bitset src;
{
return BITSET_DISJOINT_P_ (dst, src);
}
/* DST = ~SRC. */
int
bitset_not (dst, src)
bitset dst;
bitset src;
{
return BITSET_NOT_ (dst, src);
}
/* DST = SRC1 | SRC2. Return non-zero if DST != SRC1 | SRC2. */
int
bitset_or (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
return BITSET_OR_ (dst, src1, src2);
}
/* DST = SRC1 & SRC2. Return non-zero if DST != SRC1 & SRC2. */
int
bitset_and (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
return BITSET_AND_ (dst, src1, src2);
}
/* DST = SRC1 ^ SRC2. Return non-zero if DST != SRC1 ^ SRC2. */
int
bitset_xor (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
return BITSET_XOR_ (dst, src1, src2);
}
/* DST = SRC1 & ~SRC2. Return non-zero if DST != SRC1 & ~SRC2. */
int
bitset_andn (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
return BITSET_ANDN_ (dst, src1, src2);
return 1;
}
/* This is a fallback for implementations that do not support
four operand operations. */
int
bitset_op4 (dst, src1, src2, src3, op)
static inline int
bitset_op4_cmp (dst, src1, src2, src3, op)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
enum bitset_ops op;
enum_bitset_ops op;
{
int changed = 0;
int stats_enabled_save;
bitset tmp;
/* Create temporary bitset. */
stats_enabled_save = bitset_stats_enabled;
bitset_stats_enabled = 0;
tmp = bitset_alloc (0, bitset_type_get (dst));
bitset_stats_enabled = stats_enabled_save;
switch (op)
{
case BITSET_OP_OR_AND:
BITSET_OR_ (tmp, src1, src2);
changed = BITSET_AND_ (dst, src3, tmp);
bitset_or (tmp, src1, src2);
changed = bitset_and_cmp (dst, src3, tmp);
break;
case BITSET_OP_AND_OR:
BITSET_AND_ (tmp, src1, src2);
changed = BITSET_OR_ (dst, src3, tmp);
bitset_and (tmp, src1, src2);
changed = bitset_or_cmp (dst, src3, tmp);
break;
case BITSET_OP_ANDN_OR:
BITSET_ANDN_ (tmp, src1, src2);
changed = BITSET_OR_ (dst, src3, tmp);
bitset_andn (tmp, src1, src2);
changed = bitset_or_cmp (dst, src3, tmp);
break;
default:
@@ -541,52 +461,78 @@ bitset_op4 (dst, src1, src2, src3, op)
}
/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if
DST != (SRC1 | SRC2) & SRC3. */
int
bitset_or_and (dst, src1, src2, src3)
/* DST = (SRC1 & SRC2) | SRC3. */
void
bitset_and_or_ (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
return BITSET_OR_AND_ (dst, src1, src2, src3);
bitset_and_or_cmp_ (dst, src1, src2, src3);
}
/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if
DST != (SRC1 & SRC2) | SRC3. */
int
bitset_and_or (dst, src1, src2, src3)
bitset_and_or_cmp_ (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
return BITSET_AND_OR_ (dst, src1, src2, src3);
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_AND_OR);
}
/* DST = (SRC1 & ~SRC2) | SRC3. */
void
bitset_andn_or_ (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
bitset_andn_or_cmp_ (dst, src1, src2, src3);
}
/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if
DST != (SRC1 & ~SRC2) | SRC3. */
int
bitset_andn_or (dst, src1, src2, src3)
bitset_andn_or_cmp_ (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
return BITSET_ANDN_OR_ (dst, src1, src2, src3);
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_ANDN_OR);
}
/* Dump bitset BSET to FILE. */
/* DST = (SRC1 | SRC2) & SRC3. */
void
bitset_dump (file, bset)
FILE *file;
bitset bset;
bitset_or_and_ (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
bitset_print (file, bset, 0);
bitset_or_and_cmp_ (dst, src1, src2, src3);
}
/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if
DST != (SRC1 | SRC2) & SRC3. */
int
bitset_or_and_cmp_ (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_OR_AND);
}
@@ -598,12 +544,3 @@ debug_bitset (bset)
if (bset)
bitset_print (stderr, bset, 1);
}
/* Release memory associated with bitsets. */
void
bitset_release_memory ()
{
lbitset_release_memory ();
ebitset_release_memory ();
}
+166 -67
View File
@@ -32,16 +32,46 @@ enum bitset_attr {BITSET_FIXED = 1, /* Bitset size fixed. */
BITSET_DENSE = 4, /* Bitset dense. */
BITSET_SPARSE = 8, /* Bitset sparse. */
BITSET_FRUGAL = 16, /* Prefer most compact. */
BITSET_GREEDY = 32}; /* Prefer fastest. */
BITSET_GREEDY = 32}; /* Prefer fastest at memory expense. */
typedef unsigned int bitset_attrs;
/* The contents of the structure should be considered to be private.
While I would like to make this structure opaque, it needs to be
visible for the inline bit set/test functions. */
struct bitset_struct
/* The contents of the union should be considered to be private.
While I would like to make this union opaque, it needs to be
visible for the inline bit set/test functions, and for delegation
to the proper implementation. */
union bitset_union
{
/* This must be the first member of every other structure that is a
member of this union. */
struct bbitset_struct b;
struct abitset_struct
{
struct bbitset_struct b;
bitset_bindex n_bits; /* Number of bits. */
bitset_word words[1]; /* The array of bits. */
} a;
struct ebitset_struct
{
struct bbitset_struct b;
bitset_windex size; /* Number of elements. */
struct ebitset_elt_struct **elts; /* Expanding array of ptrs to elts. */
} e;
struct lbitset_struct
{
struct bbitset_struct b;
struct lbitset_elt_struct *head; /* First element in linked list. */
struct lbitset_elt_struct *tail; /* Last element in linked list. */
} l;
struct bitset_stats_struct
{
struct bbitset_struct b;
bitset bset;
} s;
};
@@ -51,16 +81,16 @@ typedef struct
{
bitset_bindex list[BITSET_LIST_SIZE];
bitset_bindex next;
int num;
int i;
bitset_bindex num;
bitset_bindex i;
} bitset_iterator;
/* Return bytes required for bitset of desired type and size. */
extern int bitset_bytes PARAMS ((enum bitset_type, bitset_bindex));
extern size_t bitset_bytes PARAMS ((enum_bitset_type, bitset_bindex));
/* Initialise a bitset with desired type and size. */
extern bitset bitset_init PARAMS ((bitset, bitset_bindex, enum bitset_type));
extern bitset bitset_init PARAMS ((bitset, bitset_bindex, enum_bitset_type));
/* Select an implementation type based on the desired bitset size
and attributes. */
@@ -68,7 +98,7 @@ extern enum bitset_type bitset_type_choose PARAMS ((bitset_bindex,
bitset_attrs));
/* Create a bitset of desired type and size. The bitset is zeroed. */
extern bitset bitset_alloc PARAMS ((bitset_bindex, enum bitset_type));
extern bitset bitset_alloc PARAMS ((bitset_bindex, enum_bitset_type));
/* Free bitset. */
extern void bitset_free PARAMS ((bitset));
@@ -76,7 +106,7 @@ extern void bitset_free PARAMS ((bitset));
/* Create a bitset of desired type and size using an obstack. The
bitset is zeroed. */
extern bitset bitset_obstack_alloc PARAMS ((struct obstack *bobstack,
bitset_bindex, enum bitset_type));
bitset_bindex, enum_bitset_type));
/* Free bitset allocated on obstack. */
extern void bitset_obstack_free PARAMS ((bitset));
@@ -84,15 +114,12 @@ extern void bitset_obstack_free PARAMS ((bitset));
/* Create a bitset of desired size and attributes. The bitset is zeroed. */
extern bitset bitset_create PARAMS ((bitset_bindex, bitset_attrs));
/* Return size in bits of bitset SRC. */
extern int bitset_size PARAMS ((bitset));
/* Return number of bits set in bitset SRC. */
extern int bitset_count PARAMS ((bitset));
/* Return bitset type. */
extern enum bitset_type bitset_type_get PARAMS ((bitset));
/* Return bitset type name. */
extern const char *bitset_type_name_get PARAMS ((bitset));
#if BITSET_INLINE
static inline void bitset_set PARAMS ((bitset, bitset_bindex));
static inline void bitset_reset PARAMS ((bitset, bitset_bindex));
@@ -169,9 +196,9 @@ do \
bitset_windex _index = _bitno / BITSET_WORD_BITS; \
bitset_windex _offset = _index - (bset)->b.cindex; \
\
if (_offset < (bset)->b.csize) \
if (_offset < (bset)->b.csize) \
(bset)->b.cdata[_offset] &= \
~((bitset_word) 1 << (_bitno % BITSET_WORD_BITS)); \
~((bitset_word) 1 << (_bitno % BITSET_WORD_BITS)); \
else \
BITSET_RESET_ ((bset), _bitno); \
} while (0)
@@ -179,98 +206,148 @@ do \
/* Test bit BITNO in bitset BSET. */
#define bitset_test(bset, bitno) \
(((((bitno) / BITSET_WORD_BITS) - (bset)->b.cindex) < (bset)->b.csize) \
? (((int) \
((bset)->b.cdata[(((bitno) / BITSET_WORD_BITS) - (bset)->b.cindex)] \
>> ((bitno) % BITSET_WORD_BITS))) \
& 1) \
: BITSET_TEST_ ((bset), (bitno)))
(((((bitno) / BITSET_WORD_BITS) - (bset)->b.cindex) < (bset)->b.csize) \
? ((bset)->b.cdata[(((bitno) / BITSET_WORD_BITS) - (bset)->b.cindex)] \
>> ((bitno) % BITSET_WORD_BITS)) & 1 \
: (unsigned int) BITSET_TEST_ ((bset), (bitno)))
#endif
/* Toggle bit BITNO in bitset BSET and return non-zero if now set. */
extern int bitset_toggle PARAMS ((bitset, bitset_bindex));
#define bitset_toggle(bset, bitno) BITSET_TOGGLE_ (bset, bitno)
/* DST = 0. */
extern int bitset_zero PARAMS ((bitset));
/* Return size in bits of bitset SRC. */
#define bitset_size(SRC) BITSET_SIZE_ (SRC)
/* Return number of bits set in bitset SRC. */
#define bitset_count(SRC) BITSET_COUNT_ (SRC)
/* Return SRC == 0. */
#define bitset_empty_p(SRC) BITSET_EMPTY_P_ (SRC)
/* DST = ~0. */
extern int bitset_ones PARAMS ((bitset));
#define bitset_ones(DST) BITSET_ONES_ (DST)
/* Return non-zero if all bits in bitset SRC are reset. */
extern int bitset_empty_p PARAMS ((bitset));
/* DST = 0. */
#define bitset_zero(DST) BITSET_ZERO_ (DST)
/* Return DST == DST | SRC. */
extern int bitset_subset_p PARAMS ((bitset, bitset));
/* Return DST == SRC. */
extern int bitset_equal_p PARAMS ((bitset, bitset));
/* DST = SRC. */
#define bitset_copy(DST, SRC) BITSET_COPY_ (DST, SRC)
/* Return DST & SRC == 0. */
extern int bitset_disjoint_p PARAMS ((bitset, bitset));
#define bitset_disjoint_p(DST, SRC) BITSET_DISJOINT_P_ (DST, SRC)
/* DST == SRC. */
extern int bitset_copy PARAMS ((bitset, bitset));
/* Return DST == SRC. */
#define bitset_equal_p(DST, SRC) BITSET_EQUAL_P_ (DST, SRC)
/* DST = ~SRC. */
extern int bitset_not PARAMS ((bitset, bitset));
#define bitset_not(DST, SRC) BITSET_NOT_ (DST, SRC)
/* DST = SRC1 | SRC2. Return non-zero if DST != SRC1 | SRC2. */
extern int bitset_or PARAMS ((bitset, bitset, bitset));
/* Return DST == DST | SRC. */
#define bitset_subset_p(DST, SRC) BITSET_SUBSET_P_ (DST, SRC)
/* DST = SRC1 & SRC2. */
#define bitset_and(DST, SRC1, SRC2) BITSET_AND_ (DST, SRC1, SRC2)
/* DST = SRC1 & SRC2. Return non-zero if DST != SRC1 & SRC2. */
extern int bitset_and PARAMS ((bitset, bitset, bitset));
#define bitset_and_cmp(DST, SRC1, SRC2) BITSET_AND_CMP_ (DST, SRC1, SRC2)
/* DST = SRC1 ^ SRC2. Return non-zero if DST != SRC1 ^ SRC2. */
extern int bitset_xor PARAMS ((bitset, bitset, bitset));
/* DST = SRC1 & ~SRC2. */
#define bitset_andn(DST, SRC1, SRC2) BITSET_ANDN_ (DST, SRC1, SRC2)
/* DST = SRC1 & ~SRC2. Return non-zero if DST != SRC1 & ~SRC2. */
extern int bitset_andn PARAMS ((bitset, bitset, bitset));
#define bitset_andn_cmp(DST, SRC1, SRC2) BITSET_ANDN_CMP_ (DST, SRC1, SRC2)
/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if
DST != (SRC1 | SRC2) & SRC3. */
extern int bitset_or_and PARAMS ((bitset, bitset, bitset, bitset));
/* DST = SRC1 | SRC2. */
#define bitset_or(DST, SRC1, SRC2) BITSET_OR_ (DST, SRC1, SRC2)
/* DST = SRC1 | SRC2. Return non-zero if DST != SRC1 | SRC2. */
#define bitset_or_cmp(DST, SRC1, SRC2) BITSET_OR_CMP_ (DST, SRC1, SRC2)
/* DST = SRC1 ^ SRC2. */
#define bitset_xor(DST, SRC1, SRC2) BITSET_XOR_ (DST, SRC1, SRC2)
/* DST = SRC1 ^ SRC2. Return non-zero if DST != SRC1 ^ SRC2. */
#define bitset_xor_cmp(DST, SRC1, SRC2) BITSET_XOR_CMP_ (DST, SRC1, SRC2)
/* DST = (SRC1 & SRC2) | SRC3. */
#define bitset_and_or(DST, SRC1, SRC2, SRC3) \
BITSET_AND_OR_ (DST, SRC1, SRC2, SRC3)
/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if
DST != (SRC1 & SRC2) | SRC3. */
extern int bitset_and_or PARAMS ((bitset, bitset, bitset, bitset));
#define bitset_and_or_cmp(DST, SRC1, SRC2, SRC3) \
BITSET_AND_OR_CMP_ (DST, SRC1, SRC2, SRC3)
/* DST = (SRC1 & ~SRC2) | SRC3. */
#define bitset_andn_or(DST, SRC1, SRC2, SRC3) \
BITSET_ANDN_OR_ (DST, SRC1, SRC2, SRC3)
/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if
DST != (SRC1 & ~SRC2) | SRC3. */
extern int bitset_andn_or PARAMS ((bitset, bitset, bitset, bitset));
#define bitset_andn_or_cmp(DST, SRC1, SRC2, SRC3) \
BITSET_ANDN_OR_CMP_ (DST, SRC1, SRC2, SRC3)
/* Find next bit set in BSET starting from and including BITNO. */
extern int bitset_next PARAMS ((bitset, bitset_bindex));
/* DST = (SRC1 | SRC2) & SRC3. */
#define bitset_or_and(DST, SRC1, SRC2, SRC3)\
BITSET_OR_AND_ (DST, SRC1, SRC2, SRC3)
/* Find previous bit set in BSET starting from and including BITNO. */
extern int bitset_prev PARAMS ((bitset, bitset_bindex));
/* Return non-zero if BITNO in SRC is the only set bit. */
extern int bitset_only_set_p PARAMS ((bitset, bitset_bindex));
/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if
DST != (SRC1 | SRC2) & SRC3. */
#define bitset_or_and_cmp(DST, SRC1, SRC2, SRC3)\
BITSET_OR_AND_CMP_ (DST, SRC1, SRC2, SRC3)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT. Return with actual number of bits found and with *NEXT
indicating where search stopped. */
#define bitset_list(BSET, LIST, NUM, NEXT) \
BITSET_LIST_ (BSET, LIST, NUM, NEXT)
BITSET_LIST_ (BSET, LIST, NUM, NEXT)
/* Find reverse list of up to NUM bits set in BSET starting from and
including NEXT. Return with actual number of bits found and with
*NEXT indicating where search stopped. */
#define bitset_reverse_list(BSET, LIST, NUM, NEXT) \
BITSET_REVERSE_LIST_ (BSET, LIST, NUM, NEXT)
#define bitset_list_reverse(BSET, LIST, NUM, NEXT) \
BITSET_LIST_REVERSE_ (BSET, LIST, NUM, NEXT)
/* Find next set bit. */
extern bitset_bindex bitset_next PARAMS ((bitset, bitset_bindex));
/* Find previous set bit. */
extern bitset_bindex bitset_prev PARAMS ((bitset, bitset_bindex));
/* Find first set bit. */
extern int bitset_first PARAMS ((bitset));
extern bitset_bindex bitset_first PARAMS ((bitset));
/* Find last set bit. */
extern int bitset_last PARAMS ((bitset));
extern bitset_bindex bitset_last PARAMS ((bitset));
/* Return nonzero if this is the only set bit. */
extern int bitset_only_set_p PARAMS ((bitset, bitset_bindex));
/* Dump bitset. */
extern void bitset_dump PARAMS ((FILE *, bitset));
/* Loop over all elements of BSET, starting with MIN, setting BIT
to the index of each set bit. */
to the index of each set bit. For example, the following will print
the bits set in a bitset:
bitset_bindex i;
bitset_iterator iter;
bitset_zero (dst);
BITSET_FOR_EACH (iter, src, i, 0)
{
printf ("%ld ", i);
};
*/
#define BITSET_FOR_EACH(ITER, BSET, BIT, MIN) \
for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \
(ITER.num == BITSET_LIST_SIZE) \
@@ -280,7 +357,18 @@ extern void bitset_dump PARAMS ((FILE *, bitset));
/* Loop over all elements of BSET, in reverse order starting with
MIN, setting BIT to the index of each set bit. */
MIN, setting BIT to the index of each set bit. For example, the
following will print the bits set in a bitset in reverse order:
bitset_bindex i;
bitset_iterator iter;
bitset_zero (dst);
BITSET_FOR_EACH_REVERSE (iter, src, i, 0)
{
printf ("%ld ", i);
};
*/
#define BITSET_FOR_EACH_REVERSE(ITER, BSET, BIT, MIN) \
for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \
(ITER.num == BITSET_LIST_SIZE) \
@@ -291,14 +379,25 @@ extern void bitset_dump PARAMS ((FILE *, bitset));
/* Define set operations in terms of logical operations. */
#define bitset_diff(DST, SRC1, SRC2) bitset_andn (DST, SRC1, SRC2)
#define bitset_diff(DST, SRC1, SRC2) bitset_andn (DST, SRC1, SRC2)
#define bitset_diff_cmp(DST, SRC1, SRC2) bitset_andn_cmp (DST, SRC1, SRC2)
#define bitset_intersection(DST, SRC1, SRC2) bitset_and (DST, SRC1, SRC2)
#define bitset_intersection(DST, SRC1, SRC2) bitset_and (DST, SRC1, SRC2)
#define bitset_intersection_cmp(DST, SRC1, SRC2) bitset_and_cmp (DST, SRC1, SRC2)
#define bitset_union(DST, SRC1, SRC2) bitset_or (DST, SRC1, SRC2)
#define bitset_union(DST, SRC1, SRC2) bitset_or (DST, SRC1, SRC2)
#define bitset_union_cmp(DST, SRC1, SRC2) bitset_or_cmp (DST, SRC1, SRC2)
/* Symmetrical difference. */
#define bitset_symdiff(DST, SRC1, SRC2) bitset_xor (DST, SRC1, SRC2)
#define bitset_symdiff_cmp(DST, SRC1, SRC2) bitset_xor_cmp (DST, SRC1, SRC2)
/* Union of difference. */
#define bitset_diff_union(DST, SRC1, SRC2, SRC3) \
bitset_andn_or (DST, SRC1, SRC2, SRC3)
#define bitset_diff_union_cmp(DST, SRC1, SRC2, SRC3) \
bitset_andn_or_cmp (DST, SRC1, SRC2, SRC3)
/* Release any memory tied up with bitsets. */
+307 -74
View File
@@ -75,19 +75,6 @@
bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_density[(I)]++
typedef struct bitset_stats_struct
{
bitset bset;
} *bitset_stats;
struct bitset_struct
{
struct bbitset_struct b;
struct bitset_stats_struct s;
};
struct bitset_type_info_struct
{
unsigned int allocs;
@@ -118,16 +105,36 @@ int bitset_stats_enabled = 0;
static void bitset_stats_set PARAMS ((bitset, bitset_bindex));
static void bitset_stats_reset PARAMS ((bitset, bitset_bindex));
static int bitset_stats_toggle PARAMS ((bitset, bitset_bindex));
static int bitset_stats_test PARAMS ((bitset, bitset_bindex));
static int bitset_stats_size PARAMS ((bitset));
static int bitset_stats_op1 PARAMS ((bitset, enum bitset_ops));
static int bitset_stats_op2 PARAMS ((bitset, bitset, enum bitset_ops));
static int bitset_stats_op3 PARAMS ((bitset, bitset, bitset, enum bitset_ops));
static int bitset_stats_op4 PARAMS ((bitset, bitset, bitset, bitset,
enum bitset_ops));
static int bitset_stats_list PARAMS ((bitset, bitset_bindex *, bitset_bindex,
bitset_bindex *));
static int bitset_stats_reverse_list
static bitset_bindex bitset_stats_size PARAMS ((bitset));
static bitset_bindex bitset_stats_count PARAMS ((bitset));
static int bitset_stats_empty_p PARAMS ((bitset));
static void bitset_stats_ones PARAMS ((bitset));
static void bitset_stats_zero PARAMS ((bitset));
static void bitset_stats_copy PARAMS ((bitset, bitset));
static int bitset_stats_disjoint_p PARAMS ((bitset, bitset));
static int bitset_stats_equal_p PARAMS ((bitset, bitset));
static void bitset_stats_not PARAMS ((bitset, bitset));
static int bitset_stats_subset_p PARAMS ((bitset, bitset));
static void bitset_stats_and PARAMS ((bitset, bitset, bitset));
static int bitset_stats_and_cmp PARAMS ((bitset, bitset, bitset));
static void bitset_stats_andn PARAMS ((bitset, bitset, bitset));
static int bitset_stats_andn_cmp PARAMS ((bitset, bitset, bitset));
static void bitset_stats_or PARAMS ((bitset, bitset, bitset));
static int bitset_stats_or_cmp PARAMS ((bitset, bitset, bitset));
static void bitset_stats_xor PARAMS ((bitset, bitset, bitset));
static int bitset_stats_xor_cmp PARAMS ((bitset, bitset, bitset));
static void bitset_stats_and_or PARAMS ((bitset, bitset, bitset, bitset));
static int bitset_stats_and_or_cmp PARAMS ((bitset, bitset, bitset, bitset));
static void bitset_stats_andn_or PARAMS ((bitset, bitset, bitset, bitset));
static int bitset_stats_andn_or_cmp PARAMS ((bitset, bitset, bitset, bitset));
static void bitset_stats_or_and PARAMS ((bitset, bitset, bitset, bitset));
static int bitset_stats_or_and_cmp PARAMS ((bitset, bitset, bitset, bitset));
static bitset_bindex bitset_stats_list PARAMS ((bitset, bitset_bindex *,
bitset_bindex,
bitset_bindex *));
static bitset_bindex bitset_stats_list_reverse
PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
static void bitset_stats_free PARAMS ((bitset));
static void bitset_percent_histogram_print PARAMS ((FILE *, const char *,
@@ -164,7 +171,7 @@ bitset_percent_histogram_print (file, name, msg, n_bins, bins)
fprintf (file, "%s %s", name, msg);
for (i = 0; i < n_bins; i++)
fprintf (file, "%.0f-%.0f%%\t%8d (%5.1f%%)\n",
fprintf (file, "%.0f-%.0f%%\t%8u (%5.1f%%)\n",
i * 100.0 / n_bins,
(i + 1) * 100.0 / n_bins, bins[i],
(100.0 * bins[i]) / total);
@@ -183,7 +190,6 @@ bitset_log_histogram_print (file, name, msg, n_bins, bins)
unsigned int i;
unsigned int total;
unsigned int max_width;
unsigned int last_bin;
total = 0;
for (i = 0; i < n_bins; i++)
@@ -192,22 +198,25 @@ bitset_log_histogram_print (file, name, msg, n_bins, bins)
if (!total)
return;
/* Determine number of useful bins. */
for (i = n_bins; i > 3 && ! bins[i - 1]; i--)
continue;
last_bin = i - 1;
n_bins = i;
/* 2 * ceil (log10 (2) * (N - 1)) + 1. */
max_width = 2 * (unsigned int) (0.30103 * (n_bins - 1) + 0.9999) + 1;
fprintf (file, "%s %s", name, msg);
for (i = 0; i < 2; i++)
fprintf (file, "%*d\t%8d (%5.1f%%)\n",
fprintf (file, "%*d\t%8u (%5.1f%%)\n",
max_width, i, bins[i], 100.0 * bins[i] / total);
for (; i <= last_bin; i++)
fprintf (file, "%*d-%d\t%8d (%5.1f%%)\n",
for (; i < n_bins; i++)
fprintf (file, "%*lu-%lu\t%8u (%5.1f%%)\n",
max_width - ((unsigned int) (0.30103 * (i) + 0.9999) + 1),
1 << (i - 1), (1 << i) - 1, bins[i],
(unsigned long) 1 << (i - 1),
((unsigned long) 1 << i) - 1,
bins[i],
(100.0 * bins[i]) / total);
}
@@ -223,20 +232,20 @@ bitset_stats_print_1 (file, name, stats)
return;
fprintf (file, "%s:\n", name);
fprintf (file, _("%d bitset_allocs, %d freed (%.2f%%).\n"),
fprintf (file, _("%u bitset_allocs, %u freed (%.2f%%).\n"),
stats->allocs, stats->frees,
stats->allocs ? 100.0 * stats->frees / stats->allocs : 0);
fprintf (file, _("%d bitset_sets, %d cached (%.2f%%)\n"),
fprintf (file, _("%u bitset_sets, %u cached (%.2f%%)\n"),
stats->sets, stats->cache_sets,
stats->sets ? 100.0 * stats->cache_sets / stats->sets : 0);
fprintf (file, _("%d bitset_resets, %d cached (%.2f%%)\n"),
fprintf (file, _("%u bitset_resets, %u cached (%.2f%%)\n"),
stats->resets, stats->cache_resets,
stats->resets ? 100.0 * stats->cache_resets / stats->resets : 0);
fprintf (file, _("%d bitset_tests, %d cached (%.2f%%)\n"),
fprintf (file, _("%u bitset_tests, %u cached (%.2f%%)\n"),
stats->tests, stats->cache_tests,
stats->tests ? 100.0 * stats->cache_tests / stats->tests : 0);
fprintf (file, _("%d bitset_lists\n"), stats->lists);
fprintf (file, _("%u bitset_lists\n"), stats->lists);
bitset_log_histogram_print (file, name, _("count log histogram\n"),
BITSET_LOG_COUNT_BINS, stats->list_counts);
@@ -256,7 +265,6 @@ bitset_stats_print (file, verbose)
int verbose ATTRIBUTE_UNUSED;
{
int i;
static const char *names[] = BITSET_TYPE_NAMES;
if (!bitset_stats_info)
return;
@@ -264,10 +272,11 @@ bitset_stats_print (file, verbose)
fprintf (file, _("Bitset statistics:\n\n"));
if (bitset_stats_info->runs > 1)
fprintf (file, _("Accumulated runs = %d\n"), bitset_stats_info->runs);
fprintf (file, _("Accumulated runs = %u\n"), bitset_stats_info->runs);
for (i = 0; i < BITSET_TYPE_NUM; i++)
bitset_stats_print_1 (file, names[i], &bitset_stats_info->types[i]);
bitset_stats_print_1 (file, bitset_type_names[i],
&bitset_stats_info->types[i]);
}
@@ -404,6 +413,15 @@ bitset_stats_reset (dst, bitno)
}
static int
bitset_stats_toggle (src, bitno)
bitset src;
bitset_bindex bitno;
{
return BITSET_TOGGLE_ (src->s.bset, bitno);
}
static int
bitset_stats_test (src, bitno)
bitset src;
@@ -425,7 +443,7 @@ bitset_stats_test (src, bitno)
}
static int
static bitset_bindex
bitset_stats_size (src)
bitset src;
{
@@ -433,61 +451,255 @@ bitset_stats_size (src)
}
static int
bitset_stats_op1 (dst, op)
bitset dst;
enum bitset_ops op;
static bitset_bindex
bitset_stats_count (src)
bitset src;
{
return BITSET_OP1_ (dst->s.bset, op);
return BITSET_COUNT_ (src->s.bset);
}
static int
bitset_stats_op2 (dst, src, op)
bitset_stats_empty_p (dst)
bitset dst;
{
return BITSET_EMPTY_P_ (dst->s.bset);
}
static void
bitset_stats_ones (dst)
bitset dst;
{
BITSET_ONES_ (dst->s.bset);
}
static void
bitset_stats_zero (dst)
bitset dst;
{
BITSET_ZERO_ (dst->s.bset);
}
static void
bitset_stats_copy (dst, src)
bitset dst;
bitset src;
enum bitset_ops op;
{
BITSET_CHECK2_ (dst, src);
return BITSET_OP2_ (dst->s.bset, src->s.bset, op);
BITSET_COPY_ (dst->s.bset, src->s.bset);
}
static int
bitset_stats_op3 (dst, src1, src2, op)
bitset_stats_disjoint_p (dst, src)
bitset dst;
bitset src;
{
BITSET_CHECK2_ (dst, src);
return BITSET_DISJOINT_P_ (dst->s.bset, src->s.bset);
}
static int
bitset_stats_equal_p (dst, src)
bitset dst;
bitset src;
{
BITSET_CHECK2_ (dst, src);
return BITSET_EQUAL_P_ (dst->s.bset, src->s.bset);
}
static void
bitset_stats_not (dst, src)
bitset dst;
bitset src;
{
BITSET_CHECK2_ (dst, src);
BITSET_NOT_ (dst->s.bset, src->s.bset);
}
static int
bitset_stats_subset_p (dst, src)
bitset dst;
bitset src;
{
BITSET_CHECK2_ (dst, src);
return BITSET_SUBSET_P_ (dst->s.bset, src->s.bset);
}
static void
bitset_stats_and (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
enum bitset_ops op;
{
BITSET_CHECK3_ (dst, src1, src2);
return BITSET_OP3_ (dst->s.bset, src1->s.bset, src2->s.bset, op);
BITSET_AND_ (dst->s.bset, src1->s.bset, src2->s.bset);
}
static int
bitset_stats_op4 (dst, src1, src2, src3, op)
bitset_stats_and_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
BITSET_CHECK3_ (dst, src1, src2);
return BITSET_AND_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset);
}
static void
bitset_stats_andn (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
BITSET_CHECK3_ (dst, src1, src2);
BITSET_ANDN_ (dst->s.bset, src1->s.bset, src2->s.bset);
}
static int
bitset_stats_andn_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
BITSET_CHECK3_ (dst, src1, src2);
return BITSET_ANDN_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset);
}
static void
bitset_stats_or (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
BITSET_CHECK3_ (dst, src1, src2);
BITSET_OR_ (dst->s.bset, src1->s.bset, src2->s.bset);
}
static int
bitset_stats_or_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
BITSET_CHECK3_ (dst, src1, src2);
return BITSET_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset);
}
static void
bitset_stats_xor (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
BITSET_CHECK3_ (dst, src1, src2);
BITSET_XOR_ (dst->s.bset, src1->s.bset, src2->s.bset);
}
static int
bitset_stats_xor_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
BITSET_CHECK3_ (dst, src1, src2);
return BITSET_XOR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset);
}
static void
bitset_stats_and_or (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
enum bitset_ops op;
{
BITSET_CHECK4_ (dst, src1, src2, src3);
/* This is a bit of a hack. If the implementation handles
a four operand operation then vector to it, passing
the enclosed bitsets. Otherwise use the fallback
bitset_op4 routine. */
if (dst->s.bset->b.ops->op4 != bitset_op4)
return BITSET_OP4_ (dst->s.bset, src1->s.bset, src2->s.bset,
src3->s.bset, op);
return bitset_op4 (dst, src1, src2, src3, op);
BITSET_AND_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
}
static int
bitset_stats_and_or_cmp (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
BITSET_CHECK4_ (dst, src1, src2, src3);
return BITSET_AND_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
}
static void
bitset_stats_andn_or (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
BITSET_CHECK4_ (dst, src1, src2, src3);
BITSET_ANDN_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
}
static int
bitset_stats_andn_or_cmp (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
BITSET_CHECK4_ (dst, src1, src2, src3);
return BITSET_ANDN_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
}
static void
bitset_stats_or_and (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
BITSET_CHECK4_ (dst, src1, src2, src3);
BITSET_OR_AND_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
}
static int
bitset_stats_or_and_cmp (dst, src1, src2, src3)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
{
BITSET_CHECK4_ (dst, src1, src2, src3);
return BITSET_OR_AND_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
}
static bitset_bindex
bitset_stats_list (bset, list, num, next)
bitset bset;
bitset_bindex *list;
@@ -529,14 +741,14 @@ bitset_stats_list (bset, list, num, next)
}
static int
bitset_stats_reverse_list (bset, list, num, next)
static bitset_bindex
bitset_stats_list_reverse (bset, list, num, next)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
{
return BITSET_REVERSE_LIST_ (bset->s.bset, list, num, next);
return BITSET_LIST_REVERSE_ (bset->s.bset, list, num, next);
}
@@ -549,17 +761,37 @@ bitset_stats_free (bset)
}
struct bitset_ops_struct bitset_stats_ops = {
struct bitset_vtable bitset_stats_vtable = {
bitset_stats_set,
bitset_stats_reset,
bitset_stats_toggle,
bitset_stats_test,
bitset_stats_size,
bitset_stats_op1,
bitset_stats_op2,
bitset_stats_op3,
bitset_stats_op4,
bitset_stats_count,
bitset_stats_empty_p,
bitset_stats_ones,
bitset_stats_zero,
bitset_stats_copy,
bitset_stats_disjoint_p,
bitset_stats_equal_p,
bitset_stats_not,
bitset_stats_subset_p,
bitset_stats_and,
bitset_stats_and_cmp,
bitset_stats_andn,
bitset_stats_andn_cmp,
bitset_stats_or,
bitset_stats_or_cmp,
bitset_stats_xor,
bitset_stats_xor_cmp,
bitset_stats_and_or,
bitset_stats_and_or_cmp,
bitset_stats_andn_or,
bitset_stats_andn_or_cmp,
bitset_stats_or_and,
bitset_stats_or_and_cmp,
bitset_stats_list,
bitset_stats_reverse_list,
bitset_stats_list_reverse,
bitset_stats_free,
BITSET_STATS
};
@@ -574,9 +806,10 @@ bitset_stats_type_get (bset)
}
int bitset_stats_bytes (void)
size_t
bitset_stats_bytes (void)
{
return sizeof (struct bitset_struct);
return sizeof (struct bitset_stats_struct);
}
@@ -584,12 +817,12 @@ bitset
bitset_stats_init (bset, n_bits, type)
bitset bset;
bitset_bindex n_bits;
enum bitset_type type;
enum_bitset_type type;
{
unsigned int bytes;
size_t bytes;
bitset sbset;
bset->b.ops = &bitset_stats_ops;
bset->b.vtable = &bitset_stats_vtable;
/* Disable cache. */
bset->b.cindex = 0;
+2 -2
View File
@@ -25,9 +25,9 @@ extern int bitset_stats_enabled;
extern enum bitset_type bitset_stats_type_get PARAMS ((bitset));
extern int bitset_stats_bytes PARAMS ((void));
extern size_t bitset_stats_bytes PARAMS ((void));
extern bitset bitset_stats_init PARAMS ((bitset, bitset_bindex,
enum bitset_type));
enum_bitset_type));
#endif
+5 -5
View File
@@ -1,5 +1,5 @@
/* Bitset vectors.
Copyright (C) 2001 Free Software Foundation, Inc.
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of Bison.
@@ -32,8 +32,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
void
bitsetv_matrix_dump (FILE * out, const char *title, bitsetv bset)
{
size_t i, j;
size_t hsize = bitset_size (bset[0]);
bitset_bindex i, j;
bitset_bindex hsize = bitset_size (bset[0]);
/* Title. */
fprintf (out, "%s BEGIN\n", title);
@@ -45,7 +45,7 @@ bitsetv_matrix_dump (FILE * out, const char *title, bitsetv bset)
putc ('\n', out);
fputs (" ", out);
for (i = 0; i < hsize; ++i)
fprintf (out, "%d", i % 10);
fprintf (out, "%d", (int) (i % 10));
putc ('\n', out);
/* Bar. */
@@ -57,7 +57,7 @@ bitsetv_matrix_dump (FILE * out, const char *title, bitsetv bset)
/* Contents. */
for (i = 0; bset[i]; ++i)
{
fprintf (out, "%2d|", i);
fprintf (out, "%2lu|", (unsigned long) i);
for (j = 0; j < hsize; ++j)
fputs (bitset_test (bset[i], j) ? "1" : " ", out);
fputs ("|\n", out);
+27 -22
View File
@@ -1,5 +1,5 @@
/* Bitset vectors.
Copyright (C) 2001 Free Software Foundation, Inc.
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of GCC.
@@ -30,25 +30,30 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
type TYPE. */
bitset *
bitsetv_alloc (n_vecs, n_bits, type)
unsigned int n_vecs;
unsigned int n_bits;
enum bitset_type type;
bitset_bindex n_vecs;
bitset_bindex n_bits;
enum_bitset_type type;
{
unsigned int vector_bytes;
unsigned int bytes;
size_t vector_bytes;
size_t bytes;
bitset *bsetv;
unsigned int i;
bitset_bindex i;
/* Determine number of bytes for each set. */
bytes = bitset_bytes (type, n_bits);
/* If size calculation overflows, memory is exhausted. */
if (BITSET_SIZE_MAX / (sizeof (bitset) + bytes) <= n_vecs)
xalloc_die ();
/* Allocate vector table at head of bitset array. */
vector_bytes = (n_vecs + 1) * sizeof (bitset);
vector_bytes = (n_vecs + 1) * sizeof (bitset) + bytes - 1;
vector_bytes -= vector_bytes % bytes;
bsetv = (bitset *) xcalloc (1, vector_bytes + bytes * n_vecs);
for (i = 0; i < n_vecs; i++)
{
bsetv[i] = (bitset) ((char *) bsetv + vector_bytes + i * bytes);
bsetv[i] = (bitset) (void *) ((char *) bsetv + vector_bytes + i * bytes);
bitset_init (bsetv[i], n_bits, type);
}
@@ -63,8 +68,8 @@ bitsetv_alloc (n_vecs, n_bits, type)
attribute hints specified by ATTR. */
bitset *
bitsetv_create (n_vecs, n_bits, attr)
unsigned int n_vecs;
unsigned int n_bits;
bitset_bindex n_vecs;
bitset_bindex n_bits;
unsigned int attr;
{
enum bitset_type type;
@@ -79,7 +84,7 @@ void
bitsetv_free (bsetv)
bitset *bsetv;
{
unsigned int i;
bitset_bindex i;
for (i = 0; bsetv[i]; i++)
BITSET_FREE_ (bsetv[i]);
@@ -90,9 +95,9 @@ bitsetv_free (bsetv)
/* Zero a vector of bitsets. */
void
bitsetv_zero (bsetv)
struct bitset_struct **bsetv;
bitsetv bsetv;
{
unsigned int i;
bitset_bindex i;
for (i = 0; bsetv[i]; i++)
bitset_zero (bsetv[i]);
@@ -104,7 +109,7 @@ void
bitsetv_ones (bsetv)
bitset *bsetv;
{
unsigned int i;
bitset_bindex i;
for (i = 0; bsetv[i]; i++)
bitset_ones (bsetv[i]);
@@ -117,8 +122,8 @@ void
bitsetv_transitive_closure (bsetv)
bitset *bsetv;
{
unsigned int i;
unsigned int j;
bitset_bindex i;
bitset_bindex j;
for (i = 0; bsetv[i]; i++)
for (j = 0; bsetv[j]; j++)
@@ -134,7 +139,7 @@ bitsetv_transitive_closure (bsetv)
void
bitsetv_reflexive_transitive_closure (bitsetv bsetv)
{
int i;
bitset_bindex i;
bitsetv_transitive_closure (bsetv);
for (i = 0; bsetv[i]; i++)
@@ -150,12 +155,12 @@ bitsetv_dump (file, title, subtitle, bsetv)
const char *title, *subtitle;
bitset *bsetv;
{
unsigned int i;
bitset_windex i;
fprintf (file, "%s\n", title);
for (i = 0; bsetv[i]; i++)
{
fprintf (file, "%s %d\n", subtitle, i);
fprintf (file, "%s %lu\n", subtitle, (unsigned long) i);
bitset_dump (file, bsetv[i]);
}
@@ -167,11 +172,11 @@ void
debug_bitsetv (bsetv)
bitset *bsetv;
{
unsigned int i;
bitset_windex i;
for (i = 0; bsetv[i]; i++)
{
fprintf (stderr, "%d: ", i);
fprintf (stderr, "%lu: ", (unsigned long) i);
debug_bitset (bsetv[i]);
}
+3 -3
View File
@@ -25,12 +25,12 @@ typedef bitset * bitsetv;
/* Create a vector of N_VECS bitsets, each of N_BITS, and of
type TYPE. */
extern bitsetv bitsetv_alloc PARAMS ((unsigned int, unsigned int,
enum bitset_type));
extern bitsetv bitsetv_alloc PARAMS ((bitset_bindex, bitset_bindex,
enum_bitset_type));
/* Create a vector of N_VECS bitsets, each of N_BITS, and with
attribute hints specified by ATTR. */
extern bitsetv bitsetv_create PARAMS ((unsigned int, unsigned int,
extern bitsetv bitsetv_create PARAMS ((bitset_bindex, bitset_bindex,
unsigned int));
/* Free vector of bitsets. */
+351 -237
View File
@@ -40,7 +40,7 @@
be zero.
The bitset cache can be disabled either by setting cindex to
some large number or by setting csize to 0. Here
BITSET_WINDEX_MAX or by setting csize to 0. Here
we use the former approach since cindex needs to be updated whenever
cdata is changed.
*/
@@ -68,14 +68,6 @@ ebitset_elt;
typedef ebitset_elt *ebitset_elts;
/* Head of ebitset linked list. */
typedef struct ebitset_struct
{
unsigned int size; /* Number of elements. */
ebitset_elts *elts; /* Expanding array of pointers to elements. */
}
*ebitset;
/* Number of elements to initially allocate. */
@@ -89,14 +81,9 @@ typedef struct ebitset_struct
#define EBITSET_GROW_SIZE 4
#endif
struct bitset_struct
{
struct bbitset_struct b;
struct ebitset_struct e;
};
enum ebitset_find_mode
{ EBITSET_FIND, EBITSET_CREATE, EBITSET_SUBST };
typedef int enum_ebitset_find_mode;
static ebitset_elt ebitset_zero_elts[1]; /* Elements of all zero bits. */
@@ -105,33 +92,45 @@ static struct obstack ebitset_obstack;
static int ebitset_obstack_init = 0;
static ebitset_elt *ebitset_free_list; /* Free list of bitset elements. */
static void ebitset_elts_grow PARAMS ((bitset, unsigned int));
static void ebitset_elts_grow PARAMS ((bitset, bitset_windex));
static ebitset_elt *ebitset_elt_alloc PARAMS ((void));
static ebitset_elt *ebitset_elt_calloc PARAMS ((void));
static void ebitset_elt_add PARAMS ((bitset, ebitset_elt *, unsigned int));
static void ebitset_elt_remove PARAMS ((bitset, unsigned int));
static void ebitset_elt_add PARAMS ((bitset, ebitset_elt *, bitset_windex));
static void ebitset_elt_remove PARAMS ((bitset, bitset_windex));
static void ebitset_elt_free PARAMS ((ebitset_elt *));
static ebitset_elt *ebitset_elt_find PARAMS ((bitset, bitset_windex,
enum ebitset_find_mode));
enum_ebitset_find_mode));
static ebitset_elt *ebitset_elt_last PARAMS ((bitset));
static int ebitset_elt_zero_p PARAMS ((ebitset_elt *));
static int ebitset_weed PARAMS ((bitset));
static bitset_windex ebitset_weed PARAMS ((bitset));
static void ebitset_zero PARAMS ((bitset));
static int ebitset_equal_p PARAMS ((bitset, bitset));
static void ebitset_copy PARAMS ((bitset, bitset));
static int ebitset_copy_compare PARAMS ((bitset, bitset));
static void ebitset_copy_ PARAMS ((bitset, bitset));
static int ebitset_copy_cmp PARAMS ((bitset, bitset));
static void ebitset_set PARAMS ((bitset, bitset_bindex));
static void ebitset_reset PARAMS ((bitset, bitset_bindex));
static int ebitset_test PARAMS ((bitset, bitset_bindex));
static int ebitset_size PARAMS ((bitset));
static int ebitset_op1 PARAMS ((bitset, enum bitset_ops));
static int ebitset_op2 PARAMS ((bitset, bitset, enum bitset_ops));
static int ebitset_op3 PARAMS ((bitset, bitset, bitset, enum bitset_ops));
static int ebitset_list PARAMS ((bitset, bitset_bindex *, bitset_bindex,
bitset_bindex *));
static int ebitset_reverse_list
static bitset_bindex ebitset_size PARAMS ((bitset));
static int ebitset_disjoint_p PARAMS ((bitset, bitset));
static int ebitset_equal_p PARAMS ((bitset, bitset));
static void ebitset_not PARAMS ((bitset, bitset));
static int ebitset_subset_p PARAMS ((bitset, bitset));
static int ebitset_op3_cmp PARAMS ((bitset, bitset, bitset, enum_bitset_ops));
static void ebitset_and PARAMS ((bitset, bitset, bitset));
static int ebitset_and_cmp PARAMS ((bitset, bitset, bitset));
static void ebitset_andn PARAMS ((bitset, bitset, bitset));
static int ebitset_andn_cmp PARAMS ((bitset, bitset, bitset));
static void ebitset_or PARAMS ((bitset, bitset, bitset));
static int ebitset_or_cmp PARAMS ((bitset, bitset, bitset));
static void ebitset_xor PARAMS ((bitset, bitset, bitset));
static int ebitset_xor_cmp PARAMS ((bitset, bitset, bitset));
static void ebitset_copy PARAMS ((bitset, bitset));
static bitset_bindex ebitset_list PARAMS ((bitset, bitset_bindex *,
bitset_bindex, bitset_bindex *));
static bitset_bindex ebitset_list_reverse
PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
static void ebitset_ones PARAMS ((bitset));
static int ebitset_empty_p PARAMS ((bitset));
static void ebitset_free PARAMS ((bitset));
#define EBITSET_ELTS(BSET) ((BSET)->e.elts)
@@ -141,10 +140,10 @@ static void ebitset_free PARAMS ((bitset));
#define EBITSET_WORDS(ELT) ((ELT)->u.words)
/* Disable bitset cache and mark BSET as being zero. */
#define EBITSET_OP_ZERO_SET(BSET) ((BSET)->b.cindex = BITSET_INDEX_MAX, \
#define EBITSET_ZERO_SET(BSET) ((BSET)->b.cindex = BITSET_WINDEX_MAX, \
(BSET)->b.cdata = 0)
#define EBITSET_CACHE_DISABLE(BSET) ((BSET)->b.cindex = BITSET_INDEX_MAX)
#define EBITSET_CACHE_DISABLE(BSET) ((BSET)->b.cindex = BITSET_WINDEX_MAX)
/* Disable bitset cache and mark BSET as being possibly non-zero. */
#define EBITSET_NONZERO_SET(BSET) \
@@ -152,7 +151,7 @@ static void ebitset_free PARAMS ((bitset));
/* A conservative estimate of whether the bitset is zero.
This is non-zero only if we know for sure that the bitset is zero. */
#define EBITSET_OP_ZERO_P(BSET) ((BSET)->b.cdata == 0)
#define EBITSET_ZERO_P(BSET) ((BSET)->b.cdata == 0)
/* Enable cache to point to element with table index EINDEX.
The element must exist. */
@@ -165,14 +164,17 @@ static void ebitset_free PARAMS ((bitset));
static void
ebitset_elts_grow (bset, size)
bitset bset;
unsigned int size;
bitset_windex size;
{
unsigned int oldsize;
unsigned int newsize;
bitset_windex oldsize;
bitset_windex newsize;
oldsize = EBITSET_SIZE (bset);
newsize = oldsize + size;
if (BITSET_SIZE_MAX / sizeof (ebitset_elt *) < newsize)
xalloc_die ();
EBITSET_ELTS (bset) = xrealloc (EBITSET_ELTS (bset),
newsize * sizeof (ebitset_elt *));
EBITSET_SIZE (bset) = newsize;
@@ -261,7 +263,7 @@ ebitset_elt_free (elt)
static inline void
ebitset_elt_remove (bset, eindex)
bitset bset;
unsigned int eindex;
bitset_windex eindex;
{
ebitset_elts *elts;
ebitset_elt *elt;
@@ -280,7 +282,7 @@ static inline void
ebitset_elt_add (bset, elt, eindex)
bitset bset;
ebitset_elt *elt;
unsigned int eindex;
bitset_windex eindex;
{
ebitset_elts *elts;
@@ -309,11 +311,11 @@ static ebitset_elt *
ebitset_elt_find (bset, windex, mode)
bitset bset;
bitset_windex windex;
enum ebitset_find_mode mode;
enum_ebitset_find_mode mode;
{
ebitset_elt *elt;
bitset_windex size;
unsigned int eindex;
bitset_windex eindex;
ebitset_elts *elts;
eindex = windex / EBITSET_ELT_WORDS;
@@ -343,7 +345,7 @@ ebitset_elt_find (bset, windex, mode)
case EBITSET_CREATE:
if (eindex >= size)
{
unsigned int extra;
bitset_windex extra;
extra = eindex - size + 1;
@@ -387,15 +389,15 @@ ebitset_elt_last (bset)
/* Weed out the zero elements from the elts. */
static inline int
static inline bitset_windex
ebitset_weed (bset)
bitset bset;
{
ebitset_elts *elts;
bitset_windex j;
int count;
bitset_windex count;
if (EBITSET_OP_ZERO_P (bset))
if (EBITSET_ZERO_P (bset))
return 0;
elts = EBITSET_ELTS (bset);
@@ -421,7 +423,7 @@ ebitset_weed (bset)
{
/* All the bits are zero. We could shrink the elts.
For now just mark BSET as known to be zero. */
EBITSET_OP_ZERO_SET (bset);
EBITSET_ZERO_SET (bset);
}
else
EBITSET_NONZERO_SET (bset);
@@ -438,7 +440,7 @@ ebitset_zero (bset)
ebitset_elts *elts;
bitset_windex j;
if (EBITSET_OP_ZERO_P (bset))
if (EBITSET_ZERO_P (bset))
return;
elts = EBITSET_ELTS (bset);
@@ -452,7 +454,7 @@ ebitset_zero (bset)
/* All the bits are zero. We could shrink the elts.
For now just mark BSET as known to be zero. */
EBITSET_OP_ZERO_SET (bset);
EBITSET_ZERO_SET (bset);
}
@@ -498,7 +500,7 @@ ebitset_equal_p (dst, src)
/* Copy bits from bitset SRC to bitset DST. */
static inline void
ebitset_copy (dst, src)
ebitset_copy_ (dst, src)
bitset dst;
bitset src;
{
@@ -537,29 +539,29 @@ ebitset_copy (dst, src)
/* Copy bits from bitset SRC to bitset DST. Return non-zero if
bitsets different. */
static inline int
ebitset_copy_compare (dst, src)
ebitset_copy_cmp (dst, src)
bitset dst;
bitset src;
{
if (src == dst)
return 0;
if (EBITSET_OP_ZERO_P (dst))
if (EBITSET_ZERO_P (dst))
{
ebitset_copy (dst, src);
return !EBITSET_OP_ZERO_P (src);
ebitset_copy_ (dst, src);
return !EBITSET_ZERO_P (src);
}
if (ebitset_equal_p (dst, src))
return 0;
ebitset_copy (dst, src);
ebitset_copy_ (dst, src);
return 1;
}
/* Return size in bits of bitset SRC. */
static int
static bitset_bindex
ebitset_size (src)
bitset src;
{
@@ -631,8 +633,8 @@ ebitset_free (bset)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT and store in array LIST. Return with actual number of bits
found and with *NEXT indicating where search stopped. */
static int
ebitset_reverse_list (bset, list, num, next)
static bitset_bindex
ebitset_list_reverse (bset, list, num, next)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
@@ -644,13 +646,13 @@ ebitset_reverse_list (bset, list, num, next)
unsigned int bcount;
bitset_bindex boffset;
bitset_windex windex;
unsigned int eindex;
bitset_windex eindex;
bitset_windex woffset;
bitset_bindex count;
bitset_windex size;
ebitset_elts *elts;
if (EBITSET_OP_ZERO_P (bset))
if (EBITSET_ZERO_P (bset))
return 0;
size = EBITSET_SIZE (bset);
@@ -678,20 +680,19 @@ ebitset_reverse_list (bset, list, num, next)
do
{
ebitset_elt *elt;
bitset_word *srcp;
elt = elts[eindex];
if (elt)
{
bitset_word *srcp;
{
srcp = EBITSET_WORDS (elt);
do
{
bitset_word word;
word = srcp[woffset] << (BITSET_WORD_BITS - 1 - bcount);
for (; word; bcount--)
{
if (word & BITSET_MSB)
@@ -705,15 +706,13 @@ ebitset_reverse_list (bset, list, num, next)
}
word <<= 1;
}
boffset -= BITSET_WORD_BITS;
bcount = BITSET_WORD_BITS - 1;
bcount = BITSET_WORD_BITS - 1;
}
while (woffset--);
woffset = EBITSET_ELT_WORDS;
}
woffset = EBITSET_ELT_WORDS - 1;
boffset = eindex * EBITSET_ELT_BITS - BITSET_WORD_BITS;
}
while (eindex--);
@@ -726,7 +725,7 @@ ebitset_reverse_list (bset, list, num, next)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT and store in array LIST. Return with actual number of bits
found and with *NEXT indicating where search stopped. */
static int
static bitset_bindex
ebitset_list (bset, list, num, next)
bitset bset;
bitset_bindex *list;
@@ -735,14 +734,14 @@ ebitset_list (bset, list, num, next)
{
bitset_bindex bitno;
bitset_windex windex;
unsigned int eindex;
bitset_windex eindex;
bitset_bindex count;
bitset_windex size;
ebitset_elt *elt;
bitset_word word;
ebitset_elts *elts;
if (EBITSET_OP_ZERO_P (bset))
if (EBITSET_ZERO_P (bset))
return 0;
bitno = *next;
@@ -763,7 +762,7 @@ ebitset_list (bset, list, num, next)
bitset_word *srcp = EBITSET_WORDS (elt);
windex = bitno / BITSET_WORD_BITS;
woffset = eindex / EBITSET_ELT_WORDS;
woffset = eindex * EBITSET_ELT_WORDS;
for (; (windex - woffset) < EBITSET_ELT_WORDS; windex++)
{
@@ -866,160 +865,149 @@ ebitset_list (bset, list, num, next)
}
static int
ebitset_op1 (dst, op)
static void
ebitset_ones (dst)
bitset dst;
enum bitset_ops op;
{
bitset_windex j;
ebitset_elt *elt;
switch (op)
for (j = 0; j < EBITSET_SIZE (dst); j++)
{
case BITSET_OP_ZERO:
ebitset_zero (dst);
return 1;
case BITSET_OP_ONES:
for (j = 0; j < EBITSET_SIZE (dst); j++)
{
/* Create new elements if they cannot be found. Perhaps
we should just add pointers to a ones element. */
elt =
ebitset_elt_find (dst, j * EBITSET_ELT_WORDS, EBITSET_CREATE);
memset (EBITSET_WORDS (elt), -1, sizeof (EBITSET_WORDS (elt)));
}
break;
case BITSET_OP_EMPTY_P:
return !ebitset_weed (dst);
default:
abort ();
/* Create new elements if they cannot be found. Perhaps
we should just add pointers to a ones element. */
elt =
ebitset_elt_find (dst, j * EBITSET_ELT_WORDS, EBITSET_CREATE);
memset (EBITSET_WORDS (elt), -1, sizeof (EBITSET_WORDS (elt)));
}
EBITSET_NONZERO_SET (dst);
return 1;
}
static int
ebitset_op2 (dst, src, op)
ebitset_empty_p (dst)
bitset dst;
{
return !ebitset_weed (dst);
}
static void
ebitset_not (dst, src)
bitset dst;
bitset src;
enum bitset_ops op;
{
unsigned int i;
ebitset_elt *selt;
ebitset_elt *delt;
unsigned int i;
bitset_windex j;
switch (op)
for (j = 0; j < EBITSET_SIZE (src); j++)
{
case BITSET_OP_COPY:
ebitset_copy (dst, src);
break;
case BITSET_OP_NOT:
for (j = 0; j < EBITSET_SIZE (src); j++)
{
/* Create new elements for dst if they cannot be found
/* Create new elements for dst if they cannot be found
or substitute zero elements if src elements not found. */
selt =
ebitset_elt_find (dst, j * EBITSET_ELT_WORDS, EBITSET_SUBST);
delt =
ebitset_elt_find (dst, j * EBITSET_ELT_WORDS, EBITSET_CREATE);
selt =
ebitset_elt_find (dst, j * EBITSET_ELT_WORDS, EBITSET_SUBST);
delt =
ebitset_elt_find (dst, j * EBITSET_ELT_WORDS, EBITSET_CREATE);
for (i = 0; i < EBITSET_ELT_WORDS; i++)
EBITSET_WORDS (delt)[i] = ~EBITSET_WORDS (selt)[i];
}
break;
/* Return 1 if DST == SRC. */
case BITSET_OP_EQUAL_P:
return ebitset_equal_p (dst, src);
/* Return 1 if DST == DST | SRC. */
case BITSET_OP_SUBSET_P:
{
ebitset_elts *selts;
ebitset_elts *delts;
bitset_windex ssize;
bitset_windex dsize;
selts = EBITSET_ELTS (src);
delts = EBITSET_ELTS (dst);
ssize = EBITSET_SIZE (src);
dsize = EBITSET_SIZE (dst);
for (j = 0; j < ssize; j++)
{
selt = j < ssize ? selts[j] : 0;
delt = j < dsize ? delts[j] : 0;
if (!selt && !delt)
continue;
if (!selt)
selt = &ebitset_zero_elts[0];
if (!delt)
delt = &ebitset_zero_elts[0];
for (i = 0; i < EBITSET_ELT_WORDS; i++)
if (EBITSET_WORDS (delt)[i]
!= (EBITSET_WORDS (selt)[i] | EBITSET_WORDS (delt)[i]))
return 0;
}
return 1;
}
break;
/* Return 1 if DST & SRC == 0. */
case BITSET_OP_DISJOINT_P:
{
ebitset_elts *selts;
ebitset_elts *delts;
bitset_windex ssize;
bitset_windex dsize;
selts = EBITSET_ELTS (src);
delts = EBITSET_ELTS (dst);
ssize = EBITSET_SIZE (src);
dsize = EBITSET_SIZE (dst);
for (j = 0; j < ssize; j++)
{
selt = j < ssize ? selts[j] : 0;
delt = j < dsize ? delts[j] : 0;
if (!selt || !delt)
continue;
for (i = 0; i < EBITSET_ELT_WORDS; i++)
if ((EBITSET_WORDS (selt)[i] & EBITSET_WORDS (delt)[i]))
return 0;
}
return 1;
}
break;
default:
abort ();
for (i = 0; i < EBITSET_ELT_WORDS; i++)
EBITSET_WORDS (delt)[i] = ~EBITSET_WORDS (selt)[i];
}
EBITSET_NONZERO_SET (dst);
}
/* Return 1 if DST == DST | SRC. */
static int
ebitset_subset_p (dst, src)
bitset dst;
bitset src;
{
bitset_windex j;
ebitset_elts *selts;
ebitset_elts *delts;
bitset_windex ssize;
bitset_windex dsize;
selts = EBITSET_ELTS (src);
delts = EBITSET_ELTS (dst);
ssize = EBITSET_SIZE (src);
dsize = EBITSET_SIZE (dst);
for (j = 0; j < ssize; j++)
{
unsigned int i;
ebitset_elt *selt;
ebitset_elt *delt;
selt = j < ssize ? selts[j] : 0;
delt = j < dsize ? delts[j] : 0;
if (!selt && !delt)
continue;
if (!selt)
selt = &ebitset_zero_elts[0];
if (!delt)
delt = &ebitset_zero_elts[0];
for (i = 0; i < EBITSET_ELT_WORDS; i++)
if (EBITSET_WORDS (delt)[i]
!= (EBITSET_WORDS (selt)[i] | EBITSET_WORDS (delt)[i]))
return 0;
}
return 1;
}
/* Return 1 if DST & SRC == 0. */
static int
ebitset_op3 (dst, src1, src2, op)
ebitset_disjoint_p (dst, src)
bitset dst;
bitset src;
{
bitset_windex j;
ebitset_elts *selts;
ebitset_elts *delts;
bitset_windex ssize;
bitset_windex dsize;
selts = EBITSET_ELTS (src);
delts = EBITSET_ELTS (dst);
ssize = EBITSET_SIZE (src);
dsize = EBITSET_SIZE (dst);
for (j = 0; j < ssize; j++)
{
unsigned int i;
ebitset_elt *selt;
ebitset_elt *delt;
selt = j < ssize ? selts[j] : 0;
delt = j < dsize ? delts[j] : 0;
if (!selt || !delt)
continue;
for (i = 0; i < EBITSET_ELT_WORDS; i++)
if ((EBITSET_WORDS (selt)[i] & EBITSET_WORDS (delt)[i]))
return 0;
}
return 1;
}
static int
ebitset_op3_cmp (dst, src1, src2, op)
bitset dst;
bitset src1;
bitset src2;
enum bitset_ops op;
enum_bitset_ops op;
{
bitset_windex ssize1;
bitset_windex ssize2;
@@ -1035,37 +1023,6 @@ ebitset_op3 (dst, src1, src2, op)
unsigned int i;
bitset_windex j;
/* Fast track common, simple cases. */
if (EBITSET_OP_ZERO_P (src2))
{
if (op == BITSET_OP_AND)
{
ebitset_weed (dst);
changed = EBITSET_OP_ZERO_P (dst);
ebitset_zero (dst);
return changed;
}
else if (op == BITSET_OP_ANDN || op == BITSET_OP_OR
|| op == BITSET_OP_XOR)
{
return ebitset_copy_compare (dst, src1);
}
}
else if (EBITSET_OP_ZERO_P (src1))
{
if (op == BITSET_OP_AND || op == BITSET_OP_ANDN)
{
ebitset_weed (dst);
changed = EBITSET_OP_ZERO_P (dst);
ebitset_zero (dst);
return changed;
}
else if (op == BITSET_OP_OR || op == BITSET_OP_XOR)
{
return ebitset_copy_compare (dst, src2);
}
}
ssize1 = EBITSET_SIZE (src1);
ssize2 = EBITSET_SIZE (src2);
dsize = EBITSET_SIZE (dst);
@@ -1198,29 +1155,186 @@ ebitset_op3 (dst, src1, src2, op)
}
static void
ebitset_and (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
ebitset_and_cmp (dst, src1, src2);
}
static int
ebitset_and_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
int changed;
if (EBITSET_ZERO_P (src2))
{
ebitset_weed (dst);
changed = EBITSET_ZERO_P (dst);
ebitset_zero (dst);
return changed;
}
else if (EBITSET_ZERO_P (src1))
{
ebitset_weed (dst);
changed = EBITSET_ZERO_P (dst);
ebitset_zero (dst);
return changed;
}
return ebitset_op3_cmp (dst, src1, src2, BITSET_OP_AND);
}
static void
ebitset_andn (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
ebitset_andn_cmp (dst, src1, src2);
}
static int
ebitset_andn_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
int changed;
if (EBITSET_ZERO_P (src2))
{
return ebitset_copy_cmp (dst, src1);
}
else if (EBITSET_ZERO_P (src1))
{
ebitset_weed (dst);
changed = EBITSET_ZERO_P (dst);
ebitset_zero (dst);
return changed;
}
return ebitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN);
}
static void
ebitset_or (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
ebitset_or_cmp (dst, src1, src2);
}
static int
ebitset_or_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
if (EBITSET_ZERO_P (src2))
{
return ebitset_copy_cmp (dst, src1);
}
else if (EBITSET_ZERO_P (src1))
{
return ebitset_copy_cmp (dst, src2);
}
return ebitset_op3_cmp (dst, src1, src2, BITSET_OP_OR);
}
static void
ebitset_xor (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
ebitset_xor_cmp (dst, src1, src2);
}
static int
ebitset_xor_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
if (EBITSET_ZERO_P (src2))
{
return ebitset_copy_cmp (dst, src1);
}
else if (EBITSET_ZERO_P (src1))
{
return ebitset_copy_cmp (dst, src2);
}
return ebitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR);
}
static void
ebitset_copy (dst, src)
bitset dst;
bitset src;
{
if (BITSET_COMPATIBLE_ (dst, src))
ebitset_copy_ (dst, src);
else
bitset_copy_ (dst, src);
}
/* Vector of operations for linked-list bitsets. */
struct bitset_ops_struct ebitset_ops = {
struct bitset_vtable ebitset_vtable = {
ebitset_set,
ebitset_reset,
bitset_toggle_,
ebitset_test,
ebitset_size,
ebitset_op1,
ebitset_op2,
ebitset_op3,
bitset_op4,
bitset_count_,
ebitset_empty_p,
ebitset_ones,
ebitset_zero,
ebitset_copy,
ebitset_disjoint_p,
ebitset_equal_p,
ebitset_not,
ebitset_subset_p,
ebitset_and,
ebitset_and_cmp,
ebitset_andn,
ebitset_andn_cmp,
ebitset_or,
ebitset_or_cmp,
ebitset_xor,
ebitset_xor_cmp,
bitset_and_or_,
bitset_and_or_cmp_,
bitset_andn_or_,
bitset_andn_or_cmp_,
bitset_or_and_,
bitset_or_and_cmp_,
ebitset_list,
ebitset_reverse_list,
ebitset_list_reverse,
ebitset_free,
BITSET_TABLE
};
/* Return size of initial structure. */
int
size_t
ebitset_bytes (n_bits)
bitset_bindex n_bits ATTRIBUTE_UNUSED;
{
return sizeof (struct bitset_struct);
return sizeof (struct ebitset_struct);
}
@@ -1231,13 +1345,13 @@ ebitset_init (bset, n_bits)
bitset bset;
bitset_bindex n_bits;
{
unsigned int size;
bitset_windex size;
bset->b.ops = &ebitset_ops;
bset->b.vtable = &ebitset_vtable;
bset->b.csize = EBITSET_ELT_WORDS;
EBITSET_OP_ZERO_SET (bset);
EBITSET_ZERO_SET (bset);
size = n_bits ? (n_bits + EBITSET_ELT_BITS - 1) / EBITSET_ELT_BITS
: EBITSET_INITIAL_SIZE;
+2 -2
View File
@@ -19,9 +19,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef _EBITSET_H
#define _EBITSET_H
#include "bbitset.h"
#include "bitset.h"
extern int ebitset_bytes PARAMS ((bitset_bindex));
extern size_t ebitset_bytes PARAMS ((bitset_bindex));
extern bitset ebitset_init PARAMS ((bitset, bitset_bindex));
+381 -222
View File
@@ -23,7 +23,9 @@
#include "lbitset.h"
#include "obstack.h"
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
/* This file implements linked-list bitsets. These bitsets can be of
arbitrary length and are more efficient than arrays of bits for
@@ -62,24 +64,9 @@ typedef struct lbitset_elt_struct
lbitset_elt;
/* Head of lbitset linked list. */
typedef struct lbitset_struct
{
lbitset_elt *head; /* First element in linked list. */
lbitset_elt *tail; /* Last element in linked list. */
}
*lbitset;
struct bitset_struct
{
struct bbitset_struct b;
struct lbitset_struct l;
};
enum lbitset_find_mode
{ LBITSET_FIND, LBITSET_CREATE, LBITSET_SUBST };
typedef int enum_lbitset_find_mode;
static lbitset_elt lbitset_zero_elts[3]; /* Elements of all zero bits. */
@@ -94,7 +81,7 @@ static void lbitset_elt_link PARAMS ((bitset, lbitset_elt *));
static void lbitset_elt_unlink PARAMS ((bitset, lbitset_elt *));
static void lbitset_elt_free PARAMS ((lbitset_elt *));
static lbitset_elt *lbitset_elt_find PARAMS ((bitset, bitset_windex,
enum lbitset_find_mode));
enum_lbitset_find_mode));
static int lbitset_elt_zero_p PARAMS ((lbitset_elt *));
static void lbitset_prune PARAMS ((bitset, lbitset_elt *));
@@ -102,22 +89,34 @@ static void lbitset_weed PARAMS ((bitset));
static void lbitset_zero PARAMS ((bitset));
static int lbitset_equal_p PARAMS ((bitset, bitset));
static void lbitset_copy PARAMS ((bitset, bitset));
static int lbitset_copy_compare PARAMS ((bitset, bitset));
static int lbitset_copy_cmp PARAMS ((bitset, bitset));
static void lbitset_set PARAMS ((bitset, bitset_bindex));
static void lbitset_reset PARAMS ((bitset, bitset_bindex));
static int lbitset_test PARAMS ((bitset, bitset_bindex));
static int lbitset_size PARAMS ((bitset));
static int lbitset_op1 PARAMS ((bitset, enum bitset_ops));
static int lbitset_op2 PARAMS ((bitset, bitset, enum bitset_ops));
static int lbitset_op3 PARAMS ((bitset, bitset, bitset, enum bitset_ops));
static int lbitset_list PARAMS ((bitset, bitset_bindex *, bitset_bindex,
bitset_bindex *));
static int lbitset_reverse_list
static bitset_bindex lbitset_size PARAMS ((bitset));
static int lbitset_op3_cmp PARAMS ((bitset, bitset, bitset, enum_bitset_ops));
static void lbitset_and PARAMS ((bitset, bitset, bitset));
static int lbitset_and_cmp PARAMS ((bitset, bitset, bitset));
static void lbitset_andn PARAMS ((bitset, bitset, bitset));
static int lbitset_andn_cmp PARAMS ((bitset, bitset, bitset));
static void lbitset_or PARAMS ((bitset, bitset, bitset));
static int lbitset_or_cmp PARAMS ((bitset, bitset, bitset));
static void lbitset_xor PARAMS ((bitset, bitset, bitset));
static int lbitset_xor_cmp PARAMS ((bitset, bitset, bitset));
static bitset_bindex lbitset_list PARAMS ((bitset, bitset_bindex *,
bitset_bindex, bitset_bindex *));
static bitset_bindex lbitset_list_reverse
PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
static int lbitset_empty_p PARAMS ((bitset));
static void lbitset_ones PARAMS ((bitset));
static void lbitset_not PARAMS ((bitset, bitset));
static int lbitset_subset_p PARAMS ((bitset, bitset));
static int lbitset_disjoint_p PARAMS ((bitset, bitset));
static void lbitset_free PARAMS ((bitset));
extern void debug_lbitset PARAMS ((bitset));
#define LBITSET_CURRENT1(X) (lbitset_elt *)((char *)(X) + ((char *)&(((lbitset_elt *)(X))->next) - (char *)&(((lbitset_elt *)(X))->words)))
#define LBITSET_CURRENT1(X) \
((lbitset_elt *) (void *) ((char *) (X) - offsetof (lbitset_elt, words)))
#define LBITSET_CURRENT(X) LBITSET_CURRENT1((X)->b.cdata)
@@ -365,7 +364,7 @@ static lbitset_elt *
lbitset_elt_find (bset, windex, mode)
bitset bset;
bitset_windex windex;
enum lbitset_find_mode mode;
enum_lbitset_find_mode mode;
{
lbitset_elt *elt;
lbitset_elt *current;
@@ -398,7 +397,7 @@ lbitset_elt_find (bset, windex, mode)
continue;
}
/* `element' is the nearest to the one we want. If it's not the one
/* ELT is the nearest to the one we want. If it's not the one
we want, the one we want does not exist. */
if (elt && (windex - elt->index) < LBITSET_ELT_WORDS)
{
@@ -415,7 +414,7 @@ lbitset_elt_find (bset, windex, mode)
return 0;
case LBITSET_CREATE:
windex = (windex / (unsigned) LBITSET_ELT_WORDS) * LBITSET_ELT_WORDS;
windex -= windex % LBITSET_ELT_WORDS;
elt = lbitset_elt_calloc ();
elt->index = windex;
@@ -449,7 +448,7 @@ lbitset_weed (bset)
/* Set all bits in the bitset to zero. */
static inline void
static void
lbitset_zero (bset)
bitset bset;
{
@@ -464,6 +463,7 @@ lbitset_zero (bset)
}
/* Return 1 if DST == SRC. */
static inline int
lbitset_equal_p (dst, src)
bitset dst;
@@ -538,7 +538,7 @@ lbitset_copy (dst, src)
/* Copy bits from bitset SRC to bitset DST. Return non-zero if
bitsets different. */
static inline int
lbitset_copy_compare (dst, src)
lbitset_copy_cmp (dst, src)
bitset dst;
bitset src;
{
@@ -560,7 +560,7 @@ lbitset_copy_compare (dst, src)
/* Return size in bits of bitset SRC. */
static int
static bitset_bindex
lbitset_size (src)
bitset src;
{
@@ -635,8 +635,8 @@ lbitset_free (bset)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT and store in array LIST. Return with actual number of bits
found and with *NEXT indicating where search stopped. */
static int
lbitset_reverse_list (bset, list, num, next)
static bitset_bindex
lbitset_list_reverse (bset, list, num, next)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
@@ -673,13 +673,24 @@ lbitset_reverse_list (bset, list, num, next)
if (!elt)
return 0;
/* If num is 1, we could speed things up with a binary search
of the word of interest. */
if (windex >= elt->index + LBITSET_ELT_WORDS)
{
/* We are trying to start in no-mans land so start
at end of current elt. */
bcount = BITSET_WORD_BITS - 1;
windex = elt->index + LBITSET_ELT_WORDS - 1;
}
else
{
bcount = bitno % BITSET_WORD_BITS;
}
count = 0;
bcount = bitno % BITSET_WORD_BITS;
boffset = windex * BITSET_WORD_BITS;
/* If num is 1, we could speed things up with a binary search
of the word of interest. */
while (elt)
{
bitset_word *srcp = elt->words;
@@ -722,7 +733,7 @@ lbitset_reverse_list (bset, list, num, next)
/* Find list of up to NUM bits set in BSET starting from and including
*NEXT and store in array LIST. Return with actual number of bits
found and with *NEXT indicating where search stopped. */
static int
static bitset_bindex
lbitset_list (bset, list, num, next)
bitset bset;
bitset_bindex *list;
@@ -926,168 +937,161 @@ lbitset_list (bset, list, num, next)
static int
lbitset_op1 (dst, op)
lbitset_empty_p (dst)
bitset dst;
enum bitset_ops op;
{
unsigned int i;
bitset_windex windex;
lbitset_elt *elt;
switch (op)
{
case BITSET_OP_ZERO:
lbitset_zero (dst);
break;
case BITSET_OP_ONES:
/* This is a decidedly unfriendly operation for a linked list
bitset! */
elt = LBITSET_TAIL (dst);
/* Ignore empty set. */
if (!elt)
return 0;
windex = elt->index;
for (i = 0; i < windex; i += LBITSET_ELT_WORDS)
{
/* Create new elements if they cannot be found. */
elt = lbitset_elt_find (dst, i, LBITSET_CREATE);
memset (elt->words, -1, sizeof (elt->words));
}
break;
case BITSET_OP_EMPTY_P:
lbitset_weed (dst);
if (LBITSET_HEAD (dst))
return 0;
break;
default:
abort ();
}
lbitset_weed (dst);
if (LBITSET_HEAD (dst))
return 0;
return 1;
}
static int
lbitset_op2 (dst, src, op)
static void
lbitset_ones (dst)
bitset dst;
{
bitset_windex i;
bitset_windex windex;
lbitset_elt *elt;
/* This is a decidedly unfriendly operation for a linked list
bitset! It makes a sparse bitset become dense. An alternative
is to have a flag that indicates that the bitset stores the
complement of what it indicates. */
elt = LBITSET_TAIL (dst);
/* Ignore empty set. */
if (!elt)
return;
windex = elt->index;
for (i = 0; i < windex; i += LBITSET_ELT_WORDS)
{
/* Create new elements if they cannot be found. */
elt = lbitset_elt_find (dst, i, LBITSET_CREATE);
memset (elt->words, -1, sizeof (elt->words));
}
}
static void
lbitset_not (dst, src)
bitset dst;
bitset src;
enum bitset_ops op;
{
lbitset_elt *elt;
lbitset_elt *selt;
lbitset_elt *delt;
unsigned int i;
bitset_windex i;
unsigned int j;
bitset_windex windex;
switch (op)
/* This is another unfriendly operation for a linked list
bitset! */
elt = LBITSET_TAIL (dst);
/* Ignore empty set. */
if (!elt)
return;
windex = elt->index;
for (i = 0; i < windex; i += LBITSET_ELT_WORDS)
{
case BITSET_OP_COPY:
lbitset_copy (dst, src);
break;
case BITSET_OP_NOT:
/* This is another unfriendly operation for a linked list
bitset! */
elt = LBITSET_TAIL (dst);
/* Ignore empty set. */
if (!elt)
return 0;
windex = elt->index;
for (i = 0; i < windex; i += LBITSET_ELT_WORDS)
{
/* Create new elements for dst if they cannot be found
or substitute zero elements if src elements not found. */
selt = lbitset_elt_find (dst, i, LBITSET_SUBST);
delt = lbitset_elt_find (dst, i, LBITSET_CREATE);
for (j = 0; j < LBITSET_ELT_WORDS; j++)
delt->words[j] = ~selt->words[j];
}
lbitset_weed (dst);
break;
/* Return 1 if DST == SRC. */
case BITSET_OP_EQUAL_P:
return lbitset_equal_p (dst, src);
break;
/* Return 1 if DST == DST | SRC. */
case BITSET_OP_SUBSET_P:
for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst);
selt || delt; selt = selt->next, delt = delt->next)
{
if (!selt)
selt = &lbitset_zero_elts[0];
else if (!delt)
delt = &lbitset_zero_elts[0];
else if (selt->index != delt->index)
{
if (selt->index < delt->index)
{
lbitset_zero_elts[2].next = delt;
delt = &lbitset_zero_elts[2];
}
else
{
lbitset_zero_elts[1].next = selt;
selt = &lbitset_zero_elts[1];
}
}
for (j = 0; j < LBITSET_ELT_WORDS; j++)
if (delt->words[j] != (selt->words[j] | delt->words[j]))
return 0;
}
break;
/* Return 1 if DST & SRC == 0. */
case BITSET_OP_DISJOINT_P:
for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst);
selt && delt; selt = selt->next, delt = delt->next)
{
if (selt->index != delt->index)
{
if (selt->index < delt->index)
{
lbitset_zero_elts[2].next = delt;
delt = &lbitset_zero_elts[2];
}
else
{
lbitset_zero_elts[1].next = selt;
selt = &lbitset_zero_elts[1];
}
/* Since the elements are different, there is no
intersection of these elements. */
continue;
}
for (j = 0; j < LBITSET_ELT_WORDS; j++)
if (selt->words[j] & delt->words[j])
return 0;
}
break;
default:
abort ();
/* Create new elements for dst if they cannot be found
or substitute zero elements if src elements not found. */
selt = lbitset_elt_find (src, i, LBITSET_SUBST);
delt = lbitset_elt_find (dst, i, LBITSET_CREATE);
for (j = 0; j < LBITSET_ELT_WORDS; j++)
delt->words[j] = ~selt->words[j];
}
lbitset_weed (dst);
return;
}
/* Return 1 if DST == DST | SRC. */
static int
lbitset_subset_p (dst, src)
bitset dst;
bitset src;
{
lbitset_elt *selt;
lbitset_elt *delt;
unsigned int j;
for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst);
selt || delt; selt = selt->next, delt = delt->next)
{
if (!selt)
selt = &lbitset_zero_elts[0];
else if (!delt)
delt = &lbitset_zero_elts[0];
else if (selt->index != delt->index)
{
if (selt->index < delt->index)
{
lbitset_zero_elts[2].next = delt;
delt = &lbitset_zero_elts[2];
}
else
{
lbitset_zero_elts[1].next = selt;
selt = &lbitset_zero_elts[1];
}
}
for (j = 0; j < LBITSET_ELT_WORDS; j++)
if (delt->words[j] != (selt->words[j] | delt->words[j]))
return 0;
}
return 1;
}
/* Return 1 if DST & SRC == 0. */
static int
lbitset_disjoint_p (dst, src)
bitset dst;
bitset src;
{
lbitset_elt *selt;
lbitset_elt *delt;
unsigned int j;
for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst);
selt && delt; selt = selt->next, delt = delt->next)
{
if (selt->index != delt->index)
{
if (selt->index < delt->index)
{
lbitset_zero_elts[2].next = delt;
delt = &lbitset_zero_elts[2];
}
else
{
lbitset_zero_elts[1].next = selt;
selt = &lbitset_zero_elts[1];
}
/* Since the elements are different, there is no
intersection of these elements. */
continue;
}
for (j = 0; j < LBITSET_ELT_WORDS; j++)
if (selt->words[j] & delt->words[j])
return 0;
}
return 1;
}
static int
lbitset_op3 (dst, src1, src2, op)
lbitset_op3_cmp (dst, src1, src2, op)
bitset dst;
bitset src1;
bitset src2;
enum bitset_ops op;
enum_bitset_ops op;
{
lbitset_elt *selt1 = LBITSET_HEAD (src1);
lbitset_elt *selt2 = LBITSET_HEAD (src2);
@@ -1104,42 +1108,11 @@ lbitset_op3 (dst, src1, src2, op)
int changed = 0;
unsigned int i;
/* Fast track common, simple cases. */
if (!selt2)
{
if (op == BITSET_OP_AND)
{
lbitset_weed (dst);
changed = !LBITSET_HEAD (dst);
lbitset_zero (dst);
return changed;
}
else if (op == BITSET_OP_ANDN || op == BITSET_OP_OR
|| op == BITSET_OP_XOR)
{
return lbitset_copy_compare (dst, src1);
}
}
else if (!selt1)
{
if (op == BITSET_OP_AND || op == BITSET_OP_ANDN)
{
lbitset_weed (dst);
changed = !LBITSET_HEAD (dst);
lbitset_zero (dst);
return changed;
}
else if (op == BITSET_OP_OR || op == BITSET_OP_XOR)
{
return lbitset_copy_compare (dst, src2);
}
}
LBITSET_HEAD (dst) = 0;
dst->b.csize = 0;
windex1 = (selt1) ? selt1->index : BITSET_INDEX_MAX;
windex2 = (selt2) ? selt2->index : BITSET_INDEX_MAX;
windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
while (selt1 || selt2)
{
@@ -1151,9 +1124,9 @@ lbitset_op3 (dst, src1, src2, op)
stmp1 = selt1;
stmp2 = selt2;
selt1 = selt1->next;
windex1 = (selt1) ? selt1->index : BITSET_INDEX_MAX;
windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
selt2 = selt2->next;
windex2 = (selt2) ? selt2->index : BITSET_INDEX_MAX;
windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
}
else if (windex1 < windex2)
{
@@ -1161,7 +1134,7 @@ lbitset_op3 (dst, src1, src2, op)
stmp1 = selt1;
stmp2 = &lbitset_zero_elts[0];
selt1 = selt1->next;
windex1 = (selt1) ? selt1->index : BITSET_INDEX_MAX;
windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
}
else
{
@@ -1169,7 +1142,7 @@ lbitset_op3 (dst, src1, src2, op)
stmp1 = &lbitset_zero_elts[0];
stmp2 = selt2;
selt2 = selt2->next;
windex2 = (selt2) ? selt2->index : BITSET_INDEX_MAX;
windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
}
/* Find the appropriate element from DST. Begin by discarding
@@ -1275,40 +1248,195 @@ lbitset_op3 (dst, src1, src2, op)
}
static void
lbitset_and (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
lbitset_and_cmp (dst, src1, src2);
}
static int
lbitset_and_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
lbitset_elt *selt1 = LBITSET_HEAD (src1);
lbitset_elt *selt2 = LBITSET_HEAD (src2);
int changed;
if (!selt2)
{
lbitset_weed (dst);
changed = !LBITSET_HEAD (dst);
lbitset_zero (dst);
return changed;
}
else if (!selt1)
{
lbitset_weed (dst);
changed = !LBITSET_HEAD (dst);
lbitset_zero (dst);
return changed;
}
return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_AND);
}
static void
lbitset_andn (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
lbitset_andn_cmp (dst, src1, src2);
}
static int
lbitset_andn_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
lbitset_elt *selt1 = LBITSET_HEAD (src1);
lbitset_elt *selt2 = LBITSET_HEAD (src2);
int changed;
if (!selt2)
{
return lbitset_copy_cmp (dst, src1);
}
else if (!selt1)
{
lbitset_weed (dst);
changed = !LBITSET_HEAD (dst);
lbitset_zero (dst);
return changed;
}
return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN);
}
static void
lbitset_or (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
lbitset_or_cmp (dst, src1, src2);
}
static int
lbitset_or_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
lbitset_elt *selt1 = LBITSET_HEAD (src1);
lbitset_elt *selt2 = LBITSET_HEAD (src2);
if (!selt2)
{
return lbitset_copy_cmp (dst, src1);
}
else if (!selt1)
{
return lbitset_copy_cmp (dst, src2);
}
return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_OR);
}
static void
lbitset_xor (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
lbitset_xor_cmp (dst, src1, src2);
}
static int
lbitset_xor_cmp (dst, src1, src2)
bitset dst;
bitset src1;
bitset src2;
{
lbitset_elt *selt1 = LBITSET_HEAD (src1);
lbitset_elt *selt2 = LBITSET_HEAD (src2);
if (!selt2)
{
return lbitset_copy_cmp (dst, src1);
}
else if (!selt1)
{
return lbitset_copy_cmp (dst, src2);
}
return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR);
}
/* Vector of operations for linked-list bitsets. */
struct bitset_ops_struct lbitset_ops = {
struct bitset_vtable lbitset_vtable = {
lbitset_set,
lbitset_reset,
bitset_toggle_,
lbitset_test,
lbitset_size,
lbitset_op1,
lbitset_op2,
lbitset_op3,
bitset_op4,
bitset_count_,
lbitset_empty_p,
lbitset_ones,
lbitset_zero,
lbitset_copy,
lbitset_disjoint_p,
lbitset_equal_p,
lbitset_not,
lbitset_subset_p,
lbitset_and,
lbitset_and_cmp,
lbitset_andn,
lbitset_andn_cmp,
lbitset_or,
lbitset_or_cmp,
lbitset_xor,
lbitset_xor_cmp,
bitset_and_or_,
bitset_and_or_cmp_,
bitset_andn_or_,
bitset_andn_or_cmp_,
bitset_or_and_,
bitset_or_and_cmp_,
lbitset_list,
lbitset_reverse_list,
lbitset_list_reverse,
lbitset_free,
BITSET_LIST
};
/* Return size of initial structure. */
int
size_t
lbitset_bytes (n_bits)
bitset_bindex n_bits ATTRIBUTE_UNUSED;
{
return sizeof (struct bitset_struct);
return sizeof (struct lbitset_struct);
}
/* Initialize a bitset. */
bitset
lbitset_init (bset, n_bits)
bitset bset;
bitset_bindex n_bits ATTRIBUTE_UNUSED;
{
bset->b.ops = &lbitset_ops;
bset->b.vtable = &lbitset_vtable;
return bset;
}
@@ -1323,3 +1451,34 @@ lbitset_release_memory ()
obstack_free (&lbitset_obstack, NULL);
}
}
/* Function to be called from debugger to debug lbitset. */
void
debug_lbitset (bset)
bitset bset;
{
lbitset_elt *elt;
unsigned int i;
if (!bset)
return;
for (elt = LBITSET_HEAD (bset); elt; elt = elt->next)
{
fprintf (stderr, "Elt %lu\n", (unsigned long) elt->index);
for (i = 0; i < LBITSET_ELT_WORDS; i++)
{
unsigned int j;
bitset_word word;
word = elt->words[i];
fprintf (stderr, " Word %u:", i);
for (j = 0; j < LBITSET_WORD_BITS; j++)
if ((word & ((bitset_word) 1 << j)))
fprintf (stderr, " %u", j);
fprintf (stderr, "\n");
}
}
}
+2 -2
View File
@@ -19,9 +19,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef _LBITSET_H
#define _LBITSET_H
#include "bbitset.h"
#include "bitset.h"
extern int lbitset_bytes PARAMS ((bitset_bindex));
extern size_t lbitset_bytes PARAMS ((bitset_bindex));
extern bitset lbitset_init PARAMS ((bitset, bitset_bindex));
+386
View File
@@ -0,0 +1,386 @@
/* Copyright (C) 1991, 1993, 1995, 1997, 1998 Free Software Foundation, Inc.
Contributed by Torbjorn Granlund (tege@sics.se).
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
This program is free software; you can redistribute it and/or modify it
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. */
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#undef __ptr_t
#if defined __cplusplus || (defined __STDC__ && __STDC__)
# define __ptr_t void *
#else /* Not C++ or ANSI C. */
# undef const
# define const
# define __ptr_t char *
#endif /* C++ or ANSI C. */
#ifndef __P
# if defined __GNUC__ || (defined __STDC__ && __STDC__)
# define __P(args) args
# else
# define __P(args) ()
# endif /* GCC. */
#endif /* Not __P. */
#if defined HAVE_STRING_H || defined _LIBC
# include <string.h>
#endif
#undef memcmp
#ifdef _LIBC
# include <memcopy.h>
# include <endian.h>
# if __BYTE_ORDER == __BIG_ENDIAN
# define WORDS_BIGENDIAN
# endif
#else /* Not in the GNU C library. */
# include <sys/types.h>
/* Type to use for aligned memory operations.
This should normally be the biggest type supported by a single load
and store. Must be an unsigned type. */
# define op_t unsigned long int
# define OPSIZ (sizeof(op_t))
/* Threshold value for when to enter the unrolled loops. */
# define OP_T_THRES 16
/* Type to use for unaligned operations. */
typedef unsigned char byte;
# ifndef WORDS_BIGENDIAN
# define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2)))
# else
# define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2)))
# endif
#endif /* In the GNU C library. */
#ifdef WORDS_BIGENDIAN
# define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1)
#else
# define CMP_LT_OR_GT(a, b) memcmp_bytes ((a), (b))
#endif
/* BE VERY CAREFUL IF YOU CHANGE THIS CODE! */
/* The strategy of this memcmp is:
1. Compare bytes until one of the block pointers is aligned.
2. Compare using memcmp_common_alignment or
memcmp_not_common_alignment, regarding the alignment of the other
block after the initial byte operations. The maximum number of
full words (of type op_t) are compared in this way.
3. Compare the few remaining bytes. */
#ifndef WORDS_BIGENDIAN
/* memcmp_bytes -- Compare A and B bytewise in the byte order of the machine.
A and B are known to be different.
This is needed only on little-endian machines. */
static int memcmp_bytes __P((op_t, op_t));
# ifdef __GNUC__
__inline
# endif
static int
memcmp_bytes (long unsigned int a, long unsigned int b)
{
long int srcp1 = (long int) &a;
long int srcp2 = (long int) &b;
op_t a0, b0;
do
{
a0 = ((byte *) srcp1)[0];
b0 = ((byte *) srcp2)[0];
srcp1 += 1;
srcp2 += 1;
}
while (a0 == b0);
return a0 - b0;
}
#endif
static int memcmp_common_alignment __P((long, long, size_t));
/* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN `op_t'
objects (not LEN bytes!). Both SRCP1 and SRCP2 should be aligned for
memory operations on `op_t's. */
#ifdef __GNUC__
__inline
#endif
static int
memcmp_common_alignment (long int srcp1, long int srcp2, size_t len)
{
op_t a0, a1;
op_t b0, b1;
switch (len % 4)
{
default: /* Avoid warning about uninitialized local variables. */
case 2:
a0 = ((op_t *) srcp1)[0];
b0 = ((op_t *) srcp2)[0];
srcp1 -= 2 * OPSIZ;
srcp2 -= 2 * OPSIZ;
len += 2;
goto do1;
case 3:
a1 = ((op_t *) srcp1)[0];
b1 = ((op_t *) srcp2)[0];
srcp1 -= OPSIZ;
srcp2 -= OPSIZ;
len += 1;
goto do2;
case 0:
if (OP_T_THRES <= 3 * OPSIZ && len == 0)
return 0;
a0 = ((op_t *) srcp1)[0];
b0 = ((op_t *) srcp2)[0];
goto do3;
case 1:
a1 = ((op_t *) srcp1)[0];
b1 = ((op_t *) srcp2)[0];
srcp1 += OPSIZ;
srcp2 += OPSIZ;
len -= 1;
if (OP_T_THRES <= 3 * OPSIZ && len == 0)
goto do0;
/* Fall through. */
}
do
{
a0 = ((op_t *) srcp1)[0];
b0 = ((op_t *) srcp2)[0];
if (a1 != b1)
return CMP_LT_OR_GT (a1, b1);
do3:
a1 = ((op_t *) srcp1)[1];
b1 = ((op_t *) srcp2)[1];
if (a0 != b0)
return CMP_LT_OR_GT (a0, b0);
do2:
a0 = ((op_t *) srcp1)[2];
b0 = ((op_t *) srcp2)[2];
if (a1 != b1)
return CMP_LT_OR_GT (a1, b1);
do1:
a1 = ((op_t *) srcp1)[3];
b1 = ((op_t *) srcp2)[3];
if (a0 != b0)
return CMP_LT_OR_GT (a0, b0);
srcp1 += 4 * OPSIZ;
srcp2 += 4 * OPSIZ;
len -= 4;
}
while (len != 0);
/* This is the right position for do0. Please don't move
it into the loop. */
do0:
if (a1 != b1)
return CMP_LT_OR_GT (a1, b1);
return 0;
}
static int memcmp_not_common_alignment __P((long, long, size_t));
/* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN
`op_t' objects (not LEN bytes!). SRCP2 should be aligned for memory
operations on `op_t', but SRCP1 *should be unaligned*. */
#ifdef __GNUC__
__inline
#endif
static int
memcmp_not_common_alignment (long int srcp1, long int srcp2, size_t len)
{
op_t a0, a1, a2, a3;
op_t b0, b1, b2, b3;
op_t x;
int shl, shr;
/* Calculate how to shift a word read at the memory operation
aligned srcp1 to make it aligned for comparison. */
shl = 8 * (srcp1 % OPSIZ);
shr = 8 * OPSIZ - shl;
/* Make SRCP1 aligned by rounding it down to the beginning of the `op_t'
it points in the middle of. */
srcp1 &= -OPSIZ;
switch (len % 4)
{
default: /* Avoid warning about uninitialized local variables. */
case 2:
a1 = ((op_t *) srcp1)[0];
a2 = ((op_t *) srcp1)[1];
b2 = ((op_t *) srcp2)[0];
srcp1 -= 1 * OPSIZ;
srcp2 -= 2 * OPSIZ;
len += 2;
goto do1;
case 3:
a0 = ((op_t *) srcp1)[0];
a1 = ((op_t *) srcp1)[1];
b1 = ((op_t *) srcp2)[0];
srcp2 -= 1 * OPSIZ;
len += 1;
goto do2;
case 0:
if (OP_T_THRES <= 3 * OPSIZ && len == 0)
return 0;
a3 = ((op_t *) srcp1)[0];
a0 = ((op_t *) srcp1)[1];
b0 = ((op_t *) srcp2)[0];
srcp1 += 1 * OPSIZ;
goto do3;
case 1:
a2 = ((op_t *) srcp1)[0];
a3 = ((op_t *) srcp1)[1];
b3 = ((op_t *) srcp2)[0];
srcp1 += 2 * OPSIZ;
srcp2 += 1 * OPSIZ;
len -= 1;
if (OP_T_THRES <= 3 * OPSIZ && len == 0)
goto do0;
/* Fall through. */
}
do
{
a0 = ((op_t *) srcp1)[0];
b0 = ((op_t *) srcp2)[0];
x = MERGE(a2, shl, a3, shr);
if (x != b3)
return CMP_LT_OR_GT (x, b3);
do3:
a1 = ((op_t *) srcp1)[1];
b1 = ((op_t *) srcp2)[1];
x = MERGE(a3, shl, a0, shr);
if (x != b0)
return CMP_LT_OR_GT (x, b0);
do2:
a2 = ((op_t *) srcp1)[2];
b2 = ((op_t *) srcp2)[2];
x = MERGE(a0, shl, a1, shr);
if (x != b1)
return CMP_LT_OR_GT (x, b1);
do1:
a3 = ((op_t *) srcp1)[3];
b3 = ((op_t *) srcp2)[3];
x = MERGE(a1, shl, a2, shr);
if (x != b2)
return CMP_LT_OR_GT (x, b2);
srcp1 += 4 * OPSIZ;
srcp2 += 4 * OPSIZ;
len -= 4;
}
while (len != 0);
/* This is the right position for do0. Please don't move
it into the loop. */
do0:
x = MERGE(a2, shl, a3, shr);
if (x != b3)
return CMP_LT_OR_GT (x, b3);
return 0;
}
int
rpl_memcmp (const void *s1, const void *s2, size_t len)
{
op_t a0;
op_t b0;
long int srcp1 = (long int) s1;
long int srcp2 = (long int) s2;
op_t res;
if (len >= OP_T_THRES)
{
/* There are at least some bytes to compare. No need to test
for LEN == 0 in this alignment loop. */
while (srcp2 % OPSIZ != 0)
{
a0 = ((byte *) srcp1)[0];
b0 = ((byte *) srcp2)[0];
srcp1 += 1;
srcp2 += 1;
res = a0 - b0;
if (res != 0)
return res;
len -= 1;
}
/* SRCP2 is now aligned for memory operations on `op_t'.
SRCP1 alignment determines if we can do a simple,
aligned compare or need to shuffle bits. */
if (srcp1 % OPSIZ == 0)
res = memcmp_common_alignment (srcp1, srcp2, len / OPSIZ);
else
res = memcmp_not_common_alignment (srcp1, srcp2, len / OPSIZ);
if (res != 0)
return res;
/* Number of bytes remaining in the interval [0..OPSIZ-1]. */
srcp1 += len & -OPSIZ;
srcp2 += len & -OPSIZ;
len %= OPSIZ;
}
/* There are just a few bytes to compare. Use byte memory operations. */
while (len != 0)
{
a0 = ((byte *) srcp1)[0];
b0 = ((byte *) srcp2)[0];
srcp1 += 1;
srcp2 += 1;
res = a0 - b0;
if (res != 0)
return res;
len -= 1;
}
return 0;
}
#ifdef weak_alias
# undef bcmp
weak_alias (memcmp, bcmp)
#endif
+66
View File
@@ -0,0 +1,66 @@
/* strcasecmp.c -- case insensitive string comparator
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#ifdef LENGTH_LIMIT
# define STRXCASECMP_FUNCTION strncasecmp
# define STRXCASECMP_DECLARE_N , size_t n
# define LENGTH_LIMIT_EXPR(Expr) Expr
#else
# define STRXCASECMP_FUNCTION strcasecmp
# define STRXCASECMP_DECLARE_N /* empty */
# define LENGTH_LIMIT_EXPR(Expr) 0
#endif
#include <sys/types.h>
#include <ctype.h>
#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
/* Compare {{no more than N characters of }}strings S1 and S2,
ignoring case, returning less than, equal to or
greater than zero if S1 is lexicographically less
than, equal to or greater than S2. */
int
STRXCASECMP_FUNCTION (const char *s1, const char *s2 STRXCASECMP_DECLARE_N)
{
register const unsigned char *p1 = (const unsigned char *) s1;
register const unsigned char *p2 = (const unsigned char *) s2;
unsigned char c1, c2;
if (p1 == p2 || LENGTH_LIMIT_EXPR (n == 0))
return 0;
do
{
c1 = TOLOWER (*p1);
c2 = TOLOWER (*p2);
if (LENGTH_LIMIT_EXPR (--n == 0) || c1 == '\0')
break;
++p1;
++p2;
}
while (c1 == c2);
return c1 - c2;
}
+2
View File
@@ -0,0 +1,2 @@
#define LENGTH_LIMIT
#include "strcasecmp.c"
+30
View File
@@ -0,0 +1,30 @@
/* Portable version of strrchr().
This function is in the public domain. */
/*
@deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c})
Returns a pointer to the last occurrence of the character @var{c} in
the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the
null character, the results are undefined.
@end deftypefn
*/
#include <ansidecl.h>
char *
strrchr (s, c)
register const char *s;
int c;
{
char *rtnval = 0;
do {
if (*s == c)
rtnval = (char*) s;
} while (*s++);
return (rtnval);
}
+472
View File
@@ -0,0 +1,472 @@
/* Convert string representation of a number into an integer value.
Copyright (C) 1991, 92, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C
Library. Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#ifdef _LIBC
# define USE_NUMBER_GROUPING
# define STDC_HEADERS
# define HAVE_LIMITS_H
#endif
#include <ctype.h>
#include <errno.h>
#ifndef errno
extern int errno;
#endif
#ifndef __set_errno
# define __set_errno(Val) errno = (Val)
#endif
#ifdef HAVE_LIMITS_H
# include <limits.h>
#endif
#ifdef STDC_HEADERS
# include <stddef.h>
# include <stdlib.h>
# include <string.h>
#else
# ifndef NULL
# define NULL 0
# endif
#endif
#ifdef USE_NUMBER_GROUPING
# include "../locale/localeinfo.h"
#endif
/* Nonzero if we are defining `strtoul' or `strtoull', operating on
unsigned integers. */
#ifndef UNSIGNED
# define UNSIGNED 0
# define INT LONG int
#else
# define INT unsigned LONG int
#endif
/* Determine the name. */
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
# if UNSIGNED
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol __wcstoull_l
# else
# define strtol __wcstoul_l
# endif
# else
# ifdef QUAD
# define strtol __strtoull_l
# else
# define strtol __strtoul_l
# endif
# endif
# else
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol __wcstoll_l
# else
# define strtol __wcstol_l
# endif
# else
# ifdef QUAD
# define strtol __strtoll_l
# else
# define strtol __strtol_l
# endif
# endif
# endif
#else
# if UNSIGNED
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol wcstoull
# else
# define strtol wcstoul
# endif
# else
# ifdef QUAD
# define strtol strtoull
# else
# define strtol strtoul
# endif
# endif
# else
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol wcstoll
# else
# define strtol wcstol
# endif
# else
# ifdef QUAD
# define strtol strtoll
# endif
# endif
# endif
#endif
/* If QUAD is defined, we are defining `strtoll' or `strtoull',
operating on `long long int's. */
#ifdef QUAD
# define LONG long long
# define STRTOL_LONG_MIN LONG_LONG_MIN
# define STRTOL_LONG_MAX LONG_LONG_MAX
# define STRTOL_ULONG_MAX ULONG_LONG_MAX
/* The extra casts work around common compiler bugs,
e.g. Cray C 5.0.3.0 when t == time_t. */
# ifndef TYPE_SIGNED
# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
# endif
# ifndef TYPE_MINIMUM
# define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
: (t) 0))
# endif
# ifndef TYPE_MAXIMUM
# define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
# endif
# ifndef ULONG_LONG_MAX
# define ULONG_LONG_MAX TYPE_MAXIMUM (unsigned long long)
# endif
# ifndef LONG_LONG_MAX
# define LONG_LONG_MAX TYPE_MAXIMUM (long long int)
# endif
# ifndef LONG_LONG_MIN
# define LONG_LONG_MIN TYPE_MINIMUM (long long int)
# endif
# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
/* Work around gcc bug with using this constant. */
static const unsigned long long int maxquad = ULONG_LONG_MAX;
# undef STRTOL_ULONG_MAX
# define STRTOL_ULONG_MAX maxquad
# endif
#else
# define LONG long
# ifndef ULONG_MAX
# define ULONG_MAX ((unsigned long) ~(unsigned long) 0)
# endif
# ifndef LONG_MAX
# define LONG_MAX ((long int) (ULONG_MAX >> 1))
# endif
# define STRTOL_LONG_MIN LONG_MIN
# define STRTOL_LONG_MAX LONG_MAX
# define STRTOL_ULONG_MAX ULONG_MAX
#endif
/* We use this code also for the extended locale handling where the
function gets as an additional argument the locale which has to be
used. To access the values we have to redefine the _NL_CURRENT
macro. */
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
# undef _NL_CURRENT
# define _NL_CURRENT(category, item) \
(current->values[_NL_ITEM_INDEX (item)].string)
# define LOCALE_PARAM , loc
# define LOCALE_PARAM_DECL __locale_t loc;
#else
# define LOCALE_PARAM
# define LOCALE_PARAM_DECL
#endif
#if defined _LIBC || defined HAVE_WCHAR_H
# include <wchar.h>
#endif
#ifdef USE_WIDE_CHAR
# include <wctype.h>
# define L_(Ch) L##Ch
# define UCHAR_TYPE wint_t
# define STRING_TYPE wchar_t
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
# define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
# define TOUPPER(Ch) __towupper_l ((Ch), loc)
# else
# define ISSPACE(Ch) iswspace (Ch)
# define ISALPHA(Ch) iswalpha (Ch)
# define TOUPPER(Ch) towupper (Ch)
# endif
#else
# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
# define IN_CTYPE_DOMAIN(c) 1
# else
# define IN_CTYPE_DOMAIN(c) isascii(c)
# endif
# define L_(Ch) Ch
# define UCHAR_TYPE unsigned char
# define STRING_TYPE char
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
# define ISSPACE(Ch) __isspace_l ((Ch), loc)
# define ISALPHA(Ch) __isalpha_l ((Ch), loc)
# define TOUPPER(Ch) __toupper_l ((Ch), loc)
# else
# define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch))
# define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
# define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch))
# endif
#endif
/* For compilers which are ansi but don't define __STDC__, like SGI
Irix-4.0.5 cc, also check whether PROTOTYPES is defined. */
#if defined (__STDC__) || defined (PROTOTYPES)
# define INTERNAL(X) INTERNAL1(X)
# define INTERNAL1(X) __##X##_internal
# define WEAKNAME(X) WEAKNAME1(X)
#else
# define INTERNAL(X) __/**/X/**/_internal
#endif
#ifdef USE_NUMBER_GROUPING
/* This file defines a function to check for correct grouping. */
# include "grouping.h"
#endif
/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
If BASE is 0 the base is determined by the presence of a leading
zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
If BASE is < 2 or > 36, it is reset to 10.
If ENDPTR is not NULL, a pointer to the character after the last
one converted is stored in *ENDPTR. */
INT
INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM)
const STRING_TYPE *nptr;
STRING_TYPE **endptr;
int base;
int group;
LOCALE_PARAM_DECL
{
int negative;
register unsigned LONG int cutoff;
register unsigned int cutlim;
register unsigned LONG int i;
register const STRING_TYPE *s;
register UCHAR_TYPE c;
const STRING_TYPE *save, *end;
int overflow;
#ifdef USE_NUMBER_GROUPING
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
struct locale_data *current = loc->__locales[LC_NUMERIC];
# endif
/* The thousands character of the current locale. */
wchar_t thousands = L'\0';
/* The numeric grouping specification of the current locale,
in the format described in <locale.h>. */
const char *grouping;
if (group)
{
grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
if (*grouping <= 0 || *grouping == CHAR_MAX)
grouping = NULL;
else
{
/* Figure out the thousands separator character. */
# if defined _LIBC || defined _HAVE_BTOWC
thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
if (thousands == WEOF)
thousands = L'\0';
# endif
if (thousands == L'\0')
grouping = NULL;
}
}
else
grouping = NULL;
#endif
if (base < 0 || base == 1 || base > 36)
{
__set_errno (EINVAL);
return 0;
}
save = s = nptr;
/* Skip white space. */
while (ISSPACE (*s))
++s;
if (*s == L_('\0'))
goto noconv;
/* Check for a sign. */
if (*s == L_('-'))
{
negative = 1;
++s;
}
else if (*s == L_('+'))
{
negative = 0;
++s;
}
else
negative = 0;
/* Recognize number prefix and if BASE is zero, figure it out ourselves. */
if (*s == L_('0'))
{
if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
{
s += 2;
base = 16;
}
else if (base == 0)
base = 8;
}
else if (base == 0)
base = 10;
/* Save the pointer so we can check later if anything happened. */
save = s;
#ifdef USE_NUMBER_GROUPING
if (group)
{
/* Find the end of the digit string and check its grouping. */
end = s;
for (c = *end; c != L_('\0'); c = *++end)
if ((wchar_t) c != thousands
&& ((wchar_t) c < L_('0') || (wchar_t) c > L_('9'))
&& (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base))
break;
if (*s == thousands)
end = s;
else
end = correctly_grouped_prefix (s, end, thousands, grouping);
}
else
#endif
end = NULL;
cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
overflow = 0;
i = 0;
for (c = *s; c != L_('\0'); c = *++s)
{
if (s == end)
break;
if (c >= L_('0') && c <= L_('9'))
c -= L_('0');
else if (ISALPHA (c))
c = TOUPPER (c) - L_('A') + 10;
else
break;
if ((int) c >= base)
break;
/* Check for overflow. */
if (i > cutoff || (i == cutoff && c > cutlim))
overflow = 1;
else
{
i *= (unsigned LONG int) base;
i += c;
}
}
/* Check if anything actually happened. */
if (s == save)
goto noconv;
/* Store in ENDPTR the address of one character
past the last character we converted. */
if (endptr != NULL)
*endptr = (STRING_TYPE *) s;
#if !UNSIGNED
/* Check for a value that is within the range of
`unsigned LONG int', but outside the range of `LONG int'. */
if (overflow == 0
&& i > (negative
? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
: (unsigned LONG int) STRTOL_LONG_MAX))
overflow = 1;
#endif
if (overflow)
{
__set_errno (ERANGE);
#if UNSIGNED
return STRTOL_ULONG_MAX;
#else
return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
#endif
}
/* Return the result of the appropriate sign. */
return negative ? -i : i;
noconv:
/* We must handle a special case here: the base is 0 or 16 and the
first two characters are '0' and 'x', but the rest are no
hexadecimal digits. This is no error case. We return 0 and
ENDPTR points to the `x`. */
if (endptr != NULL)
{
if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
&& save[-2] == L_('0'))
*endptr = (STRING_TYPE *) &save[-1];
else
/* There was no number to convert. */
*endptr = (STRING_TYPE *) nptr;
}
return 0L;
}
/* External user entry point. */
#if _LIBC - 0 == 0
# undef PARAMS
# if defined (__STDC__) && __STDC__
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
/* Prototype. */
INT strtol PARAMS ((const STRING_TYPE *nptr, STRING_TYPE **endptr, int base));
#endif
INT
#ifdef weak_function
weak_function
#endif
strtol (nptr, endptr, base LOCALE_PARAM)
const STRING_TYPE *nptr;
STRING_TYPE **endptr;
int base;
LOCALE_PARAM_DECL
{
return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
}
+29 -19
View File
@@ -1,27 +1,26 @@
/* Timing variables for measuring compiler performance.
Copyright (C) 2000 Free Software Foundation, Inc.
Copyright (C) 2000, 2002 Free Software Foundation, Inc.
Contributed by Alex Samuel <samuel@codesourcery.com>
This file is part of GCC.
This file is part of Bison, the GNU Compiler Compiler.
GCC is free software; you can redistribute it and/or modify it under
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.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
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 GCC; see the file COPYING. If not, write to the Free
along with Bison; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#if IN_GCC
/* These are the original includes --akim. */
#include "config.h"
#include "system.h"
#include "intl.h"
@@ -29,9 +28,14 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#else
/* These are my replacements by hand --akim.
There is another change below, flag with IN_GCC. */
/* This source file is taken from the GCC source code, with slight
modifications that are under control of the IN_GCC preprocessor
variable. The !IN_GCC part of this file is specific to Bison. */
# include "../src/system.h"
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# endif
int time_report = 0;
#endif
@@ -129,7 +133,7 @@ static float clocks_to_msec;
/* See timevar.h for an explanation of timing variables. */
/* This macro evaluates to non-zero if timing variables are enabled. */
/* This macro evaluates to nonzero if timing variables are enabled. */
#define TIMEVAR_ENABLE (time_report)
/* A timing variable. */
@@ -191,7 +195,7 @@ static void timevar_accumulate
/* Fill the current times into TIME. The definition of this function
also defines any or all of the HAVE_USER_TIME, HAVE_SYS_TIME, and
HAVA_WALL_TIME macros. */
HAVE_WALL_TIME macros. */
static void
get_time (now)
@@ -207,18 +211,24 @@ get_time (now)
{
#ifdef USE_TIMES
struct tms tms;
now->wall = times (&tms) * ticks_to_msec;
now->wall = times (&tms) * ticks_to_msec;
#if IN_GCC
now->user = tms.tms_utime * ticks_to_msec;
now->sys = tms.tms_stime * ticks_to_msec;
#else
now->user = (tms.tms_utime + tms.tms_cutime) * ticks_to_msec;
now->sys = (tms.tms_stime + tms.tms_cstime) * ticks_to_msec;
#endif
#endif
#ifdef USE_GETRUSAGE
struct rusage rusage;
#if IN_GCC
getrusage (RUSAGE_SELF, &rusage);
#else
getrusage (RUSAGE_CHILDREN, &rusage);
#endif
now->user = rusage.ru_utime.tv_sec + rusage.ru_utime.tv_usec * 1e-6;
now->sys = rusage.ru_stime.tv_sec + rusage.ru_stime.tv_usec * 1e-6;
getrusage (RUSAGE_CHILDREN, &rusage);
now->user += rusage.ru_utime.tv_sec + rusage.ru_utime.tv_usec * 1e-6;
now->sys += rusage.ru_stime.tv_sec + rusage.ru_stime.tv_usec * 1e-6;
#endif
#ifdef USE_CLOCK
now->user = clock () * clocks_to_msec;
@@ -230,9 +240,9 @@ get_time (now)
static void
timevar_accumulate (timer, start_time, stop_time)
struct timevar_time_def *timer;
struct timevar_time_def *start_time;
struct timevar_time_def *stop_time;
struct timevar_time_def *timer;
struct timevar_time_def *start_time;
struct timevar_time_def *stop_time;
{
timer->user += stop_time->user - start_time->user;
timer->sys += stop_time->sys - start_time->sys;
@@ -551,6 +561,6 @@ print_time (str, total)
fprintf (stderr,
_("time in %s: %ld.%06ld (%ld%%)\n"),
str, total / 1000000, total % 1000000,
all_time == 0 ? 0
: (long) (((100.0 * (double) total) / (double) all_time) + .5));
all_time == 0 ? 0
: (long) (((100.0 * (double) total) / (double) all_time) + .5));
}
+6 -6
View File
@@ -1,22 +1,22 @@
/* This file contains the definitions for timing variables used to -*- C -*-
measure run-time performance of the compiler.
Copyright (C) 2000 Free Software Foundation, Inc.
Contributed by Alex Samuel <samuel@codesourcery.com>
Copyright (C) 2002 Free Software Foundation, Inc.
Contributed by Akim Demaille <akim@freefriends.org>.
This file is part of GCC.
This file is part of Bison, the GNU Compiler Compiler.
GCC is free software; you can redistribute it and/or modify
Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
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 GCC; see the file COPYING. If not, write to
along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+7 -7
View File
@@ -2,20 +2,20 @@
Copyright (C) 2000 Free Software Foundation, Inc.
Contributed by Alex Samuel <samuel@codesourcery.com>
This file is part of GCC.
This file is part of Bison, the GNU Compiler Compiler.
GCC is free software; you can redistribute it and/or modify it
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.
GCC is distributed in the hope that it will be useful, but WITHOUT
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 GCC; see the file COPYING. If not, write to the Free
along with Bison; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
@@ -41,9 +41,9 @@
- As a standalone timer, using timevar_start and timevar_stop.
All time elapsed between the two calls is attributed to the
variable.
variable.
*/
/* This structure stores the various varieties of time that can be
measured. Times are stored in seconds. The time may be an
absolute time or a time difference; in the former case, the time
@@ -67,7 +67,7 @@ struct timevar_time_def
the contents of timevar.def. */
#define DEFTIMEVAR(identifier__, name__) \
identifier__,
identifier__,
typedef enum
{
#include "timevar.def"
-12
View File
@@ -1,14 +1,2 @@
Makefile
Makefile.in
# From Gettext
codeset.m4
gettext.m4
glibc21.m4
iconv.m4
isc-posix.m4
lcmessage.m4
lib-ld.m4
lib-link.m4
lib-prefix.m4
progtest.m4
+3 -3
View File
@@ -1,6 +1,6 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
EXTRA_DIST = \
c-bs-a.m4 dmalloc.m4 error.m4 \
m4.m4 malloc.m4 mbrtowc.m4 mbstate_t.m4 mkstemp.m4 \
prereq.m4 realloc.m4 strerror_r.m4 timevar.m4 warning.m4 \
dmalloc.m4 error.m4 \
m4.m4 mbrtowc.m4 memcmp.m4 mkstemp.m4 \
prereq.m4 timevar.m4 warning.m4 \
gettext.m4 iconv.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 progtest.m4
-29
View File
@@ -1,29 +0,0 @@
# c-bs-a.m4 serial 4 (fileutils-4.1.3)
dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
dnl This file is free software, distributed under the terms of the GNU
dnl General Public License. As a special exception to the GNU General
dnl Public License, this file may be distributed as part of a program
dnl that contains a configuration script generated by Autoconf, under
dnl the same distribution terms as the rest of that program.
dnl From Paul Eggert.
AC_DEFUN([AC_C_BACKSLASH_A],
[
AC_CACHE_CHECK([whether backslash-a works in strings], ac_cv_c_backslash_a,
[AC_TRY_COMPILE([],
[
#if '\a' == 'a'
syntax error;
#endif
char buf['\a' == 'a' ? -1 : 1];
buf[0] = '\a';
return buf[0] != "\a"[0];
],
ac_cv_c_backslash_a=yes,
ac_cv_c_backslash_a=no)])
if test $ac_cv_c_backslash_a = yes; then
AC_DEFINE(HAVE_C_BACKSLASH_A, 1,
[Define if backslash-a works in C strings.])
fi
])
-40
View File
@@ -1,40 +0,0 @@
#serial 7
dnl From Jim Meyering.
dnl Determine whether malloc accepts 0 as its argument.
dnl If it doesn't, arrange to use the replacement function.
dnl
AC_DEFUN([jm_FUNC_MALLOC],
[
dnl xmalloc.c requires that this symbol be defined so it doesn't
dnl mistakenly use a broken malloc -- as it might if this test were omitted.
AC_DEFINE(HAVE_DONE_WORKING_MALLOC_CHECK, 1,
[Define if the malloc check has been performed. ])
AC_CACHE_CHECK([whether malloc(0) returns a non-NULL pointer],
jm_cv_func_working_malloc,
[AC_TRY_RUN([
char *malloc ();
int
main ()
{
exit (malloc (0) ? 0 : 1);
}
],
jm_cv_func_working_malloc=yes,
jm_cv_func_working_malloc=no,
dnl When crosscompiling, assume malloc(0) returns NULL.
jm_cv_func_working_malloc=no)
])
if test $jm_cv_func_working_malloc = yes; then
AC_DEFINE([HAVE_MALLOC], 1,
[Define to 1 if your system has a working `malloc' function,
and to 0 otherwise.])
else
AC_DEFINE([HAVE_MALLOC], 0)
AC_LIBOBJ(malloc)
AC_DEFINE(malloc, rpl_malloc,
[Define to rpl_malloc if the replacement function should be used.])
fi
])
-32
View File
@@ -1,32 +0,0 @@
# mbstate_t.m4 serial 9
dnl Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
dnl This file is free software, distributed under the terms of the GNU
dnl General Public License. As a special exception to the GNU General
dnl Public License, this file may be distributed as part of a program
dnl that contains a configuration script generated by Autoconf, under
dnl the same distribution terms as the rest of that program.
# From Paul Eggert.
# BeOS 5 has <wchar.h> but does not define mbstate_t,
# so you can't declare an object of that type.
# Check for this incompatibility with Standard C.
# AC_TYPE_MBSTATE_T
# -----------------
AC_DEFUN([AC_TYPE_MBSTATE_T],
[AC_CACHE_CHECK([for mbstate_t], ac_cv_type_mbstate_t,
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[AC_INCLUDES_DEFAULT
# include <wchar.h>],
[mbstate_t x; return sizeof x;])],
[ac_cv_type_mbstate_t=yes],
[ac_cv_type_mbstate_t=no])])
if test $ac_cv_type_mbstate_t = yes; then
AC_DEFINE([HAVE_MBSTATE_T], 1,
[Define to 1 if <wchar.h> declares mbstate_t.])
else
AC_DEFINE([mbstate_t], int,
[Define to a type if <wchar.h> does not define.])
fi])
+9
View File
@@ -0,0 +1,9 @@
#serial 7
AC_DEFUN([jm_FUNC_MEMCMP],
[AC_REQUIRE([AC_FUNC_MEMCMP])dnl
if test $ac_cv_func_memcmp_working = no; then
AC_DEFINE(memcmp, rpl_memcmp,
[Define to rpl_memcmp if the replacement function should be used.])
fi
])
+254 -4
View File
@@ -1,15 +1,265 @@
#serial 2
#serial 28 -*- Autoconf -*-
dnl These are the prerequisite macros for files in the lib/
dnl directories of Bison.
dnl We use jm_ for non Autoconf macros.
m4_pattern_forbid([^jm_[ABCDEFGHIJKLMNOPQRSTUVXYZ]])dnl
# These are the prerequisite macros for files in the lib/
# directories of the fileutils, sh-utils, and textutils packages.
AC_DEFUN([jm_PREREQ],
[
jm_PREREQ_ADDEXT
jm_PREREQ_C_STACK
jm_PREREQ_CANON_HOST
jm_PREREQ_DIRNAME
jm_PREREQ_ERROR
jm_PREREQ_EXCLUDE
jm_PREREQ_GETPAGESIZE
jm_PREREQ_HARD_LOCALE
jm_PREREQ_HASH
jm_PREREQ_HUMAN
jm_PREREQ_MBSWIDTH
jm_PREREQ_MEMCHR
jm_PREREQ_PHYSMEM
jm_PREREQ_POSIXVER
jm_PREREQ_QUOTEARG
jm_PREREQ_READUTMP
jm_PREREQ_REGEX
jm_PREREQ_STAT
jm_PREREQ_STRNLEN
jm_PREREQ_TEMPNAME # called by mkstemp
jm_PREREQ_XGETCWD
jm_PREREQ_XREADLINK
])
AC_DEFUN([jm_PREREQ_ARGMATCH],
[
AC_REQUIRE([jm_PREREQ_QUOTEARG])
AC_REPLACE_FUNCS(strcasecmp strncasecmp)
])
# Ask for argmatch.[ch], and set it up.
AC_DEFUN([jm_FUNC_ARGMATCH],
[
AC_REQUIRE([jm_PREREQ_ARGMATCH])
AC_LIBOBJ([argmatch])
AC_LIBSOURCES([argmatch.c, argmatch.h])
])
AC_DEFUN([jm_PREREQ_ADDEXT],
[
dnl For addext.c.
AC_SYS_LONG_FILE_NAMES
AC_CHECK_FUNCS(pathconf)
AC_CHECK_HEADERS(limits.h string.h unistd.h)
])
AC_DEFUN([jm_PREREQ_CANON_HOST],
[
dnl Add any libraries as early as possible.
dnl In particular, inet_ntoa needs -lnsl at least on Solaris5.5.1,
dnl so we have to add -lnsl to LIBS before checking for that function.
AC_SEARCH_LIBS(gethostbyname, [inet nsl])
dnl These come from -lnsl on Solaris5.5.1.
AC_CHECK_FUNCS(gethostbyname gethostbyaddr inet_ntoa)
AC_CHECK_FUNCS(gethostbyname gethostbyaddr inet_ntoa)
AC_CHECK_HEADERS(unistd.h string.h netdb.h sys/socket.h \
netinet/in.h arpa/inet.h)
])
AC_DEFUN([jm_PREREQ_DIRNAME],
[
AC_HEADER_STDC
AC_CHECK_HEADERS(string.h)
])
AC_DEFUN([jm_PREREQ_EXCLUDE],
[
AC_FUNC_FNMATCH_GNU
AC_HEADER_STDBOOL
])
AC_DEFUN([jm_PREREQ_GETPAGESIZE],
[
AC_CHECK_FUNCS(getpagesize)
AC_CHECK_HEADERS(OS.h unistd.h)
])
AC_DEFUN([jm_PREREQ_HARD_LOCALE],
[
AC_CHECK_HEADERS(locale.h stdlib.h string.h)
AC_CHECK_FUNCS(setlocale)
AM_C_PROTOTYPES
])
# AC_DEFUN([jm_PREREQ_HASH],
# [
# AC_CHECK_HEADERS(stdlib.h)
# AC_HEADER_STDBOOL
# AC_REQUIRE([jm_CHECK_DECLS])
# ])
# If you use human.c, you need the following files:
# inttypes.m4 ulonglong.m4
AC_DEFUN([jm_PREREQ_HUMAN],
[
AC_CHECK_HEADERS(limits.h stdlib.h string.h)
AC_CHECK_DECLS([getenv])
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
])
AC_DEFUN([jm_PREREQ_MEMCHR],
[
AC_CHECK_HEADERS(limits.h stdlib.h bp-sym.h)
])
AC_DEFUN([jm_PREREQ_PHYSMEM],
[
AC_CHECK_HEADERS(sys/pstat.h unistd.h)
AC_CHECK_FUNCS(pstat_getstatic pstat_getdynamic)
])
AC_DEFUN([jm_PREREQ_POSIXVER],
[
AC_CHECK_HEADERS(unistd.h)
AC_CHECK_DECLS([getenv])
])
AC_DEFUN([jm_PREREQ_QUOTEARG],
[
AC_CHECK_FUNCS(isascii iswprint mbsinit)
AC_CHECK_FUNCS(isascii iswprint)
jm_FUNC_MBRTOWC
jm_FUNC_MEMCMP
AC_CHECK_HEADERS(limits.h stddef.h stdlib.h string.h wchar.h wctype.h)
AC_HEADER_STDC
AC_C_BACKSLASH_A
AC_TYPE_MBSTATE_T
AM_C_PROTOTYPES
])
AC_DEFUN([jm_PREREQ_READUTMP],
[
AC_HEADER_STDC
AC_CHECK_HEADERS(string.h utmp.h utmpx.h sys/param.h)
AC_CHECK_FUNCS(utmpname)
AC_CHECK_FUNCS(utmpxname)
AM_C_PROTOTYPES
if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then
utmp_includes="\
$ac_includes_default
#ifdef HAVE_UTMPX_H
# include <utmpx.h>
#endif
#ifdef HAVE_UTMP_H
# include <utmp.h>
#endif
"
AC_CHECK_MEMBERS([struct utmpx.ut_user],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_user],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmpx.ut_name],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_name],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmpx.ut_type],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_type],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmpx.ut_pid],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_pid],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmpx.ut_id],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_id],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmpx.ut_exit.ut_exit],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_exit.ut_exit],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmpx.ut_exit.e_exit],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_exit.e_exit],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmpx.ut_exit.ut_termination],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_exit.ut_termination],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmpx.ut_exit.e_termination],,,[$utmp_includes])
AC_CHECK_MEMBERS([struct utmp.ut_exit.e_termination],,,[$utmp_includes])
AC_LIBOBJ(readutmp)
fi
])
AC_DEFUN([jm_PREREQ_REGEX],
[
dnl FIXME: Maybe provide a btowc replacement someday: solaris-2.5.1 lacks it.
dnl FIXME: Check for wctype and iswctype, and and add -lw if necessary
dnl to get them.
AC_CHECK_FUNCS(bzero bcopy isascii btowc)
AC_CHECK_HEADERS(alloca.h libintl.h wctype.h wchar.h)
AC_HEADER_STDC
AC_FUNC_ALLOCA
])
AC_DEFUN([jm_PREREQ_STAT],
[
AC_CHECK_HEADERS(sys/sysmacros.h sys/statvfs.h sys/vfs.h inttypes.h)
AC_CHECK_HEADERS(sys/param.h sys/mount.h)
AC_CHECK_FUNCS(statvfs)
jm_AC_TYPE_LONG_LONG
statxfs_includes="\
$ac_includes_default
#if HAVE_SYS_STATVFS_H
# include <sys/statvfs.h>
#endif
#if HAVE_SYS_VFS_H
# include <sys/vfs.h>
#endif
#if ( ! HAVE_SYS_STATVFS_H && ! HAVE_SYS_VFS_H && HAVE_SYS_MOUNT_H && HAVE_SYS_PARAM_H )
/* NetBSD 1.5.2 needs these, for the declaration of struct statfs. */
# include <sys/param.h>
# include <sys/mount.h>
#endif
"
AC_CHECK_MEMBERS([struct statfs.f_basetype],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statvfs.f_basetype],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statfs.f_type],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statvfs.f_type],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statfs.f_fsid.__val],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statvfs.f_fsid.__val],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statfs.f_namemax],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statvfs.f_namemax],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statfs.f_namelen],,,[$statxfs_includes])
AC_CHECK_MEMBERS([struct statvfs.f_namelen],,,[$statxfs_includes])
])
AC_DEFUN([jm_PREREQ_STRNLEN],
[
AC_FUNC_STRNLEN
AC_HEADER_STDC
AC_CHECK_HEADERS(memory.h)
AC_CHECK_DECLS([memchr])
# This is necessary because automake-1.6.1 doesn't understand
# that the above use of AC_FUNC_STRNLEN means we may have to use
# lib/strnlen.c.
test $ac_cv_func_strnlen_working = yes \
&& AC_LIBOBJ(strnlen)
])
AC_DEFUN([jm_PREREQ_TEMPNAME],
[
AC_HEADER_STDC
AC_HEADER_STAT
AC_CHECK_HEADERS(fcntl.h sys/time.h stdint.h unistd.h)
AC_CHECK_FUNCS(__secure_getenv gettimeofday)
AC_CHECK_DECLS([getenv])
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
])
AC_DEFUN([jm_PREREQ_XGETCWD],
[
AC_C_PROTOTYPES
AC_CHECK_HEADERS(limits.h stdlib.h sys/param.h unistd.h)
AC_CHECK_FUNCS(getcwd)
AC_FUNC_GETCWD_NULL
])
AC_DEFUN([jm_PREREQ_XREADLINK],
[
AC_C_PROTOTYPES
AC_CHECK_HEADERS(limits.h stdlib.h sys/types.h unistd.h)
])
-40
View File
@@ -1,40 +0,0 @@
#serial 6
dnl From Jim Meyering.
dnl Determine whether realloc works when both arguments are 0.
dnl If it doesn't, arrange to use the replacement function.
dnl
AC_DEFUN([jm_FUNC_REALLOC],
[
dnl xmalloc.c requires that this symbol be defined so it doesn't
dnl mistakenly use a broken realloc -- as it might if this test were omitted.
AC_DEFINE(HAVE_DONE_WORKING_REALLOC_CHECK, 1,
[Define if the realloc check has been performed. ])
AC_CACHE_CHECK([whether realloc(0,0) returns a non-NULL pointer],
jm_cv_func_working_realloc,
[AC_TRY_RUN([
char *realloc ();
int
main ()
{
exit (realloc (0, 0) ? 0 : 1);
}
],
jm_cv_func_working_realloc=yes,
jm_cv_func_working_realloc=no,
dnl When crosscompiling, assume realloc(0,0) returns NULL.
jm_cv_func_working_realloc=no)
])
if test $jm_cv_func_working_realloc = yes; then
AC_DEFINE([HAVE_REALLOC], 1,
[Define to 1 if your system has a working `realloc' function,
and to 0 otherwise.])
else
AC_DEFINE([HAVE_REALLOC], 0)
AC_LIBOBJ(realloc)
AC_DEFINE(realloc, rpl_realloc,
[Define to rpl_realloc if the replacement function should be used.])
fi
])
-33
View File
@@ -1,33 +0,0 @@
# -*-Autoconf-*-
# Checks required to run `stage', a nonportable memory/time tracker.
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA
# serial 1
AC_DEFUN([BISON_PREREQ_STAGE],
[AC_CHECK_HEADERS([malloc.h])
AC_CHECK_FUNCS([mallinfo])
AC_CHECK_TYPES([struct mallinfo], [], [],
[$ac_includes_default
#if HAVE_MALLOC_H
# include <malloc.h>
#endif
])
])
-59
View File
@@ -1,59 +0,0 @@
#serial 1003
# Experimental replacement for the function in the latest CVS autoconf.
# Use with the error.c file in ../lib.
# Copyright 2001 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
undefine([AC_FUNC_STRERROR_R])
# AC_FUNC_STRERROR_R
# ------------------
AC_DEFUN([AC_FUNC_STRERROR_R],
[AC_CHECK_DECLS([strerror_r])
AC_CHECK_FUNCS([strerror_r])
AC_CACHE_CHECK([whether strerror_r returns char *],
ac_cv_func_strerror_r_char_p,
[
ac_cv_func_strerror_r_char_p=no
if test $ac_cv_have_decl_strerror_r = yes; then
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
[[
char buf[100];
char x = *strerror_r (0, buf, sizeof buf);
char *p = strerror_r (0, buf, sizeof buf);
]])],
ac_cv_func_strerror_r_char_p=yes)
else
# strerror_r is not declared. Choose between
# systems that have relatively inaccessible declarations for the
# function. BeOS and DEC UNIX 4.0 fall in this category, but the
# former has a strerror_r that returns char*, while the latter
# has a strerror_r that returns `int'.
# This test should segfault on the DEC system.
AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
extern char *strerror_r ();],
[[char buf[100];
char x = *strerror_r (0, buf, sizeof buf);
exit (!isalpha (x));]])],
ac_cv_func_strerror_r_char_p=yes, , :)
fi
])
if test $ac_cv_func_strerror_r_char_p = yes; then
AC_DEFINE([STRERROR_R_CHAR_P], 1,
[Define to 1 if strerror_r returns char *.])
fi
])# AC_FUNC_STRERROR_R
+13 -7
View File
@@ -1,5 +1,5 @@
# -*-Autoconf-*-
# Checks required to run `stage', a nonportable memory/time tracker.
# -*- Autoconf -*-
# Checks required to run `timevar', a time tracker.
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
@@ -21,27 +21,33 @@
# serial 1
AC_DEFUN([BISON_PREREQ_TIMEVAR],
[AC_CHECK_HEADERS([sys/resource.h sys/times.h])
[AC_CHECK_HEADERS([sys/resource.h sys/time.h sys/times.h])
AC_CHECK_FUNCS([times])
AC_CHECK_DECLS([getrusage, times, clock, sysconf], [], [],
[$ac_includes_default
#if HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#if HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#if HAVE_SYS_TIMES_H
# include <sys/times.h>
#endif
#if HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#endif
])
AC_CHECK_TYPES([clock_t, struct tms], [], [],
[$ac_includes_default
#if HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#if HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#if HAVE_SYS_TIMES_H
# include <sys/times.h>
#endif
#if HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#endif
])
])
+1
View File
@@ -3,6 +3,7 @@ es
et
fr
hr
id
it
ja
nl
+2 -7
View File
@@ -1,6 +1,3 @@
src/LR0.c
src/assoc.c
src/closure.c
src/complain.c
src/conflicts.c
src/files.c
@@ -8,16 +5,14 @@ src/getargs.c
src/gram.c
src/lalr.c
src/main.c
src/parse-gram.y
src/parse-gram.c
src/print.c
src/reader.c
src/reduce.c
src/relation.c
src/scan-gram.l
src/scan-gram.c
src/state.c
src/symlist.c
src/symtab.c
src/tables.c
lib/argmatch.c
lib/bitset_stats.c
+228 -267
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"PO-Revision-Date: 2002-05-02 14:18:50+0200\n"
"Project-Id-Version: bison 1.50\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-10-07 10:50:39+0200\n"
"Last-Translator: Michael Piefel <[email protected]>\n"
"Language-Team: German <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -15,66 +15,6 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, fuzzy, c-format
msgid "Exiting get_state => %d\n"
msgstr " %-4s\tgehe zu Zustand %d über\n"
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, c-format
msgid "Closure: %s\n"
msgstr ""
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (Regel %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Unbekannter Systemfehler"
@@ -88,19 +28,22 @@ msgid "fatal error: "
msgstr "fataler Fehler: "
#: src/conflicts.c:72
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr "Konflikt in Zustand %d zwischen Regel %d and Token %s wurde %s.\n"
msgstr ""
" Konflikt zwischen Regel %d and Token %s wurde durch Schieben gelöst"
#: src/conflicts.c:80
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr "Konflikt in Zustand %d zwischen Regel %d and Token %s wurde %s.\n"
msgstr ""
" Konflikt zwischen Regel %d and Token %s wurde durch Reduzierung gelöst"
#: src/conflicts.c:87
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr "Konflikt in Zustand %d zwischen Regel %d and Token %s wurde %s.\n"
msgstr ""
" Konflikt zwischen Regel %d and Token %s wurde als Fehler betrachtet"
#: src/conflicts.c:402
#, c-format
@@ -140,11 +83,11 @@ msgid "State %d contains "
msgstr "Zustand %d enthält "
#: src/conflicts.c:537
#, fuzzy, c-format
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "erwartete %d Schiebe/Reduziere-Konflikt\n"
msgstr[1] "erwartete %d Schiebe/Reduziere-Konflikte\n"
msgstr[0] "erwartete %d Schiebe/Reduziere-Konflikt"
msgstr[1] "erwartete %d Schiebe/Reduziere-Konflikte"
#: src/files.c:114
#, c-format
@@ -209,7 +152,6 @@ msgstr ""
"einschließen\n"
#: src/getargs.c:190
#, fuzzy
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -222,6 +164,7 @@ msgid ""
msgstr ""
"Ausgabe:\n"
" -d, --defines auch eine Header-Datei herstellen\n"
" -r, --report=DINGE auch Details des Automaten ausgeben\n"
" -v, --verbose auch eine Erklärung des Automaten herstellen\n"
" -b, --file-prefix=PRÄFIX einen PRÄFIX für Ausgabe-Dateien angeben\n"
" -o, --output=DATEI Ausgabe in DATEI schreiben\n"
@@ -238,6 +181,13 @@ msgid ""
" `all' include all the above information\n"
" `none' disable the report\n"
msgstr ""
"DINGE ist eine Liste kommagetrennter Wörter aus:\n"
" »state« die Zustänge beschreiben\n"
" »itemset« die Kernsybolmengen mit ihrem Abschluss vervollständigen\n"
" »lookahead« explizit Vorschau mit Symbolen verbinden\n"
" »solved« Schiebe-/Reduzier-Konfliktlösung beschreiben\n"
" »all« alle oben genannten Informationen\n"
" »none« den Report abschalten\n"
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
@@ -290,70 +240,22 @@ msgstr "leer"
msgid "Grammar"
msgstr "Grammatik"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
#: src/gram.c:253
msgid "Value Sprec Sassoc Tag\n"
msgstr ""
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
msgstr "Warnung: "
msgstr "Warnung"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "zu viele Gotos (max %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
msgstr "Regel nie reduziert wegen Konflikten"
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
msgstr "POSIX verbietet Deklarationen in der Grammatik"
#: src/print.c:46
#, c-format
@@ -361,58 +263,56 @@ msgid " type %d is %s\n"
msgstr " Typ %d ist %s\n"
#: src/print.c:162
#, fuzzy, c-format
#, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tschiebe und gehe zu Zustand %d über\n"
msgstr "schiebe und gehe zu Zustand %d über\n"
#: src/print.c:164
#, fuzzy, c-format
#, c-format
msgid "go to state %d\n"
msgstr " %-4s\tgehe zu Zustand %d über\n"
msgstr "gehe zu Zustand %d über\n"
#: src/print.c:201
#, fuzzy
msgid "error (nonassociative)\n"
msgstr "%-4s\tFehler (nicht assoziativ)"
msgstr "Fehler (nicht assoziativ)\n"
#: src/print.c:290
#, fuzzy, c-format
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "$default\treduziere mit Regel %d (%s)"
msgstr "reduziere mit Regel %d (%s)"
#: src/print.c:293
msgid "accept"
msgstr ""
msgstr "annehmen"
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr ""
msgstr "$default"
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "Zustand %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Terminale und die Regeln, in denen sie verwendet werden"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Nicht-Terminal und die Regeln, in denen sie verwendet werden"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " auf der linken Seite:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " auf der rechten Seite:"
#: src/print.c:552
#, fuzzy
#: src/print.c:555
msgid "Rules never reduced"
msgstr "%d Regel wurde niemals reduziert\n"
msgstr "niemals reduzierte Regeln"
#: src/reader.c:52
#, c-format
@@ -422,84 +322,79 @@ msgstr "mehr als eine %s-Deklaration"
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr ""
msgstr "Rückgabetyp-Konflikt in merge-Funktion %s: »%s« und »%s«"
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "Regel für %s vorhanden, welches aber ein Token ist"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "Typkonflikt (»%s« »%s«) bei Default-Aktion"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "leere Regel für Nicht-Terminal mit Typ und keine Aktion"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "zwei @prec-Anweisungen nacheinander"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
msgstr "%%dprec betrifft nur GLR-Parser"
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
msgstr "%%dprec muss von positiver Zahl gefolgt sein"
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
msgstr "nur ein %%dprec pro Regel erlaubt"
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
msgstr "%%merge betrifft nur GLR-Parser"
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
msgstr "nur ein %%merge pro Regel erlaubt"
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "Eingabegrammatik enthält keine Regeln"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "zu viele Symbole (Token plus Nicht-Terminale); Maximum %d"
#: src/reduce.c:239
#, fuzzy
msgid "useless rule"
msgstr "%d nutzlose Regel"
msgstr "nutzlose Regel"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d nutzloses Nicht-Terminal"
msgstr "nutzloses Nicht-Terminal"
#: src/reduce.c:349
#, fuzzy
msgid "Useless nonterminals"
msgstr "Nutzlose Nicht-Terminale:"
msgstr "Nutzlose Nicht-Terminale"
#: src/reduce.c:362
#, fuzzy
msgid "Terminals which are not used"
msgstr "Nicht genutzte Terminale:"
msgstr "Nicht genutzte Terminale"
#: src/reduce.c:371
#, fuzzy
msgid "Useless rules"
msgstr "Ungenutzte Regeln:"
msgstr "Nutzlose Regeln"
#: src/reduce.c:387
#, c-format
@@ -527,75 +422,61 @@ msgstr[0] "%d nutzlose Regel"
msgstr[1] "%d nutzlose Regeln"
#: src/reduce.c:435
#, fuzzy, c-format
#, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "es lassen sich keine Sätze vom Startsymbol %s ableiten"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
msgstr ": ungültiges Zeichen: »%c«\n"
#: src/scan-gram.l:246
#, fuzzy
#: scan-gram.l:255
msgid ": unexpected end of file in a comment\n"
msgstr "Datei endet unerwartet"
msgstr ": Datei endet unerwartet innerhalb eines Kommentars\n"
#: src/scan-gram.l:274 src/scan-gram.l:412
#, fuzzy
#: scan-gram.l:284 scan-gram.l:423
msgid ": unexpected end of file in a string\n"
msgstr "Datei endet unerwartet"
msgstr ": Datei endet unerwartet innerhalb einer Zeichenkette\n"
#: src/scan-gram.l:311 src/scan-gram.l:383
#, fuzzy
#: scan-gram.l:322 scan-gram.l:394
msgid ": unexpected end of file in a character\n"
msgstr "Datei endet unerwartet"
msgstr ": Datei endet unerwartet innerhalb eines Zeichens\n"
#: src/scan-gram.l:332
#, fuzzy, c-format
#: scan-gram.l:343
#, c-format
msgid ": invalid escape: %s\n"
msgstr "unzulässiger Wert: %s%d"
msgstr ": unzulässiges Fluchtzeichen: %s\n"
#: src/scan-gram.l:353
#, fuzzy, c-format
#: scan-gram.l:364
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr "unbekannt: %s"
msgstr ": unbekannt Fluchtzeichen: %s\n"
#: src/scan-gram.l:473
#, fuzzy
#: scan-gram.l:485
msgid ": unexpected end of file in a braced code\n"
msgstr "Datei endet unerwartet"
msgstr ": Datei endet unerwartet innerhalb geklammerten Programmtexts\n"
#: src/scan-gram.l:502
#, fuzzy
#: scan-gram.l:514
msgid ": unexpected end of file in a prologue\n"
msgstr "Datei endet unerwartet"
msgstr ": Datei endet unerwartet innerhalb eines Prologs\n"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ von »%s« hat keinen deklarierten Typ"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "unzulässiger Wert: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d von »%s« hat keinen deklarierten Typ"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s ist unzulässig"
@@ -615,9 +496,9 @@ msgid "type redeclaration for %s"
msgstr "erneute Deklaration des Typs für %s"
#: src/symtab.c:98 src/symtab.c:117
#, fuzzy, c-format
#, c-format
msgid "%s redeclaration for %s"
msgstr "erneute Deklaration des Typs für %s"
msgstr "%s erneute Deklaration für %s"
#: src/symtab.c:138
#, c-format
@@ -630,9 +511,9 @@ msgid "symbol %s redefined"
msgstr "Symbol %s noch einmal definiert"
#: src/symtab.c:180
#, fuzzy, c-format
#, c-format
msgid "redefining user token number of %s"
msgstr "Vorrang von %s wird erneut definiert"
msgstr "Nutzertokennummer von %s erneut definiert"
#: src/symtab.c:225
#, c-format
@@ -657,9 +538,9 @@ msgid "conflicting precedences for %s and %s"
msgstr "Vorrang für %s und %s widersprechen sich"
#: src/symtab.c:293
#, fuzzy, c-format
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "Assoziativitäts-Werte für %s und %s widersprechen sich"
msgstr "Assoziativitäts-Werte für %s (%s) und %s (%s) widersprechen sich"
#: src/symtab.c:363
#, c-format
@@ -676,93 +557,85 @@ msgstr "das Startsymbol %s ist undefiniert"
msgid "the start symbol %s is a token"
msgstr "das Startsymbol %s ist ein Token"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
#, c-format
msgid "invalid argument %s for %s"
msgstr "unzulässiger Wert: %s%d"
msgstr "unzulässiges Argument %s für %s"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
msgstr "mehrdeutiges Argument %s für %s"
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
msgstr "Gültige Argumente sind:"
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr ""
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u freigegeben (%.2f%%).\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgstr ""
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u zwischengespeichert (%.2f%%)\n"
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
msgstr ""
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u zwischengespeichert (%.2f%%)\n"
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u zwischengespeichert (%.2f%%)\n"
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr "Zähler-Histogramm\n"
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
msgstr "Größe-Histogramm\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
msgstr "Dichte-Histogramm\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Bitset-Statistiken:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgstr ""
msgid "Accumulated runs = %u\n"
msgstr "Gesammelte Durchläufe = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
msgstr "Konnte Statistik-Datei nicht lesen."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
msgstr "Ungültige Statistik-Datei-Größe.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
msgstr "Konnte Statistik-Datei nicht schreiben."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
msgstr "Konnte Statistik-Datei nicht zum Schreiben öffnen."
#: lib/getopt.c:662
#, c-format
@@ -831,20 +704,108 @@ msgstr "»"
msgid "'"
msgstr "«"
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
"\n"
"Ausführungszeiten (Sekunden)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
msgstr " ZUSAMMEN :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
msgstr "Zeit in %s: %ld.%06ld (%ld%%)\n"
#~ msgid "state_list_append (state = %d, symbol = %d (%s))\n"
#~ msgstr "state_list_append (Zustand = %d, Symbol = %d (%s))\n"
#~ msgid "Entering new_itemsets, state = %d\n"
#~ msgstr "Betrete new_itemsets, Zustand = %d\n"
#~ msgid "Entering get_state, symbol = %d (%s)\n"
#~ msgstr "Betrete get_state, Symbol = %d (%s)\n"
#~ msgid "Exiting get_state => %d\n"
#~ msgstr "Verlasse get_state => %d\n"
#~ msgid "Entering append_states, state = %d\n"
#~ msgstr "Betrete append_states, Zustand = %d\n"
#~ msgid "Processing state %d (reached by %s)\n"
#~ msgstr "Verarbeite Zustand %d (erreicht von %s)\n"
#~ msgid "undefined associativity"
#~ msgstr "undefinierte Assoziativität"
#~ msgid "Closure: %s\n"
#~ msgstr "Abschluss: %s\n"
#~ msgid " (rule %d)\n"
#~ msgstr " (Regel %d)\n"
#~ msgid "input"
#~ msgstr "Eingabe"
#~ msgid "output"
#~ msgstr "Ausgabe"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variablen\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Wert Spräz Sassoz Tag\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Regeln\n"
#~ "-----\n"
#~ "\n"
#~ msgid ""
#~ "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
#~ msgstr ""
#~ "Num (Präz, Assoz, Nützl., Ritem-Ber.) LS -> RS (Ritem-Ber.) [Num]\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Regeln interpretiert\n"
#~ "-----------------\n"
#~ "\n"
#~ msgid "Lookaheads: BEGIN\n"
#~ msgstr "Vorschau: ANFANG\n"
#~ msgid "State %d: %d lookaheads\n"
#~ msgstr "Zustand %d: %d Vorschauen\n"
#~ msgid " on %d (%s) -> rule %d\n"
#~ msgstr " auf %d (%s) -> Regel %d\n"
#~ msgid "Lookaheads: END\n"
#~ msgstr "Vorschau: ENDE\n"
#~ msgid "relation_transpose: input\n"
#~ msgstr "relation_transpose: Eingabe\n"
#~ msgid "relation_transpose: output\n"
#~ msgstr "relation_transpose: Ausgabe\n"
#~ msgid "reduce"
#~ msgstr "durch Reduzierung gelöst"
+62 -185
View File
@@ -29,7 +29,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-05-02 10:19+0200\n"
"Last-Translator: Nicolás García-Pedrajas <[email protected]>\n"
"Language-Team: Spanish <[email protected]>\n"
@@ -38,66 +38,6 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, fuzzy, c-format
msgid "Exiting get_state => %d\n"
msgstr " %-4s\tir al estado %d\n"
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, c-format
msgid "Closure: %s\n"
msgstr ""
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (regla %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Error del sistema desconocido"
@@ -352,35 +292,6 @@ msgstr "vac
msgid "Grammar"
msgstr "Gramática"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
#: src/gram.c:253
msgid "Value Sprec Sassoc Tag\n"
msgstr ""
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
@@ -391,29 +302,11 @@ msgstr "aviso: "
msgid "too many gotos (max %d)"
msgstr "demasiados gotos (máximo %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
@@ -455,23 +348,23 @@ msgstr ""
msgid "state %d"
msgstr "estado %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Terminales con las reglas donde aparecen"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "No terminales con las reglas donde aparecen"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " en la izquierda:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " en la derecha:"
#: src/print.c:552
#: src/print.c:555
#, fuzzy
msgid "Rules never reduced"
msgstr "%d regla que nunca se ha reducido\n"
@@ -491,49 +384,49 @@ msgstr ""
msgid "rule given for %s, which is a token"
msgstr "se ha dado una regla para %s, que es un terminal"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "los tipos (`%s' `%s') no concuerdan en la acción por defecto"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "regla vacía para un no terminal con tipo y no hay ninguna acción"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "dos @prec en una línea"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "no hay reglas en la gramática de entrada"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "demasiados símbolos (terminales y no terminales); máximo %d"
@@ -593,71 +486,62 @@ msgstr[1] "%d reglas sin uso"
msgid "start symbol %s does not derive any sentence"
msgstr "El símbolo de inicio (axioma) %s no deriva ninguna sentencia"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
#: src/scan-gram.l:246
#: scan-gram.l:255
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "fin de fichero inesperado"
#: src/scan-gram.l:274 src/scan-gram.l:412
#: scan-gram.l:284 scan-gram.l:423
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "fin de fichero inesperado"
#: src/scan-gram.l:311 src/scan-gram.l:383
#: scan-gram.l:322 scan-gram.l:394
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "fin de fichero inesperado"
#: src/scan-gram.l:332
#: scan-gram.l:343
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgstr "valor no válido: %s%d"
#: src/scan-gram.l:353
#: scan-gram.l:364
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgstr "no reconocido: %s"
#: src/scan-gram.l:473
#: scan-gram.l:485
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "fin de fichero inesperado"
#: src/scan-gram.l:502
#: scan-gram.l:514
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "fin de fichero inesperado"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ de `%s' no tiene tipo declarado"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "valor no válido: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d de `%s' no tiene tipo declarado"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s no es válido"
@@ -740,16 +624,6 @@ msgstr "el s
msgid "the start symbol %s is a token"
msgstr "el símbolo de inicio (axioma) %s es un terminal"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
msgid "invalid argument %s for %s"
@@ -764,67 +638,67 @@ msgstr ""
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
@@ -919,17 +793,17 @@ msgstr "`"
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
@@ -985,6 +859,9 @@ msgstr ""
#~ msgid "`%s' requires an argument"
#~ msgstr "`%s' requiere un argumento"
#~ msgid " (rule %d)"
#~ msgstr " (regla %d)"
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\terror (no asociativo)\n"
+145 -418
View File
@@ -4,76 +4,16 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"PO-Revision-Date: 2002-05-02 12:45+0300\n"
"Last-Translator: Toomas Soome <tsoome@ut.ee>\n"
"Project-Id-Version: bison 1.50\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-10-07 09:28+03:00\n"
"Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
"Language-Team: Estonian <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, fuzzy, c-format
msgid "Exiting get_state => %d\n"
msgstr " %-4s\tliigu olekule %d\n"
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, c-format
msgid "Closure: %s\n"
msgstr ""
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (reegel %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Tundmatu süsteemi viga"
@@ -87,19 +27,19 @@ msgid "fatal error: "
msgstr "fataalne viga: "
#: src/conflicts.c:72
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr "Konflikt olekus %d reegli %d ja märgi %s vahel lahendatud, kui %s.\n"
msgstr " Konflikt reegli %d ja märgi %s vahel lahendatud nihkega"
#: src/conflicts.c:80
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr "Konflikt olekus %d reegli %d ja märgi %s vahel lahendatud, kui %s.\n"
msgstr " Konflikt reegli %d ja märgi %s vahel lahendatud redutseerimisega"
#: src/conflicts.c:87
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr "Konflikt olekus %d reegli %d ja märgi %s vahel lahendatud, kui %s.\n"
msgstr " Konflikt reegli %d ja märgi %s vahel lahendatud veana"
#: src/conflicts.c:402
#, c-format
@@ -139,11 +79,11 @@ msgid "State %d contains "
msgstr "Olek %d sisaldab "
#: src/conflicts.c:537
#, fuzzy, c-format
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "eeldasime %d nihutamine/redutseerimine konflikti\n"
msgstr[1] "eeldasime %d nihutamine/redutseerimine konflikti\n"
msgstr[0] "eeldasime %d nihutamine/redutseerimine konflikti"
msgstr[1] "eeldasime %d nihutamine/redutseerimine konflikti"
#: src/files.c:114
#, c-format
@@ -204,7 +144,6 @@ msgstr ""
" -k, --token-table lisa ka sümbolite nimede tabel\n"
#: src/getargs.c:190
#, fuzzy
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -217,7 +156,8 @@ msgid ""
msgstr ""
"Väljund:\n"
" -d, --defines loo ka päisfail\n"
" -v, --verbose väljasta automaadi kohta selgitusi\n"
" -r, --report=ASJAD väljasta automaadi kohta selgitusi\n"
" -v, --verbose sama, kui `--report=state'\n"
" -b, --file-prefix=PREFIKS kasuta väljundfailide nimedes PREFIKSit\n"
" -o, --output-file=FAIL jäta väljund FAILi\n"
" -g, --graph loo automaadi kirjeldus VCG graafina\n"
@@ -232,6 +172,13 @@ msgid ""
" `all' include all the above information\n"
" `none' disable the report\n"
msgstr ""
"ASJAD on loend komadega eraldatud järgnevaid sõnu:\n"
" `state' olekute kirjeldus\n"
" `itemset' täienda põhilisi elemente nende sulunditega\n"
" `lookahead' seo ettevaatamised elementidega\n"
" `solved' kirjelda nihuta/redutseeri konfliktide lahendamisi\n"
" `all' kogu ülaltoodud info\n"
" `none' blokeeri raport\n"
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
@@ -282,70 +229,22 @@ msgstr "t
msgid "Grammar"
msgstr "Grammatika"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
#: src/gram.c:253
msgid "Value Sprec Sassoc Tag\n"
msgstr ""
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
msgstr "hoiatus: "
msgstr "hoiatus"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "liiga palju gotosid (maks %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
msgstr "liiga palju gotosid (maks. %d)"
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
msgstr "reeglit ei redutseerita konfliktide tõttu kunagi"
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
msgstr "POSIX keelab deklareerimised grammatikas"
#: src/print.c:46
#, c-format
@@ -353,58 +252,56 @@ msgid " type %d is %s\n"
msgstr " tüüp %d on %s\n"
#: src/print.c:162
#, fuzzy, c-format
#, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tnihuta ja liigu olekule %d\n"
msgstr "nihuta ja liigu olekule %d\n"
#: src/print.c:164
#, fuzzy, c-format
#, c-format
msgid "go to state %d\n"
msgstr " %-4s\tliigu olekule %d\n"
msgstr "liigu olekule %d\n"
#: src/print.c:201
#, fuzzy
msgid "error (nonassociative)\n"
msgstr " %-4s\tviga (mitteassotsiatiivne)\n"
msgstr "viga (mitteassotsiatiivne)\n"
#: src/print.c:290
#, fuzzy, c-format
#, c-format
msgid "reduce using rule %d (%s)"
msgstr " %-4s\tredutseerin kasutades reeglit %d (%s)\n"
msgstr "redutseerin kasutades reeglit %d (%s)"
#: src/print.c:293
msgid "accept"
msgstr ""
msgstr "nõustun"
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr ""
msgstr "$default"
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "olek %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Terminalid, koos reeglitega, kus nad ilmuvad"
msgstr "Terminalid, koos reeglitega kus nad ilmuvad"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Mitteterminalid, koos reeglitega, kus nad ilmuvad"
msgstr "Mitteterminalid, koos reeglitega kus nad ilmuvad"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " vasakul:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " paremal:"
#: src/print.c:552
#, fuzzy
#: src/print.c:555
msgid "Rules never reduced"
msgstr "%d reegel ei redutseeru\n"
msgstr "Mitteredutseeruvad reeglid"
#: src/reader.c:52
#, c-format
@@ -414,84 +311,79 @@ msgstr "korduvad %s deklaratsioonid"
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr ""
msgstr "tulemuse tüübikonflikt mestimise funktsioonis %s: `%s' versus `%s'"
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "%s jaoks on antud reegel, aga see on märk"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "vaikimisi tegevuse tüübikonflikt (`%s' `%s')"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "tüübiga mitteterminalil on tühi reegel ja puudub tegevus"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "kaks @prec ühel real"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
msgstr "%%dprec puudutab ainult GLR parsereid"
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
msgstr "%%dprec järel peab olema positiivne number"
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
msgstr "reeglis on lubatud ainult üks %%dprec"
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
msgstr "%%merge puudutab ainult GLR parsereid"
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
msgstr "reeglis on lubatud ainult üks %%merge"
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "sisendgrammatikas pole reegleid"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "liiga palju sümboleid (märgid ja mitteterminalid); maksimaalne on %d"
#: src/reduce.c:239
#, fuzzy
msgid "useless rule"
msgstr "%d kasutamata reegel"
msgstr "kasutamata reegel"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d kasutamata mitteterminal"
msgstr "kasutamata mitteterminal"
#: src/reduce.c:349
#, fuzzy
msgid "Useless nonterminals"
msgstr "Kasutamata mitteterminalid:"
msgstr "Kasutamata mitteterminalid"
#: src/reduce.c:362
#, fuzzy
msgid "Terminals which are not used"
msgstr "Terminalid, mida ei kasutatud:"
msgstr "Terminalid, mida ei kasutatud"
#: src/reduce.c:371
#, fuzzy
msgid "Useless rules"
msgstr "Kasutamata reeglid:"
msgstr "Kasutamata reeglid"
#: src/reduce.c:387
#, c-format
@@ -519,75 +411,61 @@ msgstr[0] "%d kasutamata reegel"
msgstr[1] "%d kasutamata reeglit"
#: src/reduce.c:435
#, fuzzy, c-format
#, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "Stardisümbolist %s ei tuletata ühtegi lauset"
msgstr "stardisümbolist %s ei tuletata ühtegi lauset"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
msgstr ": vigane sümbol: `%c'\n"
#: src/scan-gram.l:246
#, fuzzy
#: scan-gram.l:255
msgid ": unexpected end of file in a comment\n"
msgstr "ootamatu faililõpp"
msgstr ": ootamatu faililõpp kommentaaris\n"
#: src/scan-gram.l:274 src/scan-gram.l:412
#, fuzzy
#: scan-gram.l:284 scan-gram.l:423
msgid ": unexpected end of file in a string\n"
msgstr "ootamatu faililõpp"
msgstr ": ootamatu faililõpp sõnes\n"
#: src/scan-gram.l:311 src/scan-gram.l:383
#, fuzzy
#: scan-gram.l:322 scan-gram.l:394
msgid ": unexpected end of file in a character\n"
msgstr "ootamatu faililõpp"
msgstr ": ootamatu faililõpp sümbolis\n"
#: src/scan-gram.l:332
#, fuzzy, c-format
#: scan-gram.l:343
#, c-format
msgid ": invalid escape: %s\n"
msgstr "vigane väärtus: %s%d"
msgstr ": vigane paojada: %s\n"
#: src/scan-gram.l:353
#, fuzzy, c-format
#: scan-gram.l:364
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr "tundmatu: %s"
msgstr ": tundmatu paojada: %s\n"
#: src/scan-gram.l:473
#, fuzzy
#: scan-gram.l:485
msgid ": unexpected end of file in a braced code\n"
msgstr "ootamatu faililõpp"
msgstr ": ootamatu faililõpp sulgude vahelises koodis\n"
#: src/scan-gram.l:502
#, fuzzy
#: scan-gram.l:514
msgid ": unexpected end of file in a prologue\n"
msgstr "ootamatu faililõpp"
msgstr ": ootamatu faililõpp proloogis\n"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "`%s' $$ ei oma deklareeritud tüüpi"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "vigane väärtus: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d `%s' ei oma deklareeritud tüüpi"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s on vigane"
@@ -607,9 +485,9 @@ msgid "type redeclaration for %s"
msgstr "%s tüübi uuesti deklareerimine"
#: src/symtab.c:98 src/symtab.c:117
#, fuzzy, c-format
#, c-format
msgid "%s redeclaration for %s"
msgstr "%s tüübi uuesti deklareerimine"
msgstr "%s uuesti deklareerimine %s jaoks"
#: src/symtab.c:138
#, c-format
@@ -622,9 +500,9 @@ msgid "symbol %s redefined"
msgstr "sümbol %s on uuesti defineeritud"
#: src/symtab.c:180
#, fuzzy, c-format
#, c-format
msgid "redefining user token number of %s"
msgstr "%s prioriteedi uus definitsioon"
msgstr "%s kasutaja märgi numbri uuesti defineerimine"
#: src/symtab.c:225
#, c-format
@@ -649,9 +527,9 @@ msgid "conflicting precedences for %s and %s"
msgstr "%s ja %s omavad konfliktseid prioriteete"
#: src/symtab.c:293
#, fuzzy, c-format
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "%s ja %s omavad konfliktseid assotsiatiivseid väärtuseid"
msgstr "%s (%s) ja %s (%s) omavad konfliktseid assotsiatiivseid väärtuseid"
#: src/symtab.c:363
#, c-format
@@ -668,93 +546,85 @@ msgstr "stardis
msgid "the start symbol %s is a token"
msgstr "stardisümbol %s on märk"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
#, c-format
msgid "invalid argument %s for %s"
msgstr "vigane väärtus: %s%d"
msgstr "vigane argument %s %s'le"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
msgstr "segane argument %s %s'le"
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
msgstr "Lubatud argumendid on:"
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr ""
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u vabastatud (%.2f%%).\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgstr ""
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u puhverdatud (%.2f%%)\n"
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
msgstr ""
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u puhverdatud (%.2f%%)\n"
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u puhverdatud (%.2f%%)\n"
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr "loenduri logi histogramm\n"
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
msgstr "suuruste logi histogramm\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
msgstr "tiheduse histogramm\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Bitset statistika:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgstr ""
msgid "Accumulated runs = %u\n"
msgstr "Salvestatud läbimisi = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
msgstr "Statistika faili ei saa lugeda."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
msgstr "Vigane statistika faili suurus.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
msgstr "Statistika faili ei saa kirjutada."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
msgstr "Statistika faili ei saa kirjutamiseks avada."
#: lib/getopt.c:662
#, c-format
@@ -823,162 +693,19 @@ msgstr "`"
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
"\n"
"Täitmise ajad (sekundites)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
msgstr " KOKKU :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
#~ msgid "reduce"
#~ msgstr "redutseerimine"
#~ msgid "shift"
#~ msgstr "nihutamine"
#~ msgid "an error"
#~ msgstr "viga"
#~ msgid "%s contains "
#~ msgstr "%s sisaldab "
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' ei ole enam toetatud"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "leidsin ja ignoreerin ootamatu `/'"
#~ msgid "unterminated comment"
#~ msgstr "lõpetamata kommentaar"
#~ msgid "unescaped newline in constant"
#~ msgstr "paojadata reavahetus konstandis"
#~ msgid "octal value outside range 0...255: `\\%o'"
#~ msgstr "kaheksandväärtus väljaspool piire 0...255: `\\%o'"
#~ msgid "hexadecimal value above 255: `\\x%x'"
#~ msgstr "kuueteistkümnendväärtus suurem, kui above 255: `\\x%x'"
#~ msgid "unknown escape sequence: `\\' followed by `%s'"
#~ msgstr "tundmatu paojada: `\\' järgneb `%s'"
#~ msgid "unterminated type name at end of file"
#~ msgstr "lõpetamata tüübinimi faili lõpus"
#~ msgid "unterminated type name"
#~ msgstr "lõpetamata tüübinimi"
#~ msgid "use \"...\" for multi-character literal tokens"
#~ msgstr "kasuta mitmesümboliliste literaalidega \"...\" konstruktsiooni"
#~ msgid "`%s' supports no argument: %s"
#~ msgstr "`%s' ei toeta argumente: %s"
#~ msgid "`%s' requires an argument"
#~ msgstr "võti `%s' nõuab argumenti"
#~ msgid ""
#~ " $default\treduce using rule %d (%s)\n"
#~ "\n"
#~ msgstr ""
#~ " $default\tredutseerin kasutades reeglit %d (%s)\n"
#~ "\n"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[redutseerin, kasutades reeglit %d (%s)]\n"
#~ msgid " $default\treduce using rule %d (%s)\n"
#~ msgstr " $default\tredutseerin kasutades reeglit %d (%s)\n"
#~ msgid " $default\taccept\n"
#~ msgstr " $default\taktsepteerin\n"
#~ msgid " NO ACTIONS\n"
#~ msgstr " TEGEVUSI POLE\n"
#~ msgid "Number, Line, Rule"
#~ msgstr "Number, rida, reegel"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid " Skipping to next \\n"
#~ msgstr " Liigun järgmisele \\n"
#~ msgid " Skipping to next %c"
#~ msgstr " Liigun järgmisele %c"
#~ msgid "unterminated string at end of file"
#~ msgstr "lõpetamata sõne faili lõpus"
#~ msgid "unterminated string"
#~ msgstr "lõpetamata sõne"
#~ msgid "unterminated `%{' definition"
#~ msgstr "lõpetamata `%{' definitsioon"
#~ msgid "Premature EOF after %s"
#~ msgstr "Enneaegne EOF peale %s"
#~ msgid "`%s' is invalid in %s"
#~ msgstr "`%s' ei ole %s sees lubatud"
#~ msgid "invalid %s declaration"
#~ msgstr "vigane %s deklaratsioon"
#~ msgid "%type declaration has no <typename>"
#~ msgstr "%type deklaratsioonis puudub <tüübinimi>"
#~ msgid "invalid %%type declaration due to item: %s"
#~ msgstr "vigane %%type deklaratsioon, element: %s"
#~ msgid "invalid text (%s) - number should be after identifier"
#~ msgstr "vigane tekst (%s) - number peab olema peale identifikaatorit"
#~ msgid "unexpected item: %s"
#~ msgstr "ootamatu element: %s"
#~ msgid "unmatched %s"
#~ msgstr "puudub %s"
#~ msgid "argument of %%expect is not an integer"
#~ msgstr "%%expect argument ei ole täisarv"
#~ msgid "unrecognized item %s, expected an identifier"
#~ msgstr "tundmatu element %s, eeldasin identifikaatorit"
#~ msgid "expected string constant instead of %s"
#~ msgstr "eeldasin %s asemel sõnekonstanti"
#~ msgid "no input grammar"
#~ msgstr "sisendgrammatikat pole"
#~ msgid "unknown character: %s"
#~ msgstr "tundmatu sümbol: %s"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "vigaselt formeeritud reegel: algsümbolile ei järgne koolonit"
#~ msgid "grammar starts with vertical bar"
#~ msgstr "grammatika algab püstkriipsuga"
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "eelmisel reeglil puudub lõpetav `;'"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard on määratud, aga %%semantic_parser ei ole"
#~ msgid "two actions at end of one rule"
#~ msgstr "kaks tegevust ühe reegli lõpus"
#~ msgid "invalid input: %s"
#~ msgstr "vigane sisend: %s"
msgstr "aeg %s: %ld.%06ld (%ld%%)\n"
+240 -281
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"PO-Revision-Date: 2002-08-06 08:00-0500\n"
"Project-Id-Version: GNU bison 1.50\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-10-06 12:00-0500\n"
"Last-Translator: Michel Robitaille <[email protected]>\n"
"Language-Team: French <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -15,66 +15,6 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, fuzzy, c-format
msgid "Exiting get_state => %d\n"
msgstr " %-4s\taller à l'état %d\n"
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, fuzzy, c-format
msgid "Closure: %s\n"
msgstr "erreur: %s\n"
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (règle %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Erreur système inconnue"
@@ -88,22 +28,19 @@ msgid "fatal error: "
msgstr "erreur fatale: "
#: src/conflicts.c:72
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr ""
"Conflit à l'état %d entre la règle %d et le terminal %s résolu par %s.\n"
msgstr "Conflit entre la règle %d et le jeton %s résolu par décalage"
#: src/conflicts.c:80
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr ""
"Conflit à l'état %d entre la règle %d et le terminal %s résolu par %s.\n"
msgstr "Conflit entre la règle %d et le jeton %s résolu par réduction"
#: src/conflicts.c:87
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
"Conflit à l'état %d entre la règle %d et le terminal %s résolu par %s.\n"
msgstr "Conflit entre la règle %d et le jeton %s résolu comme étant une erreur"
#: src/conflicts.c:402
#, c-format
@@ -143,11 +80,11 @@ msgid "State %d contains "
msgstr "L'état %d contient "
#: src/conflicts.c:537
#, fuzzy, c-format
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "attendait %d conflit par décalage/réduction\n"
msgstr[1] "attendait %d conflits par décalage/réduction\n"
msgstr[0] "attendait %d conflit par décalage/réduction"
msgstr[1] "attendait %d conflits par décalage/réduction"
#: src/files.c:114
#, c-format
@@ -211,7 +148,6 @@ msgstr ""
" -k, --token-table inclure la table des noms de jetons\n"
#: src/getargs.c:190
#, fuzzy
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -224,6 +160,7 @@ msgid ""
msgstr ""
"Sortie:\n"
" -d, --defines produire un fichier d'en-tête\n"
" -r, --report=CHOSES générer les détails concernant l'automate\n"
" -v, --verbose produire une explication de l'automate\n"
" -b, --file-prefix=PREFIXE utiliser le PREFIXE pour le fichier de sortie\n"
" -o, --output=FICHIER produire la sortie dans le FICHIER\n"
@@ -240,6 +177,13 @@ msgid ""
" `all' include all the above information\n"
" `none' disable the report\n"
msgstr ""
"CHOSES est une liste de mots séparés par des virgules par les suivants:\n"
" `state' description des états\n"
" `itemset' compléter le corps du jeu d'items avec leur fermeture\n"
" `lookahead' explicitement associé les lookahead aux items\n"
" `solved' décrirer la résolution des conflits décalage/réduction\n"
" `all' inclure toutes les informations ci-haut\n"
" `none' désactiver la génération de rapport\n"
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
@@ -291,81 +235,22 @@ msgstr "vide"
msgid "Grammar"
msgstr "Grammaire"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"Variables\n"
"---------\n"
"\n"
#: src/gram.c:253
#, fuzzy
msgid "Value Sprec Sassoc Tag\n"
msgstr "Valeur Spréc Sassoc Tag\n"
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"Règles\n"
"------\n"
"\n"
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"Règles interprétées\n"
"-------------------\n"
"\n"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
msgstr "AVERTISSEMENT: "
msgstr "AVERTISSEMENT"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "nombre trop grand de « goto » (Max %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
#: src/main.c:117
#, fuzzy
msgid "rule never reduced because of conflicts"
msgstr "1 conflit réduction/réduction"
msgstr "la règle n'a jamais fait de réduction en raison des conflits"
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
msgstr "POSIX interdit les déclaration dans la grammaire"
#: src/print.c:46
#, c-format
@@ -373,145 +258,139 @@ msgid " type %d is %s\n"
msgstr " le type %d est %s\n"
#: src/print.c:162
#, fuzzy, c-format
#, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tdécalage et aller à l'état %d\n"
msgstr "décalage et aller à l'état %d\n"
#: src/print.c:164
#, fuzzy, c-format
#, c-format
msgid "go to state %d\n"
msgstr " %-4s\taller à l'état %d\n"
msgstr "aller à l'état %d\n"
#: src/print.c:201
#, fuzzy
msgid "error (nonassociative)\n"
msgstr "%-4s\terreur (non-associatif)"
msgstr "erreur (non-associative)\n"
#: src/print.c:290
#, fuzzy, c-format
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "$défaut\tréduction par la règle %d (%s)"
msgstr "réduction par utilisation de la règle %d (%s)"
#: src/print.c:293
msgid "accept"
msgstr ""
msgstr "accepter"
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr ""
msgstr "$défaut"
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "état %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Terminaux, suivis des règles où ils apparaissent"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Non-terminaux, suivis des règles où ils apparaissent"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " à gauche:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " à droite:"
#: src/print.c:552
#, fuzzy
#: src/print.c:555
msgid "Rules never reduced"
msgstr "%d règle n'a jamais été réduite\n"
msgstr "Règles jamais réduites"
#: src/reader.c:52
#, c-format
msgid "multiple %s declarations"
msgstr "multiples déclarations %s"
msgstr "déclarations multiples de %s"
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr ""
"conflit dans le type résultant de la fonction de fusion %s: « %s » vs « %s »"
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "la règle pour %s, qui est un terminal"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "conflit de type (« %s » « %s ») pour l'action par défaut"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "règle vide pour une catégorie typée et aucune action"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "deux @prec de suite"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
msgstr "%%dprec affecte seulement les analyseurs GLR"
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
msgstr "%%dprec doit être suivi d'un nombre positif"
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
msgstr "seul un %%dprec est permis par règle"
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
msgstr "%%merge affecte seulement les analyseurs GLR"
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
msgstr "seul un %%merge est permis par règle"
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "la grammaire n'a pas de règles"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "trop de symboles (jeton plus non terminaux); maximum %d"
#: src/reduce.c:239
#, fuzzy
msgid "useless rule"
msgstr "%d règle inutilisable"
msgstr "règle inutilisable"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d nonterminal inutilisable"
msgstr "non-terminal inutilisable"
#: src/reduce.c:349
#, fuzzy
msgid "Useless nonterminals"
msgstr "Non-terminaux inutiles:"
msgstr "Non-terminaux inutiles"
#: src/reduce.c:362
#, fuzzy
msgid "Terminals which are not used"
msgstr "Terminaux non utilisés:"
msgstr "Terminaux qui ne sont utilisés"
#: src/reduce.c:371
#, fuzzy
msgid "Useless rules"
msgstr "Règles inutiles:"
msgstr "Règles inutiles"
#: src/reduce.c:387
#, c-format
@@ -539,75 +418,62 @@ msgstr[0] "%d r
msgstr[1] "%d règles inutilisables"
#: src/reduce.c:435
#, fuzzy, c-format
#, 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"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
"symbole de départ %s peut permettre la dérivation de n'importe quelle phrase"
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
msgstr ": caractère invalide: `%c'\n"
#: src/scan-gram.l:246
#, fuzzy
#: scan-gram.l:255
msgid ": unexpected end of file in a comment\n"
msgstr "Fin de fichier inattendue"
msgstr ": fin de fichier inattendue dans un commentaire\n"
#: src/scan-gram.l:274 src/scan-gram.l:412
#, fuzzy
#: scan-gram.l:284 scan-gram.l:423
msgid ": unexpected end of file in a string\n"
msgstr "Fin de fichier inattendue"
msgstr ": fin de fichier inattendue dans une chaîne\n"
#: src/scan-gram.l:311 src/scan-gram.l:383
#, fuzzy
#: scan-gram.l:322 scan-gram.l:394
msgid ": unexpected end of file in a character\n"
msgstr "Fin de fichier inattendue"
msgstr ": fin de fichier inattendue dans un caractère\n"
#: src/scan-gram.l:332
#, fuzzy, c-format
#: scan-gram.l:343
#, c-format
msgid ": invalid escape: %s\n"
msgstr "valeur invalide: %s%d"
msgstr ": séquence d'échappement invalide: %s\n"
#: src/scan-gram.l:353
#, fuzzy, c-format
#: scan-gram.l:364
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr "non reconnu: %s"
msgstr ": séquence d'échappement non reconnue: %s\n"
#: src/scan-gram.l:473
#, fuzzy
#: scan-gram.l:485
msgid ": unexpected end of file in a braced code\n"
msgstr "Fin de fichier inattendue"
msgstr ": fin de fichier inattendue dans du code entre accolades\n"
#: src/scan-gram.l:502
#, fuzzy
#: scan-gram.l:514
msgid ": unexpected end of file in a prologue\n"
msgstr "Fin de fichier inattendue"
msgstr ": fin de fichier inattendue dans un prologue\n"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ de « %s » n'a pas son type déclaré"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "valeur invalide: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d de « %s » n'a pas de type déclaré"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s n'est pas valide"
@@ -627,9 +493,9 @@ msgid "type redeclaration for %s"
msgstr "redéclaration du type de %s"
#: src/symtab.c:98 src/symtab.c:117
#, fuzzy, c-format
#, c-format
msgid "%s redeclaration for %s"
msgstr "redéclaration du type de %s"
msgstr "redéclaration de %s pour %s"
#: src/symtab.c:138
#, c-format
@@ -642,9 +508,9 @@ msgid "symbol %s redefined"
msgstr "symbole %s redéfini"
#: src/symtab.c:180
#, fuzzy, c-format
#, c-format
msgid "redefining user token number of %s"
msgstr "redéfinition du niveau de priorité de %s"
msgstr "redéfinition du jeton usager numéro de %s"
#: src/symtab.c:225
#, c-format
@@ -669,9 +535,9 @@ msgid "conflicting precedences for %s and %s"
msgstr "les priorités pour %s et %s entrent en conflit"
#: src/symtab.c:293
#, fuzzy, c-format
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "les valeurs d'association de %s et %s entrent en conflit"
msgstr "conflits d'associativités pour %s (%s) et %s (%s)"
#: src/symtab.c:363
#, c-format
@@ -688,93 +554,85 @@ msgstr "le symbole de d
msgid "the start symbol %s is a token"
msgstr "le symbole de départ %s est un terminal"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
#, c-format
msgid "invalid argument %s for %s"
msgstr "valeur invalide: %s%d"
msgstr "argument invalide %s pour %s"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
msgstr "argument ambiguë %s pour %s"
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
msgstr "Arguments valides sont:"
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr ""
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u libérés (%.2f%%).\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgstr ""
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u dans la cache (%.2f%%)\n"
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
msgstr ""
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u dans la cache (%.2f%%)\n"
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u dans la cache (%.2f%%)\n"
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr "histogramme des compteurs\n"
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
msgstr "taille de l'histogramme des compteurs\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
msgstr "densité de l'histogramme\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Statistiques des bitset:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgstr ""
msgid "Accumulated runs = %u\n"
msgstr "Exécutions accumulées = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
msgstr "Ne peut lire le fichier de stats."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
msgstr "Taille erronée du fichier de stats.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
msgstr "Ne peut écrire le fichier de stats."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
msgstr "Ne ouvrir en écriture le fichier de stats."
#: lib/getopt.c:662
#, c-format
@@ -843,20 +701,121 @@ msgstr "`"
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
"\n"
"Temps d'exécution (secondes)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
msgstr " TOTAL :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
msgstr "temps dans %s: %ld.%06ld (%ld%%)\n"
#~ msgid "state_list_append (state = %d, symbol = %d (%s))\n"
#~ msgstr "state_list_append (état = %d, symbole = %d (%s))\n"
#~ msgid "Entering new_itemsets, state = %d\n"
#~ msgstr "Entrant dans new_itemsets, état = %d\n"
#~ msgid "Entering get_state, symbol = %d (%s)\n"
#~ msgstr "Entrant dans get_state, symbole = %d (%s)\n"
#~ msgid "Exiting get_state => %d\n"
#~ msgstr "Sortant de get_state => %d\n"
#~ msgid "Entering append_states, state = %d\n"
#~ msgstr "Entrant dans append_states, état = %d\n"
#~ msgid "Processing state %d (reached by %s)\n"
#~ msgstr "Traitement de l'état %d (atteint par %s)\n"
#~ msgid "undefined associativity"
#~ msgstr "associativité indéfinie"
#~ msgid "Closure: %s\n"
#~ msgstr "Fermeture: %s\n"
#~ msgid " (rule %d)\n"
#~ msgstr " (règle %d)\n"
#~ msgid "RTC: Firsts Input"
#~ msgstr "RTC: premières entrées"
#~ msgid "RTC: Firsts Output"
#~ msgstr "RTC: premières sorties"
#~ msgid "input"
#~ msgstr "entrée"
#~ msgid "output"
#~ msgstr "sortie"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Valeur Sprec Sassoc Étiquette\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Règles\n"
#~ "------\n"
#~ "\n"
#~ msgid ""
#~ "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
#~ msgstr ""
#~ "Num (Prec, Assoc, Utile, Ritem étendue) Lhs -> Rhs (Ritem étendue) "
#~ "[Num]\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Règles interprétées\n"
#~ "-------------------\n"
#~ "\n"
#~ msgid "Lookaheads: BEGIN\n"
#~ msgstr "Lookaheads: DÉBUT\n"
#~ msgid "State %d: %d lookaheads\n"
#~ msgstr "État %d: %d lookaheads\n"
#~ msgid " on %d (%s) -> rule %d\n"
#~ msgstr " sur %d (%s) -> règle %d\n"
#~ msgid "Lookaheads: END\n"
#~ msgstr "Lookaheads: FIN\n"
#~ msgid "relation_transpose: input\n"
#~ msgstr "relation_transpose: entrée\n"
#~ msgid "relation_transpose: output\n"
#~ msgstr "relation_transpose: sortie\n"
#~ msgid "growing table and check from: %lu to %lu\n"
#~ msgstr "table en croissance et vérification depuis %lu à %lu\n"
#~ msgid "base_t too small to hold %d\n"
#~ msgstr "base_t trop petite pour contenir %d\n"
#~ msgid "reduce"
#~ msgstr "réduction"
+376 -204
View File
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.34a\n"
"POT-Creation-Date: 2002-07-09 14:54+0200\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-04-10 22:20+01\n"
"Last-Translator: Denis Lackovic <[email protected]>\n"
"Language-Team: Croatian <[email protected]>\n"
@@ -16,15 +16,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n==1 ? 0 : 1);\n"
#: src/complain.c:99 lib/error.c:128 lib/error.c:156
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Nepoznata sistemska gre¹ka"
#: src/complain.c:148 src/complain.c:197
#: src/complain.c:123 src/complain.c:152
msgid "warning: "
msgstr "upozorenje:"
#: src/complain.c:329 src/complain.c:362
#: src/complain.c:252 src/complain.c:282
msgid "fatal error: "
msgstr "fatalna gre¹ka:"
@@ -43,74 +43,69 @@ msgstr "Konflikt u stanju %d izme
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr "Konflikt u stanju %d izmeðu pravila %d i znaka %s razrije¹en kao %s.\n"
#: src/conflicts.c:403
#: src/conflicts.c:402
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d pomakni/reduciraj konflikat"
msgstr[1] "%d pomakni/reduciraj konflikata"
#: src/conflicts.c:410
#: src/conflicts.c:409
msgid "and"
msgstr "i"
#: src/conflicts.c:416
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d reduciraj/reduciraj konflikt"
msgstr[1] "%d reduciraj/reduciraj konflikata"
#: src/conflicts.c:441
#, c-format
msgid "State %d contains "
msgstr "Stanje %d sadr¾i"
#: src/conflicts.c:514
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "konflikt:"
#: src/conflicts.c:516
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
msgstr " %d pomakni/reduciraj"
#: src/conflicts.c:520
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
msgstr " %d reduviraj/reduciraj"
#: src/conflicts.c:525
#: src/conflicts.c:460
#, c-format
msgid "%s contains "
msgstr "%s sadr¾i"
msgid "State %d contains "
msgstr "Stanje %d sadr¾i"
#: src/conflicts.c:532
#, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
#: src/conflicts.c:537
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "oèekujem %d pomakni/reduciraj konflikt\n"
msgstr[1] "oèekujem %d pomakni/reduciraj konflikata\n"
#: src/files.c:157
#: src/files.c:114
#, c-format
msgid "cannot open file `%s'"
msgstr "ne mogu otvoriti datoteku `%s'"
#: src/files.c:176
#: src/files.c:133
msgid "cannot close file"
msgstr "ne mogu zatvoriti datoteku"
#: src/getargs.c:99
#: src/getargs.c:157
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison generira parsere za LALR(1) gramatike.\n"
#: src/getargs.c:103
#: src/getargs.c:161
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Kori¹tenje: %s [OPCIJA]... DATOTEKA\n"
#: src/getargs.c:107
#: src/getargs.c:165
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"
@@ -118,7 +113,7 @@ msgstr ""
"Ako duga opcija ka¾e da je argument obavezan, tada je on obavezan\n"
"i za ekvivalentnu kratku opciju. Slièno je i za opcionalne argumente.\n"
#: src/getargs.c:113
#: src/getargs.c:171
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -130,7 +125,7 @@ msgstr ""
" -V, --version prika¾i verziju i izaði\n"
" -y, --yacc emuliraj POSIX yacc\n"
#: src/getargs.c:120
#: src/getargs.c:178
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -150,7 +145,7 @@ msgstr ""
" -n, --no-parser generiraj samo tablice\n"
" -k, --token-table ukljuèi tablicu imena znakova\n"
#: src/getargs.c:132
#: src/getargs.c:190
#, fuzzy
msgid ""
"Output:\n"
@@ -169,7 +164,7 @@ msgstr ""
" -o, --output=DATOTEKA ispi¹i izlaz u DATOTEKU\n"
" -g, --graph takoðer proizvedi VCG opis automata\n"
#: src/getargs.c:143
#: src/getargs.c:201
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -180,27 +175,27 @@ msgid ""
" `none' disable the report\n"
msgstr ""
#: src/getargs.c:154
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
msgstr "Izvjesti o bugovima na <[email protected]>.\n"
#: src/getargs.c:168
#: src/getargs.c:226
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:170
#: src/getargs.c:228
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr ""
#: src/getargs.c:174
#: src/getargs.c:232
#, fuzzy, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr ""
"Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
"Free Software Foundation, Inc.\n"
#: src/getargs.c:176
#: src/getargs.c:234
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -209,27 +204,44 @@ msgstr ""
"kopiranja. NEMA\n"
"garancije; èak ni tvrdnje o ISPLATIVOSTI ili POGODNOSTI ZA NEKU SVRHU.\n"
#: src/getargs.c:333
#: src/getargs.c:395
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Poku¹aj `%s --help' za vi¹e informacija.\n"
#: src/getargs.c:340
#: src/getargs.c:402
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: nije data datoteka sa gramatikom\n"
#: src/getargs.c:344
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: dodatni argumenti se ignoriraju nakon `%s'\n"
#: src/lalr.c:110
#: src/gram.c:139
msgid "empty"
msgstr "prazno"
#: src/gram.c:233
msgid "Grammar"
msgstr "Gramatika"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
msgstr "upozorenje:"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "previ¹e goto-a (maksimalno %d)"
#: parse-gram.y:344
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
@@ -246,7 +258,7 @@ msgstr " %-4s\tpomakni i idi u stanje %d\n"
#: src/print.c:164
#, fuzzy, c-format
msgid "go to state %d\n"
msgstr " %-4s\tidu u stanje %d\n"
msgstr " $ \tidu u stanje %d\n"
#: src/print.c:201
#, fuzzy
@@ -258,235 +270,425 @@ msgstr "%-4s\tgre
msgid "reduce using rule %d (%s)"
msgstr "$default\treduciraj koristeæi pravilo %d (%s)"
#: src/print.c:323 src/print.c:386
#: src/print.c:293
msgid "accept"
msgstr ""
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr ""
#: src/print.c:405
msgid " $default\taccept\n"
msgstr " $default\tprihvati\n"
#: src/print.c:407
msgid " NO ACTIONS\n"
msgstr " NEMA AKCIJA\n"
#: src/print.c:428
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "stanje %d"
#: src/print.c:462
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Zavr¹ni znakovi, sa pravilima gdje se pojavljuju"
#: src/print.c:489
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Nezavr¹ni znakovi, sa pravilima gdje se pojavljuju"
#: src/print.c:518
#: src/print.c:512
msgid " on left:"
msgstr "s lijeva:"
#: src/print.c:533
#: src/print.c:527
msgid " on right:"
msgstr "s desna:"
#: src/reader.c:53
#: src/print.c:555
#, fuzzy
msgid "Rules never reduced"
msgstr "%d pravilo nije nikad reducirano\n"
#: src/reader.c:52
#, c-format
msgid "multiple %s declarations"
msgstr "vi¹estruke %s deklaracije"
#: src/reader.c:139
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr ""
#: src/reader.c:237
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "pravilo dato za %s, a to je znak"
#: src/reader.c:262
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "sudar tipova (`%s' `%s') na deaultnoj akciji"
#: src/reader.c:270
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "prazno pravilo za nezavr¹ni znak, i nema akcije"
#: src/reader.c:341
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "dva @prec's u retku"
#: src/reader.c:351
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
#: src/reader.c:353
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:355
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:366
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:368
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:512
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "nema pravila u ulaznoj gramatici"
#: src/reader.c:544
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "previ¹e simbola (znakovi plus nezavr¹ni znakovi); maksimalno %d"
#: src/reduce.c:243 src/reduce.c:309 src/reduce.c:400
#, fuzzy
msgid "warning"
msgstr "upozorenje:"
#: src/reduce.c:243
#: src/reduce.c:239
#, fuzzy
msgid "useless rule"
msgstr "%d beskorisno pravilo"
#: src/reduce.c:309
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d beskorisan nezavr¹ni znak"
#: src/reduce.c:356
msgid "Useless nonterminals:"
#: src/reduce.c:349
#, fuzzy
msgid "Useless nonterminals"
msgstr "Beskorisni nezavr¹ni znakovi:"
#: src/reduce.c:369
msgid "Terminals which are not used:"
#: src/reduce.c:362
#, fuzzy
msgid "Terminals which are not used"
msgstr "Zavr¹ni znakovi koji nisu kori¹teni:"
#: src/reduce.c:378
#: src/reduce.c:371
#, fuzzy
msgid "Useless rules"
msgstr "Beskorisna pravila:"
#: src/reduce.c:395
#: src/reduce.c:387
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d pravilo nije nikad reducirano\n"
msgstr[1] "%d pravila nisu nikad reducirana\n"
#: src/reduce.c:403
#: src/reduce.c:395
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d beskorisan nezavr¹ni znak"
msgstr[1] "%d beskorisnih nezavr¹nih znakova"
#: src/reduce.c:409
#: src/reduce.c:401
msgid " and "
msgstr " i"
#: src/reduce.c:412
#: src/reduce.c:404
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d beskorisno pravilo"
msgstr[1] "%d beskorisnih pravila"
#: src/reduce.c:442
#, c-format
msgid "Start symbol %s does not derive any sentence"
#: src/reduce.c:435
#, fuzzy, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "Poèetni simbol %s ne daje niti jednu reèenicu"
#: scan-gram.l:559
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
#: scan-gram.l:255
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:284 scan-gram.l:423
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:322 scan-gram.l:394
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:343
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgstr "nedozvoljeni ulaz: %s"
#: scan-gram.l:364
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgstr "neprepoznati: %s"
#: scan-gram.l:485
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:514
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ od `%s' nema deklarirani tip"
#: scan-gram.l:576 scan-gram.l:663
#: scan-gram.l:584 scan-gram.l:666
#, fuzzy, c-format
msgid "invalid value: %s%d"
msgstr "nedozvoljena @ vrijednost"
#: scan-gram.l:583
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d od `%s' nema deklarirani tip"
#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s je nedozvoljeno"
#: lib/getopt.c:694
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "previ¹e stanja (maks %d)"
#: src/symlist.c:97 src/symlist.c:109
msgid "invalid $ value"
msgstr "nedozvoljena $ vrijednost"
#: src/symtab.c:81
#, c-format
msgid "type redeclaration for %s"
msgstr "ponovna deklaracija za %s"
#: src/symtab.c:98 src/symtab.c:117
#, fuzzy, c-format
msgid "%s redeclaration for %s"
msgstr "ponovna deklaracija za %s"
#: src/symtab.c:138
#, c-format
msgid "redefining precedence of %s"
msgstr "ponovno definiran prethodnik od %s"
#: src/symtab.c:157
#, c-format
msgid "symbol %s redefined"
msgstr "simbol %s ponovo definiran"
#: src/symtab.c:180
#, fuzzy, c-format
msgid "redefining user token number of %s"
msgstr "ponovno definiran prethodnik od %s"
#: src/symtab.c:225
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr "simbol %s je kori¹ten, ali nije definiran kao znak i nema pravila"
#: src/symtab.c:244
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "simbol `%s' kori¹ten vi¹e puta kao znakovni niz"
#: src/symtab.c:247
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "simbolz `%s' dat vi¹e od jednog znakovnog niza"
#: src/symtab.c:281
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "konflikt u prethodnici za %s and %s"
#: src/symtab.c:293
#, fuzzy, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "konfliktne asocijativne vrijednosti za %s i %s"
#: src/symtab.c:363
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "objema znakovima %s i %s je pridru¾en broj %d"
#: src/symtab.c:568
#, c-format
msgid "the start symbol %s is undefined"
msgstr "poèetni simbol %s nije definiran"
#: src/symtab.c:572
#, c-format
msgid "the start symbol %s is a token"
msgstr "poèetni simbol %s je znak"
#: lib/argmatch.c:161
#, fuzzy, c-format
msgid "invalid argument %s for %s"
msgstr "nedozvoljeni ulaz: %s"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:235
#, c-format
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:238
#, c-format
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:241
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
#: lib/getopt.c:662
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: opcija `%s' je nejednoznaèna\n"
#: lib/getopt.c:719
#: lib/getopt.c:687
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: opcija `--%s' ne dopu¹ta argument\n"
#: lib/getopt.c:724
#: lib/getopt.c:692
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: opcija `%c%s' ne dopu¹ta argument\n"
#: lib/getopt.c:742 lib/getopt.c:915
#: lib/getopt.c:710 lib/getopt.c:883
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: opcija `%s' zahtijeva argument\n"
#: lib/getopt.c:771
#: lib/getopt.c:739
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: neprepoznata opcija `--%s'\n"
#: lib/getopt.c:775
#: lib/getopt.c:743
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: neprepoznata opcija `%c%s'\n"
#: lib/getopt.c:801
#: lib/getopt.c:769
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: nedozvoljena opcija -- %c\n"
#: lib/getopt.c:804
#: lib/getopt.c:772
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: nedozvoljena opcija -- %c\n"
#: lib/getopt.c:834 lib/getopt.c:964
#: lib/getopt.c:802 lib/getopt.c:932
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: opcija zahtijeva argument -- %c\n"
#: lib/getopt.c:881
#: lib/getopt.c:849
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: opcija `-W %s' je nejednoznaèna\n"
#: lib/getopt.c:899
#: lib/getopt.c:867
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: opcija `-W %s' ne dopu¹ta argument\n"
#: lib/obstack.c:494 lib/obstack.c:497 lib/xmalloc.c:66
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
msgid "memory exhausted"
msgstr "iscrpljeni memorijski resursi"
@@ -498,14 +700,35 @@ msgstr "`"
msgid "'"
msgstr "'"
#~ msgid "too many states (max %d)"
#~ msgstr "previ¹e stanja (maks %d)"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
#~ msgid " (rule %d)"
#~ msgstr " (pravilo %d)"
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\tgre¹ka (nonassociative)\n"
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
#~ msgid "reduce"
#~ msgstr "reduciraj"
#~ msgid "shift"
#~ msgstr "pomakni"
#~ msgid "an error"
#~ msgstr "gre¹ka"
#~ msgid "%s contains "
#~ msgstr "%s sadr¾i"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[reduciraj koristeæi pravilo %d (%s)]\n"
#~ msgid ""
#~ " $default\treduce using rule %d (%s)\n"
@@ -514,29 +737,14 @@ msgstr "'"
#~ " $default\treduciraj koristeæi pravilo %d (%s)\n"
#~ "\n"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[reduciraj koristeæi pravilo %d (%s)]\n"
#~ msgid " %-4s\treduce using rule %d (%s)\n"
#~ msgstr " %-4s\treduciraj koristeæi pravilo %d (%s)\n"
#~ msgid " $default\treduce using rule %d (%s)\n"
#~ msgstr " $default\treduciraj koristeæi pravilo %d (%s)\n"
#~ msgid "invalid $ value"
#~ msgstr "nedozvoljena $ vrijednost"
#~ msgid "Grammar"
#~ msgstr "Gramatika"
#~ msgid "Number, Line, Rule"
#~ msgstr "Broj, Linija, Pravilo"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid "empty"
#~ msgstr "prazno"
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' vi¹e nije podr¾ano"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "neoèekivan `/' naðen i zanemaren"
@@ -544,9 +752,6 @@ msgstr "'"
#~ msgid "unterminated comment"
#~ msgstr "nezavr¹eni komentar"
#~ msgid "unexpected end of file"
#~ msgstr "neoèekivan kraj datoteke"
#~ msgid "unescaped newline in constant"
#~ msgstr "neoèekivan znak za novu liniju u konstanti"
@@ -574,8 +779,29 @@ msgstr "'"
#~ msgid "`%s' requires an argument"
#~ msgstr "`%s' zahtijeva argument"
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' vi¹e nije podr¾ano"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "maksimalna velièina tablice (%d) prekoraèena"
#~ msgid " (rule %d)"
#~ msgstr " (pravilo %d)"
#~ msgid " $default\taccept\n"
#~ msgstr " $default\tprihvati\n"
#~ msgid " NO ACTIONS\n"
#~ msgstr " NEMA AKCIJA\n"
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\tgre¹ka (nonassociative)\n"
#~ msgid " %-4s\tgo to state %d\n"
#~ msgstr " %-4s\tidu u stanje %d\n"
#~ msgid "Number, Line, Rule"
#~ msgstr "Broj, Linija, Pravilo"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid " Skipping to next \\n"
#~ msgstr " Preskaèem na slijedeæe \\n"
@@ -589,12 +815,18 @@ msgstr "'"
#~ msgid "unterminated string"
#~ msgstr "nezavr¹eni znakovni niz"
#~ msgid "unterminated `%{' definition"
#~ msgstr "nezavr¹ena `%{' definicija"
#~ msgid "Premature EOF after %s"
#~ msgstr "Preuranjeni EOF nakon %s"
#~ msgid "`%s' is invalid in %s"
#~ msgstr "`%s' je nedozvoljen u %s"
#~ msgid "invalid %s declaration"
#~ msgstr "nedozvoljena %s deklaracija"
#~ msgid "%type declaration has no <typename>"
#~ msgstr "%type deklaracija nema <typename>"
@@ -610,11 +842,14 @@ msgstr "'"
#~ msgid "unmatched %s"
#~ msgstr "nije pronaðen %s"
#~ msgid "invalid %s declaration"
#~ msgstr "nedozvoljena %s deklaracija"
#~ msgid "argument of %%expect is not an integer"
#~ msgstr "argument od %%expect nije cijeli broj"
#~ msgid "unrecognized: %s"
#~ msgstr "neprepoznati: %s"
#~ msgid "unrecognized item %s, expected an identifier"
#~ msgstr "neprepoznati %s, oèekivan nakon identifikatora"
#~ msgid "expected string constant instead of %s"
#~ msgstr "oèekivana znakovna konstana umjesto %s"
#~ msgid "no input grammar"
#~ msgstr "nema ulazne gramatike"
@@ -622,6 +857,9 @@ msgstr "'"
#~ msgid "unknown character: %s"
#~ msgstr "nepoznati znak: %s"
#~ msgid "unterminated %guard clause"
#~ msgstr "nezavr¹ena %guard klauzula"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "lo¹e pravilo: zarez ne bi trebao slijediti poèetni simbol"
@@ -631,74 +869,8 @@ msgstr "'"
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "prethodnom pravilu nedostaje zavr¹etak `;'"
#~ msgid "invalid input: %s"
#~ msgstr "nedozvoljeni ulaz: %s"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard prisutan ali %%semantic_parser nije specificiran"
#~ msgid "two actions at end of one rule"
#~ msgstr "dvije akcije pri kraju jednog pravila"
#~ msgid "reduce"
#~ msgstr "reduciraj"
#~ msgid "shift"
#~ msgstr "pomakni"
#~ msgid "an error"
#~ msgstr "gre¹ka"
#~ msgid "symbol %s is used, but is not defined as a token and has no rules"
#~ msgstr "simbol %s je kori¹ten, ali nije definiran kao znak i nema pravila"
#~ msgid "symbol `%s' used more than once as a literal string"
#~ msgstr "simbol `%s' kori¹ten vi¹e puta kao znakovni niz"
#~ msgid "symbol `%s' given more than one literal string"
#~ msgstr "simbolz `%s' dat vi¹e od jednog znakovnog niza"
#~ msgid "conflicting precedences for %s and %s"
#~ msgstr "konflikt u prethodnici za %s and %s"
#~ msgid "conflicting assoc values for %s and %s"
#~ msgstr "konfliktne asocijativne vrijednosti za %s i %s"
#~ msgid "tokens %s and %s both assigned number %d"
#~ msgstr "objema znakovima %s i %s je pridru¾en broj %d"
#~ msgid "unterminated `%{' definition"
#~ msgstr "nezavr¹ena `%{' definicija"
#~ msgid "symbol %s redefined"
#~ msgstr "simbol %s ponovo definiran"
#~ msgid "type redeclaration for %s"
#~ msgstr "ponovna deklaracija za %s"
#~ msgid "redefining precedence of %s"
#~ msgstr "ponovno definiran prethodnik od %s"
#~ msgid "argument of %%expect is not an integer"
#~ msgstr "argument od %%expect nije cijeli broj"
#~ msgid "unrecognized item %s, expected an identifier"
#~ msgstr "neprepoznati %s, oèekivan nakon identifikatora"
#~ msgid "expected string constant instead of %s"
#~ msgstr "oèekivana znakovna konstana umjesto %s"
#~ msgid "the start symbol %s is undefined"
#~ msgstr "poèetni simbol %s nije definiran"
#~ msgid "the start symbol %s is a token"
#~ msgstr "poèetni simbol %s je znak"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "maksimalna velièina tablice (%d) prekoraèena"
#~ msgid " $ \tgo to state %d\n"
#~ msgstr " $ \tidu u stanje %d\n"
#~ msgid "unterminated %guard clause"
#~ msgstr "nezavr¹ena %guard klauzula"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard prisutan ali %%semantic_parser nije specificiran"
+715
View File
@@ -0,0 +1,715 @@
# bison 1.50 (Indonesian)
# Copyright (C) 2002 Free Software Foundation, Inc.
# This file is distributed under the same license as the bison 1.50 package.
# Tedi Heriyanto <[email protected]>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.50\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-10-08 17:53+0700\n"
"Last-Translator: Tedi Heriyanto <[email protected]>\n"
"Language-Team: Indonesian <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: KBabel 0.9.5\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Kesalahan sistem tidak dikenal"
#: src/complain.c:123 src/complain.c:152
msgid "warning: "
msgstr "peringatan: "
#: src/complain.c:252 src/complain.c:282
msgid "fatal error: "
msgstr "kesalahan fatal: "
#: src/conflicts.c:72
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr " Konflik antara aturan %d dan token %s diselesaikan sebagai shift"
#: src/conflicts.c:80
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr " Konflik antara aturan %d dan token %s diselesaikan sebagai reduce"
#: src/conflicts.c:87
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
" Konflik antara aturan %d dan token %s diselesaikan sebagai kesalahan"
#: src/conflicts.c:402
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d geser/kurangi konflik"
msgstr[1] ""
#: src/conflicts.c:409
msgid "and"
msgstr "dan"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d geser/kurangi konflik"
msgstr[1] ""
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "konflik: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
msgstr " %d geser/kurangi"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
msgstr " %d kurangi/kurangi"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "State %d berisi "
#: src/conflicts.c:537
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "mengharapkan %d shift/reduce konflik"
msgstr[1] ""
#: src/files.c:114
#, c-format
msgid "cannot open file `%s'"
msgstr "tidak dapat membuka file `%s'"
#: src/files.c:133
msgid "cannot close file"
msgstr "tidak dapat menutup file"
#: src/getargs.c:157
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison generates parsers for LALR(1) grammars.\n"
#: src/getargs.c:161
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Penggunaan: %s [OPTION]... FILE\n"
#: src/getargs.c:165
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 ""
"Jika option panjang menyatakan argumen sebagai mandatori, maka ia mandatori "
"juga\n"
"untuk option pendek. Hal yang sama untuk argumen opsional.\n"
#: src/getargs.c:171
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
" -V, --version output version information and exit\n"
" -y, --yacc emulate POSIX yacc\n"
msgstr ""
"Mode Operasi:\n"
" -h, --help tampilkan bantuan ini dan keluar\n"
" -V, --version tampilkan informasi versi dan keluar\n"
" -y, --yacc emulasikan POSIX yacc\n"
#: src/getargs.c:178
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
" -t, --debug instrument the parser for debugging\n"
" --locations enable locations computation\n"
" -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n"
" -l, --no-lines don't generate `#line' directives\n"
" -n, --no-parser generate the tables only\n"
" -k, --token-table include a table of token names\n"
msgstr ""
"Parser:\n"
" -S, --skeleton=FILE specifikasikan rangka yang akan digunakan\n"
" -t, --debug instrumen parser untuk debugging\n"
" --locations aktifkan lokasi perhitungan\n"
" -p, --name-prefix=PREFIX tambahkan PREFIX ke simbol eksternal\n"
" -l, --no-lines jangan hasilkan direktiv `#line'\n"
" -n, --no-parser hasilkan hanya tabel\n"
" -k, --token-table sertakan tabel nama token\n"
#: src/getargs.c:190
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
" -r, --report=THINGS also produce details on the automaton\n"
" -v, --verbose same as `--report=state'\n"
" -b, --file-prefix=PREFIX specify a PREFIX for output files\n"
" -o, --output=FILE leave output to FILE\n"
" -g, --graph also produce a VCG description of the "
"automaton\n"
msgstr ""
"Output:\n"
" -d, --defines juga hasilkan file header\n"
" -r, --report=THINGS juga hasilkan detil tentang otomaton\n"
" -v, --verbose sama seperti `--report=state'\n"
" -b, --file-prefix=PREFIX spesifikasikan PREFIX untuk file output\n"
" -o, --output=FILE simpan output ke FILE\n"
" -g, --graph juga hasilkan deskripsi VCG automaton\n"
#: src/getargs.c:201
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
" `itemset' complete the core item sets with their closure\n"
" `lookahead' explicitly associate lookaheads to items\n"
" `solved' describe shift/reduce conflicts solving\n"
" `all' include all the above information\n"
" `none' disable the report\n"
msgstr ""
"THINGS adalah daftar kata yang dipisahkan koma termasuk:\n"
" `state' menggambarkan state\n"
" `itemset' lengkapi himpunan item inti dengan klosurnya\n"
" `lookahead' asosiasikan lookaheads ke items secara eksplisit\n"
" `solved' gambarkan penyelesaian konflik shift/reduce\n"
" `all' sertakan semua informasi di atas\n"
" `none' tiadakan laporan\n"
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
msgstr "Laporkan kesalahan ke <[email protected]>.\n"
#: src/getargs.c:226
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Written by Robert Corbett and Richard Stallman.\n"
#: src/getargs.c:232
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
msgstr ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
#: src/getargs.c:395
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n"
#: src/getargs.c:402
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: tidak diberikan file grammar\n"
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: argumen ekstra diabaikan setelah `%s'\n"
#: src/gram.c:139
msgid "empty"
msgstr "kosong"
#: src/gram.c:233
msgid "Grammar"
msgstr "Grammar"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
msgid "warning"
msgstr "peringatan"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "terlalu banyak goto (maks %d)"
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr "aturan tidak pernah dikurangi karena konflik"
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr "POSIX melarang deklarasi dalam grammar"
#: src/print.c:46
#, c-format
msgid " type %d is %s\n"
msgstr " tipe %d adalah %s\n"
#: src/print.c:162
#, c-format
msgid "shift, and go to state %d\n"
msgstr "geser, dan ke state %d\n"
#: src/print.c:164
#, c-format
msgid "go to state %d\n"
msgstr "ke state %d\n"
#: src/print.c:201
msgid "error (nonassociative)\n"
msgstr "kesalahan(nonasosiatif)\n"
#: src/print.c:290
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "kurangi gunakan aturan %d (%s)"
#: src/print.c:293
msgid "accept"
msgstr "terima"
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr "$default"
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "state %d"
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Terminal, dengan aturan tempat mereka muncul"
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Nonterminal, dengan aturan tempat mereka muncul"
#: src/print.c:512
msgid " on left:"
msgstr " di kiri:"
#: src/print.c:527
msgid " on right:"
msgstr " di kanan:"
#: src/print.c:555
msgid "Rules never reduced"
msgstr "Aturan tidak pernah dikurangi"
#: src/reader.c:52
#, c-format
msgid "multiple %s declarations"
msgstr "deklarasi ganda %s"
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr "tipe hasil bentrok pada fungsi merge %s: `%s' vs `%s'"
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "aturan diberikan untuk %s, yang merupakan sebuah token"
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "bentrokan tipe (`%s' `%s') pada aksi baku"
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "aturan kosong untuk nonterminal typed, dan tidak ada aksi"
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "dua @prec dalam satu baris"
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr "%%dprec hanya mempengaruhi parser GLR"
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr "%%dprec harus diikuti oleh angka positif"
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr "hanya satu %%dprec yang dibolehkan untuk satu aturan"
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr "%%merge hanya mempengaruhi parser GLR"
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr "hanya satu %%merge yang dibolehkan tiap aturan"
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "tidak ada aturan dalam grammar input"
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "terlalu banyak simbol (token dan nonterminal); maksimum %d"
#: src/reduce.c:239
msgid "useless rule"
msgstr "aturan tidak berguna"
#: src/reduce.c:302
msgid "useless nonterminal"
msgstr "nonterminal tidak berguna"
#: src/reduce.c:349
msgid "Useless nonterminals"
msgstr "Nonterminal tidak berguna"
#: src/reduce.c:362
msgid "Terminals which are not used"
msgstr "Terminal yang tidak digunakan"
#: src/reduce.c:371
msgid "Useless rules"
msgstr "Useless rules"
#: src/reduce.c:387
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "Aturan %d tidak pernah dikurangi\n"
msgstr[1] "Aturan %d tidak pernah dikurangi\n"
#: src/reduce.c:395
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "nonterminal tidak berguna %d"
msgstr[1] "nonterminal tidak berguna %d"
#: src/reduce.c:401
msgid " and "
msgstr " dan "
#: src/reduce.c:404
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "aturan tidak berguna %d"
msgstr[1] "aturan tidak berguna %d"
#: src/reduce.c:435
#, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "simbol awal %s tidak melahirkan kalimat"
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ": karakter tidak valid: `%c'\n"
#: scan-gram.l:255
msgid ": unexpected end of file in a comment\n"
msgstr ": akhir file tidak diharapkan dalam komentar\n"
#: scan-gram.l:284 scan-gram.l:423
msgid ": unexpected end of file in a string\n"
msgstr ": akhir file tidak diharapkan dalam string\n"
#: scan-gram.l:322 scan-gram.l:394
msgid ": unexpected end of file in a character\n"
msgstr ": akhir file tidak diharapkan dalam karakter\n"
#: scan-gram.l:343
#, c-format
msgid ": invalid escape: %s\n"
msgstr ": escape tidak valid: %s\n"
#: scan-gram.l:364
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr ": escape tidak dikenal: %s\n"
#: scan-gram.l:485
msgid ": unexpected end of file in a braced code\n"
msgstr ": akhir file tidak diharapkan dalam kode braced\n"
#: scan-gram.l:514
msgid ": unexpected end of file in a prologue\n"
msgstr ": akhir file tidak diharapkan dalam prolog\n"
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ dari `%s' tidak memiliki tipe yang terdeklarasi"
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "nilai tidak valid: %s%d"
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d dari `%s' tidak memiliki tipe terdeklarasi"
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s tidak valid"
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "terlalu banyak state (maks %d)"
#: src/symlist.c:97 src/symlist.c:109
msgid "invalid $ value"
msgstr "nilai $ tidak valid"
#: src/symtab.c:81
#, c-format
msgid "type redeclaration for %s"
msgstr "redeklarasi tipe untuk %s"
#: src/symtab.c:98 src/symtab.c:117
#, c-format
msgid "%s redeclaration for %s"
msgstr "%s redeklarasi untuk %s"
#: src/symtab.c:138
#, c-format
msgid "redefining precedence of %s"
msgstr "mendefinisikan kembali presedens %s"
#: src/symtab.c:157
#, c-format
msgid "symbol %s redefined"
msgstr "simbol %s didefinisikan ulang"
#: src/symtab.c:180
#, c-format
msgid "redefining user token number of %s"
msgstr "mendefinisikan ulang nomor token user %s"
#: src/symtab.c:225
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"simbol %s digunakan, namun tidak didefinisikan sebagai token dan tidak "
"memiliki aturan"
#: src/symtab.c:244
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "simbol `%s' digunakan lebih dari satu kali sebagai string literal"
#: src/symtab.c:247
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "simbol `%s' diberikan lebih dari satu string literal"
#: src/symtab.c:281
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "presenden konflik untuk %s dan %s"
#: src/symtab.c:293
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "asosiatif konflik untuk %s (%s) dan %s (%s)"
#: src/symtab.c:363
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "token %s dan %s keduanya memiliki angka %d"
#: src/symtab.c:568
#, c-format
msgid "the start symbol %s is undefined"
msgstr "simbol awal %s tidak didefinisikan"
#: src/symtab.c:572
#, c-format
msgid "the start symbol %s is a token"
msgstr "simbol awal %s adalah sebuah token"
#: lib/argmatch.c:161
#, c-format
msgid "invalid argument %s for %s"
msgstr "argument %s tidak valid untuk %s"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr "argumen %s ambigu untuk %s"
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr "Argumen valid adalah:"
#: lib/bitset_stats.c:235
#, c-format
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u freed (%.2f%%).\n"
#: lib/bitset_stats.c:238
#, c-format
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u cached (%.2f%%)\n"
#: lib/bitset_stats.c:241
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u cached (%.2f%%)\n"
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u cached (%.2f%%)\n"
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr "hitung log histogram\n"
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr "ukuran log histogram\n"
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr "kepadatan histogram\n"
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Statistik bitset:\n"
"\n"
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %u\n"
msgstr "Run terakumulasi = %u\n"
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr "Tidak dapat membaca file stat."
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr "Ukuran file stat buruk.\n"
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr "Tidak dapat menulis file stat."
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr "Tidak dapat membuka file stat untuk ditulisi."
#: lib/getopt.c:662
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: option `%s' ambigu\n"
#: lib/getopt.c:687
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: option `--%s' tidak membolehkan sebuah argumen\n"
#: lib/getopt.c:692
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: option `%c%s' tidak membolehkan sebuah argumen\n"
#: lib/getopt.c:710 lib/getopt.c:883
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: option `%s' membutuhkan sebuah argumen\n"
#: lib/getopt.c:739
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: option tidak dikenal `--%s'\n"
#: lib/getopt.c:743
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: option tidak dikenal `%c%s'\n"
#: lib/getopt.c:769
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: option ilegal -- %c\n"
#: lib/getopt.c:772
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: option tidak valid -- %c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: option membutuhkan sebuah argumen -- %c\n"
#: lib/getopt.c:849
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: option `-W %s' ambigu\n"
#: lib/getopt.c:867
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: option `-W %s' tidak membolehkan sebuah argumen\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
msgid "memory exhausted"
msgstr "memori habis"
#: lib/quotearg.c:274
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
msgid "'"
msgstr "'"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
"\n"
"Waktu eksekusi (detik)\n"
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr " TOTAL :"
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr "waktu dalam %s: %ld.%06ld (%ld%%)\n"
+62 -185
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-05-03 11:03+0100\n"
"Last-Translator: Paolo Bonzini <[email protected]>\n"
"Language-Team: Italian <[email protected]>\n"
@@ -14,66 +14,6 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, fuzzy, c-format
msgid "Exiting get_state => %d\n"
msgstr " %-4s\tprosecuzione allo stato %d\n"
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, c-format
msgid "Closure: %s\n"
msgstr ""
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (regola %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Errore di sistema sconosciuto"
@@ -286,35 +226,6 @@ msgstr "vuoto"
msgid "Grammar"
msgstr "Grammatica"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
#: src/gram.c:253
msgid "Value Sprec Sassoc Tag\n"
msgstr ""
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
@@ -325,29 +236,11 @@ msgstr "attenzione: "
msgid "too many gotos (max %d)"
msgstr "troppi goto (max %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
@@ -389,23 +282,23 @@ msgstr ""
msgid "state %d"
msgstr "stato %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Simboli terminali e regole in cui appaiono"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Simboli nonterminali e regole in cui appaiono"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " nel primo membro:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " nel secondo membro:"
#: src/print.c:552
#: src/print.c:555
#, fuzzy
msgid "Rules never reduced"
msgstr "%d regola non applicata\n"
@@ -425,49 +318,49 @@ msgstr ""
msgid "rule given for %s, which is a token"
msgstr "fornita una regola per il token %s"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "conflitto di tipo (`%s' e `%s') nell'azione di default"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "regola vuota e nessuna azione per un nonterminale con tipo"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "due @prec di seguito"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "nessuna regola nella grammatica di input"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "troppi simboli (token e nonterminali); il massimo è %d"
@@ -527,71 +420,62 @@ msgstr[1] "%d regole inutili"
msgid "start symbol %s does not derive any sentence"
msgstr "dal simbolo iniziale %s non deriva alcuna frase"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
#: src/scan-gram.l:246
#: scan-gram.l:255
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "fine del file inattesa"
#: src/scan-gram.l:274 src/scan-gram.l:412
#: scan-gram.l:284 scan-gram.l:423
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "fine del file inattesa"
#: src/scan-gram.l:311 src/scan-gram.l:383
#: scan-gram.l:322 scan-gram.l:394
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "fine del file inattesa"
#: src/scan-gram.l:332
#: scan-gram.l:343
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgstr "valore non valido: %s%d"
#: src/scan-gram.l:353
#: scan-gram.l:364
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgstr "non riconosciuto: %s"
#: src/scan-gram.l:473
#: scan-gram.l:485
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "fine del file inattesa"
#: src/scan-gram.l:502
#: scan-gram.l:514
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "fine del file inattesa"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "Manca una dichiarazione di tipo per $$ di `%s'"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "valore non valido: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "Manca una dichiarazione di tipo per $%d di `%s'"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s non è valido"
@@ -670,16 +554,6 @@ msgstr "simbolo iniziale %s non definito"
msgid "the start symbol %s is a token"
msgstr "specificato il token %s come simbolo iniziale"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
msgid "invalid argument %s for %s"
@@ -694,67 +568,67 @@ msgstr ""
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
@@ -825,17 +699,17 @@ msgstr "`"
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
@@ -889,6 +763,9 @@ msgstr ""
#~ msgid "`%s' requires an argument"
#~ msgstr "`%s' richiede un argomento"
#~ msgid " (rule %d)"
#~ msgstr " (regola %d)"
#~ msgid ""
#~ " $default\treduce using rule %d (%s)\n"
#~ "\n"
+382 -212
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.30f\n"
"POT-Creation-Date: 2002-07-09 14:54+0200\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2001-12-10 15:59+0900\n"
"Last-Translator: Daisuke Yamashita <[email protected]>\n"
"Language-Team: Japanese <[email protected]>\n"
@@ -14,15 +14,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/complain.c:99 lib/error.c:128 lib/error.c:156
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "不明なシステムエラー"
#: src/complain.c:148 src/complain.c:197
#: src/complain.c:123 src/complain.c:152
msgid "warning: "
msgstr "警告: "
#: src/complain.c:329 src/complain.c:362
#: src/complain.c:252 src/complain.c:282
msgid "fatal error: "
msgstr "致命的エラー: "
@@ -41,71 +41,66 @@ msgstr "
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
#: src/conflicts.c:403
#: src/conflicts.c:402
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d シフト/還元衝突"
#: src/conflicts.c:410
#: src/conflicts.c:409
msgid "and"
msgstr "および"
#: src/conflicts.c:416
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d 還元/還元衝突"
#: src/conflicts.c:441
#, c-format
msgid "State %d contains "
msgstr "状態 %d が含むのは "
#: src/conflicts.c:514
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "衝突: "
#: src/conflicts.c:516
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
msgstr " %d シフト/還元"
#: src/conflicts.c:520
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
msgstr " %d 還元/還元"
#: src/conflicts.c:525
#: src/conflicts.c:460
#, c-format
msgid "%s contains "
msgstr "%s の中身は"
msgid "State %d contains "
msgstr "状態 %d が含むのは "
#: src/conflicts.c:532
#, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
#: src/conflicts.c:537
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "本来 %d 個のシフト/還元衝突であるはずです\n"
#: src/files.c:157
#: src/files.c:114
#, c-format
msgid "cannot open file `%s'"
msgstr "ファイル `%s' を開けません"
#: src/files.c:176
#: src/files.c:133
msgid "cannot close file"
msgstr "ファイルを閉じることができません"
#: src/getargs.c:99
#: src/getargs.c:157
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison は LALR(1) 文法の構文解析器を生成します。\n"
#: src/getargs.c:103
#: src/getargs.c:161
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "使い方: %s [オプション]... ファイル\n"
#: src/getargs.c:107
#: src/getargs.c:165
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"
@@ -113,7 +108,7 @@ msgstr ""
"ロングオプションで必須の引数が示されていれば、同じ意味のショートオプション\n"
"でも同様に必須の引数となります。必須でない選択的引数でも同様です。\n"
#: src/getargs.c:113
#: src/getargs.c:171
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -125,7 +120,7 @@ msgstr ""
" -V, --version バージョン情報を表示して終了する\n"
" -y, --yacc POSIX yacc をエミュレイトする\n"
#: src/getargs.c:120
#: src/getargs.c:178
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -145,7 +140,7 @@ msgstr ""
" -n, --no-parser テーブルのみを生成する\n"
" -k, --token-table トークン名のテーブルを含める\n"
#: src/getargs.c:132
#: src/getargs.c:190
#, fuzzy
msgid ""
"Output:\n"
@@ -164,7 +159,7 @@ msgstr ""
" -o, --output=FILE 出力先を FILE とする\n"
" -g, --graph オートマトンの VCG 記述子も作成する\n"
#: src/getargs.c:143
#: src/getargs.c:201
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -175,26 +170,26 @@ msgid ""
" `none' disable the report\n"
msgstr ""
#: src/getargs.c:154
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
msgstr "バグレポートは <[email protected]> まで。\n"
#: src/getargs.c:168
#: src/getargs.c:226
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:170
#: src/getargs.c:228
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr ""
#: src/getargs.c:174
#: src/getargs.c:232
#, fuzzy, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr ""
"Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"
#: src/getargs.c:176
#: src/getargs.c:234
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -205,27 +200,45 @@ msgstr ""
"これはフリーソフトウェアです -- 複製についての条件はソースを見ましょう。\n"
"一切の保証はありません -- 商業性や目的適合性についての保証すらありません。\n"
#: src/getargs.c:333
#: src/getargs.c:395
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "`%s --help' で詳細情報を参照してください\n"
#: src/getargs.c:340
#: src/getargs.c:402
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: 文法ファイルが指定されていません\n"
#: src/getargs.c:344
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: `%s' の後ろの余分な引数は無視されました\n"
#: src/lalr.c:110
#: src/gram.c:139
msgid "empty"
msgstr "空"
#: src/gram.c:233
msgid "Grammar"
msgstr "文法"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
msgstr "警告: "
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "goto の数が多すぎます (最大 %d)"
#: parse-gram.y:344
#: src/main.c:117
#, fuzzy
msgid "rule never reduced because of conflicts"
msgstr " 1 還元/還元衝突"
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
@@ -242,7 +255,7 @@ msgstr " %-4s\t
#: src/print.c:164
#, fuzzy, c-format
msgid "go to state %d\n"
msgstr " %-4s\t状態 %d へ\n"
msgstr " $ \t状態 %d へ\n"
#: src/print.c:201
#, fuzzy
@@ -254,232 +267,424 @@ msgstr "%-4s\t
msgid "reduce using rule %d (%s)"
msgstr "$default\t規則 %d を利用して還元 (%s)"
#: src/print.c:323 src/print.c:386
#: src/print.c:293
msgid "accept"
msgstr ""
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr ""
#: src/print.c:405
msgid " $default\taccept\n"
msgstr " $default\taccept\n"
#: src/print.c:407
msgid " NO ACTIONS\n"
msgstr " 動作無し\n"
#: src/print.c:428
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "状態 %d"
#: src/print.c:462
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "出現位置の規則による終端"
#: src/print.c:489
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "出現位置の規則による非終端"
#: src/print.c:518
#: src/print.c:512
msgid " on left:"
msgstr " 左辺:"
#: src/print.c:533
#: src/print.c:527
msgid " on right:"
msgstr " 右辺:"
#: src/reader.c:53
#: src/print.c:555
#, fuzzy
msgid "Rules never reduced"
msgstr "%d 個の規則は決して還元されません\n"
#: src/reader.c:52
#, c-format
msgid "multiple %s declarations"
msgstr "%s が複数個宣言されました"
#: src/reader.c:139
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr ""
#: src/reader.c:237
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "%s に規則が与えられ、それはトークンとなります"
#: src/reader.c:262
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "初期状態の動作では型 (`%s' `%s') が衝突します"
#: src/reader.c:270
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "空の型付き非終端アイテム用規則であり、動作が起りません"
#: src/reader.c:341
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "@prec のもの二つが同列になっています"
#: src/reader.c:351
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
#: src/reader.c:353
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:355
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:366
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:368
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:512
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "入力した文法に規則が定義されていません"
#: src/reader.c:544
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "シンボルが多すぎます (トークン + 非終端アイテム) -- 最大 %d"
#: src/reduce.c:243 src/reduce.c:309 src/reduce.c:400
#, fuzzy
msgid "warning"
msgstr "警告: "
#: src/reduce.c:243
#: src/reduce.c:239
#, fuzzy
msgid "useless rule"
msgstr "%d 個の無意味な規則"
#: src/reduce.c:309
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d 個の無意味な非終端子"
#: src/reduce.c:356
msgid "Useless nonterminals:"
#: src/reduce.c:349
#, fuzzy
msgid "Useless nonterminals"
msgstr "無意味な非終端子:"
#: src/reduce.c:369
msgid "Terminals which are not used:"
#: src/reduce.c:362
#, fuzzy
msgid "Terminals which are not used"
msgstr "利用されない終端子:"
#: src/reduce.c:378
#: src/reduce.c:371
#, fuzzy
msgid "Useless rules"
msgstr "無意味な規則:"
#: src/reduce.c:395
#: src/reduce.c:387
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d 個の規則は決して還元されません\n"
#: src/reduce.c:403
#: src/reduce.c:395
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d 個の無意味な非終端子"
#: src/reduce.c:409
#: src/reduce.c:401
msgid " and "
msgstr "および"
#: src/reduce.c:412
#: src/reduce.c:404
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d 個の無意味な規則"
#: src/reduce.c:442
#, c-format
msgid "Start symbol %s does not derive any sentence"
#: src/reduce.c:435
#, fuzzy, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "開始シンボル %s はどの文にも由来しません"
#: scan-gram.l:559
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
#: scan-gram.l:255
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:284 scan-gram.l:423
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:322 scan-gram.l:394
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:343
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgstr "不適切な入力: %s"
#: scan-gram.l:364
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgstr "認識できない: %s"
#: scan-gram.l:485
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:514
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "`%s' の $$ に宣言のない型があります"
#: scan-gram.l:576 scan-gram.l:663
#: scan-gram.l:584 scan-gram.l:666
#, fuzzy, c-format
msgid "invalid value: %s%d"
msgstr "不適切な $ の値"
#: scan-gram.l:583
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d 個の `%s' が宣言された型を持っていません"
#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s は不適切です"
#: lib/getopt.c:694
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "状態が多すぎます (最大 %d)"
#: src/symlist.c:97 src/symlist.c:109
msgid "invalid $ value"
msgstr "不適切な $ の値"
#: src/symtab.c:81
#, c-format
msgid "type redeclaration for %s"
msgstr "%s の型が再定義されました"
#: src/symtab.c:98 src/symtab.c:117
#, fuzzy, c-format
msgid "%s redeclaration for %s"
msgstr "%s の型が再定義されました"
#: src/symtab.c:138
#, c-format
msgid "redefining precedence of %s"
msgstr "%s に先行した再定義です"
#: src/symtab.c:157
#, c-format
msgid "symbol %s redefined"
msgstr "シンボル %s が再定義されました"
#: src/symtab.c:180
#, fuzzy, c-format
msgid "redefining user token number of %s"
msgstr "%s に先行した再定義です"
#: src/symtab.c:225
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"シンボル %s が使われていますが、トークンとして定義されておらず、規則を持ちま"
"せん"
#: src/symtab.c:244
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "シンボル `%s' はリテラル文字列として複数回使われました"
#: src/symtab.c:247
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "シンボル `%s' は複数のリテラル文字列が与えられました"
#: src/symtab.c:281
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "先行している %s と %s で競合が生じています"
#: src/symtab.c:293
#, fuzzy, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "非結合値 %s と %s で競合が生じています"
#: src/symtab.c:363
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "トークン %s と %s の双方が番号 %d に割り当てられました"
#: src/symtab.c:568
#, c-format
msgid "the start symbol %s is undefined"
msgstr "開始シンボル %s は定義されていません"
#: src/symtab.c:572
#, c-format
msgid "the start symbol %s is a token"
msgstr "開始シンボル %s はトークンです"
#: lib/argmatch.c:161
#, fuzzy, c-format
msgid "invalid argument %s for %s"
msgstr "不適切な入力: %s"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:235
#, c-format
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:238
#, c-format
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:241
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
#: lib/getopt.c:662
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: オプション `%s' は曖昧です\n"
#: lib/getopt.c:719
#: lib/getopt.c:687
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: オプション `--%s' は引数を許しません\n"
#: lib/getopt.c:724
#: lib/getopt.c:692
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: オプション `%c%s' は引数を許しません\n"
#: lib/getopt.c:742 lib/getopt.c:915
#: lib/getopt.c:710 lib/getopt.c:883
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: オプション `%s' は引数を要求します\n"
#: lib/getopt.c:771
#: lib/getopt.c:739
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: 認識できないオプション `--%s' です\n"
#: lib/getopt.c:775
#: lib/getopt.c:743
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: 認識できないオプション `%c%s' です\n"
#: lib/getopt.c:801
#: lib/getopt.c:769
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: 定格外のオプション -- %c\n"
#: lib/getopt.c:804
#: lib/getopt.c:772
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: 不適切なオプション -- %c\n"
#: lib/getopt.c:834 lib/getopt.c:964
#: lib/getopt.c:802 lib/getopt.c:932
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: オプションは引数を要求します -- %c\n"
#: lib/getopt.c:881
#: lib/getopt.c:849
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: オプション `-W %s' は曖昧です\n"
#: lib/getopt.c:899
#: lib/getopt.c:867
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: オプション `-W %s' は引数を許しません\n"
#: lib/obstack.c:494 lib/obstack.c:497 lib/xmalloc.c:66
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
msgid "memory exhausted"
msgstr "メモリを使い果たしました"
@@ -491,14 +696,35 @@ msgstr "`"
msgid "'"
msgstr "'"
#~ msgid "too many states (max %d)"
#~ msgstr "状態が多すぎます (最大 %d)"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
#~ msgid " (rule %d)"
#~ msgstr " (規則 %d)"
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\tエラー (非結合)\n"
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
#~ msgid "reduce"
#~ msgstr "還元"
#~ msgid "shift"
#~ msgstr "シフト"
#~ msgid "an error"
#~ msgstr "エラー"
#~ msgid "%s contains "
#~ msgstr "%s の中身は"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[規則 %d を利用して還元 (%s)]\n"
#~ msgid ""
#~ " $default\treduce using rule %d (%s)\n"
@@ -507,29 +733,14 @@ msgstr "'"
#~ " $default\t規則 %d を利用して還元 (%s)\n"
#~ "\n"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[規則 %d を利用して還元 (%s)]\n"
#~ msgid " %-4s\treduce using rule %d (%s)\n"
#~ msgstr " %-4s\t規則 %d を利用して還元 (%s)\n"
#~ msgid " $default\treduce using rule %d (%s)\n"
#~ msgstr " $default\t規則 %d を利用して還元 (%s)\n"
#~ msgid "invalid $ value"
#~ msgstr "不適切な $ の値"
#~ msgid "Grammar"
#~ msgstr "文法"
#~ msgid "Number, Line, Rule"
#~ msgstr "番号, 行, 規則"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid "empty"
#~ msgstr "空"
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' は最早サポートされません"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "予期しない `/' が見つかり、無視されました"
@@ -537,9 +748,6 @@ msgstr "'"
#~ msgid "unterminated comment"
#~ msgstr "閉じていないコメントです"
#~ msgid "unexpected end of file"
#~ msgstr "予期しないファイルの終端です"
#~ msgid "unescaped newline in constant"
#~ msgstr "定数の中にエスケープされていない改行があります"
@@ -567,8 +775,29 @@ msgstr "'"
#~ msgid "`%s' requires an argument"
#~ msgstr "`%s' オプションは引数を要求します"
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' は最早サポートされません"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "最大テーブルサイズ (%d) を超えました"
#~ msgid " (rule %d)"
#~ msgstr " (規則 %d)"
#~ msgid " $default\taccept\n"
#~ msgstr " $default\taccept\n"
#~ msgid " NO ACTIONS\n"
#~ msgstr " 動作無し\n"
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\tエラー (非結合)\n"
#~ msgid " %-4s\tgo to state %d\n"
#~ msgstr " %-4s\t状態 %d へ\n"
#~ msgid "Number, Line, Rule"
#~ msgstr "番号, 行, 規則"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid " Skipping to next \\n"
#~ msgstr " 次の \\n にスキップ"
@@ -582,12 +811,18 @@ msgstr "'"
#~ msgid "unterminated string"
#~ msgstr "閉じられていない文字列"
#~ msgid "unterminated `%{' definition"
#~ msgstr "`%{' 定義 が閉じられていません"
#~ msgid "Premature EOF after %s"
#~ msgstr "%s の後ろに早くも EOF があります"
#~ msgid "`%s' is invalid in %s"
#~ msgstr "`%s' は %s 内では不適切です"
#~ msgid "invalid %s declaration"
#~ msgstr "%s の宣言が不適切です"
#~ msgid "%type declaration has no <typename>"
#~ msgstr "%type 宣言に <タイプ名> がありません"
@@ -603,71 +838,6 @@ msgstr "'"
#~ msgid "unmatched %s"
#~ msgstr "対応のない %s です"
#~ msgid "invalid %s declaration"
#~ msgstr "%s の宣言が不適切です"
#~ msgid "unrecognized: %s"
#~ msgstr "認識できない: %s"
#~ msgid "no input grammar"
#~ msgstr "文法の入力が無い"
#~ msgid "unknown character: %s"
#~ msgstr "未知の文字: %s"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "邪悪な規則: 初期化シンボルにコロン (:) が続いていません"
#~ msgid "grammar starts with vertical bar"
#~ msgstr "文法は縦棒 (|) で始めます"
#~ msgid "invalid input: %s"
#~ msgstr "不適切な入力: %s"
#~ msgid "two actions at end of one rule"
#~ msgstr "一つの規則の終りに二つの動作を指定しています"
#~ msgid "reduce"
#~ msgstr "還元"
#~ msgid "shift"
#~ msgstr "シフト"
#~ msgid "an error"
#~ msgstr "エラー"
#~ msgid "symbol %s is used, but is not defined as a token and has no rules"
#~ msgstr ""
#~ "シンボル %s が使われていますが、トークンとして定義されておらず、規則を持ち"
#~ "ません"
#~ msgid "symbol `%s' used more than once as a literal string"
#~ msgstr "シンボル `%s' はリテラル文字列として複数回使われました"
#~ msgid "symbol `%s' given more than one literal string"
#~ msgstr "シンボル `%s' は複数のリテラル文字列が与えられました"
#~ msgid "conflicting precedences for %s and %s"
#~ msgstr "先行している %s と %s で競合が生じています"
#~ msgid "conflicting assoc values for %s and %s"
#~ msgstr "非結合値 %s と %s で競合が生じています"
#~ msgid "tokens %s and %s both assigned number %d"
#~ msgstr "トークン %s と %s の双方が番号 %d に割り当てられました"
#~ msgid "unterminated `%{' definition"
#~ msgstr "`%{' 定義 が閉じられていません"
#~ msgid "symbol %s redefined"
#~ msgstr "シンボル %s が再定義されました"
#~ msgid "type redeclaration for %s"
#~ msgstr "%s の型が再定義されました"
#~ msgid "redefining precedence of %s"
#~ msgstr "%s に先行した再定義です"
#~ msgid "argument of %%expect is not an integer"
#~ msgstr "%%expect の引数が整数値ではありません"
@@ -677,23 +847,26 @@ msgstr "'"
#~ msgid "expected string constant instead of %s"
#~ msgstr "ここでは %s ではなく文字列定数が期待されます"
#~ msgid "the start symbol %s is undefined"
#~ msgstr "開始シンボル %s は定義されていません"
#~ msgid "no input grammar"
#~ msgstr "文法の入力が無い"
#~ msgid "the start symbol %s is a token"
#~ msgstr "開始シンボル %s はトークンです"
#~ msgid "unknown character: %s"
#~ msgstr "未知の文字: %s"
#~ msgid "unterminated %guard clause"
#~ msgstr "%guard 節が閉じられていません"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "邪悪な規則: 初期化シンボルにコロン (:) が続いていません"
#~ msgid "grammar starts with vertical bar"
#~ msgstr "文法は縦棒 (|) で始めます"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard がありますが %%semantic_parser が指定されていません"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "最大テーブルサイズ (%d) を超えました"
#~ msgid " $ \tgo to state %d\n"
#~ msgstr " $ \t状態 %d へ\n"
#~ msgid "unterminated %guard clause"
#~ msgstr "%guard 節が閉じられていません"
#~ msgid "two actions at end of one rule"
#~ msgstr "一つの規則の終りに二つの動作を指定しています"
#~ msgid ""
#~ "\n"
@@ -744,9 +917,6 @@ msgstr "'"
#~ msgid " 1 shift/reduce conflict"
#~ msgstr " 1 シフト/還元衝突"
#~ msgid " 1 reduce/reduce conflict"
#~ msgstr " 1 還元/還元衝突"
#~ msgid "%s contains"
#~ msgstr "%s には、"
+379 -207
View File
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.34a\n"
"POT-Creation-Date: 2002-07-09 14:54+0200\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-03-20 12:54+0100\n"
"Last-Translator: Tim Van Holder <[email protected]>\n"
"Language-Team: Dutch <[email protected]>\n"
@@ -15,15 +15,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/complain.c:99 lib/error.c:128 lib/error.c:156
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Onbekende systeemfout"
#: src/complain.c:148 src/complain.c:197
#: src/complain.c:123 src/complain.c:152
msgid "warning: "
msgstr "let op: "
#: src/complain.c:329 src/complain.c:362
#: src/complain.c:252 src/complain.c:282
msgid "fatal error: "
msgstr "fatale fout: "
@@ -45,75 +45,70 @@ msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
"Conflict in staat %d tussen regel %d en token %s opgelost als \"%s\".\n"
#: src/conflicts.c:403
#: src/conflicts.c:402
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d shift/reductie conflict"
msgstr[1] "%d shift/reductie conflicten"
#: src/conflicts.c:410
#: src/conflicts.c:409
msgid "and"
msgstr "en"
#: src/conflicts.c:416
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d reductie/reductie conflict"
msgstr[1] "%d reductie/reductie conflicten"
#: src/conflicts.c:441
#, c-format
msgid "State %d contains "
msgstr "Staat %d bevat"
#: src/conflicts.c:514
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "conflicten: "
#: src/conflicts.c:516
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
msgstr " %d vershuif/reductie"
#: src/conflicts.c:520
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
msgstr " %d reductie/reductie"
#: src/conflicts.c:525
#: src/conflicts.c:460
#, c-format
msgid "%s contains "
msgstr "%s bevat"
msgid "State %d contains "
msgstr "Staat %d bevat"
#: src/conflicts.c:532
#, c-format
msgid "expected %d shift/reduce conflict\n"
msgid_plural "expected %d shift/reduce conflicts\n"
#: src/conflicts.c:537
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "%d shift/reductie conflict werd verwacht\n"
msgstr[1] "%d shift/reductie conflicten werden verwacht\n"
#: src/files.c:157
#: src/files.c:114
#, c-format
msgid "cannot open file `%s'"
msgstr "kan bestand `%s' niet openen"
#: src/files.c:176
#: src/files.c:133
msgid "cannot close file"
msgstr "kan bestand niet sluiten"
# Dank U, Akim :-)
#: src/getargs.c:99
#: src/getargs.c:157
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison genereert parsers voor LALR(1) grammatica's.\n"
#: src/getargs.c:103
#: src/getargs.c:161
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Gebruik: %s [OPTIE]... BESTAND\n"
#: src/getargs.c:107
#: src/getargs.c:165
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"
@@ -123,7 +118,7 @@ msgstr ""
"optionele argumenten geldt dezelfde regel.\n"
# Misschien beter 'een POSIX-compatibele yacc'?
#: src/getargs.c:113
#: src/getargs.c:171
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -137,7 +132,7 @@ msgstr ""
# Correcte vervoeging van 'voorvoegen'?
# Betere vertaling voor 'directives'?
#: src/getargs.c:120
#: src/getargs.c:178
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -157,7 +152,7 @@ msgstr ""
" -n, --no-parser genereer alleen de tabellen\n"
" -k, --token-table genereer ook een tabel van tokennamen\n"
#: src/getargs.c:132
#: src/getargs.c:190
#, fuzzy
msgid ""
"Output:\n"
@@ -177,7 +172,7 @@ msgstr ""
" -g, --graph genereer ook een VCG beschrijving van de "
"automaat\n"
#: src/getargs.c:143
#: src/getargs.c:201
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -188,29 +183,29 @@ msgid ""
" `none' disable the report\n"
msgstr ""
#: src/getargs.c:154
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
msgstr ""
"Meld bugs aan <[email protected]>.\n"
"Meld fouten in de vertaling aan <[email protected]>.\n"
#: src/getargs.c:168
#: src/getargs.c:226
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:170
#: src/getargs.c:228
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr ""
#: src/getargs.c:174
#: src/getargs.c:232
#, fuzzy, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr ""
"Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
"Free Software Foundation, Inc.\n"
#: src/getargs.c:176
#: src/getargs.c:234
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -219,27 +214,44 @@ msgstr ""
"garantie; zelfs niet voor VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD\n"
"DOEL.\n"
#: src/getargs.c:333
#: src/getargs.c:395
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Probeer `%s --help' voor meer informatie.\n"
#: src/getargs.c:340
#: src/getargs.c:402
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: geen grammaticabestand opgegeven\n"
#: src/getargs.c:344
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: extra argumenten na `%s' worden genegeerd\n"
#: src/lalr.c:110
#: src/gram.c:139
msgid "empty"
msgstr "leeg"
#: src/gram.c:233
msgid "Grammar"
msgstr "Grammatica"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
msgstr "let op: "
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "teveel gotos (maximum is %d)"
#: parse-gram.y:344
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
@@ -256,7 +268,7 @@ msgstr " %-4s\tshift, en ga naar staat %d\n"
#: src/print.c:164
#, fuzzy, c-format
msgid "go to state %d\n"
msgstr " %-4s\tga naar staat %d\n"
msgstr " $ \tga naar staat %d\n"
#: src/print.c:201
#, fuzzy
@@ -268,149 +280,147 @@ msgstr "%-4s\tfout (niet associatief)"
msgid "reduce using rule %d (%s)"
msgstr "$standaard\treduceren via regel %d (%s)"
#: src/print.c:323 src/print.c:386
#: src/print.c:293
msgid "accept"
msgstr ""
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr ""
#: src/print.c:405
msgid " $default\taccept\n"
msgstr " $standaard\taccepteer\n"
#: src/print.c:407
msgid " NO ACTIONS\n"
msgstr " GEEN AKTIES\n"
#: src/print.c:428
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "staat %d"
#: src/print.c:462
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Eindsymbolen, met de regels waarin ze voorkomen"
# Betere vertaling voor non-terminals? 'tussensymbolen'?
#: src/print.c:489
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Niet-eindsymbolen, met de regels waarin ze voorkomen"
#: src/print.c:518
#: src/print.c:512
msgid " on left:"
msgstr " links:"
#: src/print.c:533
#: src/print.c:527
msgid " on right:"
msgstr " rechts:"
#: src/reader.c:53
#: src/print.c:555
#, fuzzy
msgid "Rules never reduced"
msgstr "%d regel wordt nooit gereduceerd\n"
#: src/reader.c:52
#, c-format
msgid "multiple %s declarations"
msgstr "meerdere %s declaraties"
#: src/reader.c:139
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr ""
#: src/reader.c:237
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "regel opgegeven voor token (%s)"
#: src/reader.c:262
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "type-conflict (`%s' `%s') bij standaardaktie"
#: src/reader.c:270
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "lege regel voor niet-eindsymbool met type, en geen actie"
#: src/reader.c:341
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "twee @prec's na elkaar"
#: src/reader.c:351
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
#: src/reader.c:353
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:355
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:366
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:368
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:512
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "invoergrammatica bevat geen regels"
#: src/reader.c:544
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "teveel symbolen (tokens plus niet-eindsymbolen); het maximum is %d"
#: src/reduce.c:243 src/reduce.c:309 src/reduce.c:400
#, fuzzy
msgid "warning"
msgstr "let op: "
#: src/reduce.c:243
#: src/reduce.c:239
#, fuzzy
msgid "useless rule"
msgstr "%d nutteloze regel"
#: src/reduce.c:309
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d nutteloos niet-eindsymbool"
#: src/reduce.c:356
msgid "Useless nonterminals:"
#: src/reduce.c:349
#, fuzzy
msgid "Useless nonterminals"
msgstr "Nutteloze niet-eindsymbolen:"
#: src/reduce.c:369
msgid "Terminals which are not used:"
#: src/reduce.c:362
#, fuzzy
msgid "Terminals which are not used"
msgstr "Eindsymbolen die niet gebruikt worden:"
#: src/reduce.c:378
#: src/reduce.c:371
#, fuzzy
msgid "Useless rules"
msgstr "Nutteloze regels:"
#: src/reduce.c:395
#: src/reduce.c:387
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d regel wordt nooit gereduceerd\n"
msgstr[1] "%d regels worden nooit gereduceerd\n"
#: src/reduce.c:403
#: src/reduce.c:395
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d nutteloos niet-eindsymbool"
msgstr[1] "%d nutteloze niet-eindsymbolen"
#: src/reduce.c:409
#: src/reduce.c:401
msgid " and "
msgstr " en "
#: src/reduce.c:412
#: src/reduce.c:404
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -418,87 +428,281 @@ msgstr[0] "%d nutteloze regel"
msgstr[1] "%d nutteloze regels"
# Ik _denk_ dat dit correct weergeeft wat er bedoeld wordt (m.a.w. er is geen regel voor het startsymbool)
#: src/reduce.c:442
#, c-format
msgid "Start symbol %s does not derive any sentence"
#: src/reduce.c:435
#, fuzzy, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "Startsymbool %s wordt vanuit geen enkele zin bereikt"
#: scan-gram.l:559
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
#: scan-gram.l:255
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "onverwacht einde van bestand"
#: scan-gram.l:284 scan-gram.l:423
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "onverwacht einde van bestand"
#: scan-gram.l:322 scan-gram.l:394
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "onverwacht einde van bestand"
#: scan-gram.l:343
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgstr "ongeldige invoer: %s"
#: scan-gram.l:364
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgstr "onbekend: %s"
#: scan-gram.l:485
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "onverwacht einde van bestand"
#: scan-gram.l:514
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "onverwacht einde van bestand"
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ van `%s' heeft geen gedeclareerd type"
#: scan-gram.l:576 scan-gram.l:663
#: scan-gram.l:584 scan-gram.l:666
#, fuzzy, c-format
msgid "invalid value: %s%d"
msgstr "ongeldige @-waarde"
#: scan-gram.l:583
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d van `%s' heeft geen gedeclareerd type"
#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s is ongeldig"
#: lib/getopt.c:694
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "teveel staten (maximum is %d)"
#: src/symlist.c:97 src/symlist.c:109
msgid "invalid $ value"
msgstr "ongeldige $-waarde"
#: src/symtab.c:81
#, c-format
msgid "type redeclaration for %s"
msgstr "type herdeclaratie voor %s"
#: src/symtab.c:98 src/symtab.c:117
#, fuzzy, c-format
msgid "%s redeclaration for %s"
msgstr "type herdeclaratie voor %s"
#: src/symtab.c:138
#, c-format
msgid "redefining precedence of %s"
msgstr "herdefinitie van de voorrang van %s"
#: src/symtab.c:157
#, c-format
msgid "symbol %s redefined"
msgstr "symbool %s opnieuw gedefinieerd"
#: src/symtab.c:180
#, fuzzy, c-format
msgid "redefining user token number of %s"
msgstr "herdefinitie van de voorrang van %s"
#: src/symtab.c:225
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"symbool %s wordt gebruikt, maar is niet gedefinieerd als een teken en heeft "
"geen regels"
#: src/symtab.c:244
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "symbool `%s' meer dan eens gebruikt als een letterlijke string"
#: src/symtab.c:247
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "symbool `%s' krijgt meer dan één letterlijke string toegewezen"
#: src/symtab.c:281
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "voorrangen voor %s en %s geven conflicten"
#: src/symtab.c:293
#, fuzzy, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "associativiteitswaarden voor %s en %s geven conflicten"
#: src/symtab.c:363
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "tokens %s en %s hebben beide nummer %d toegewezen gekregen"
#: src/symtab.c:568
#, c-format
msgid "the start symbol %s is undefined"
msgstr "het startsymbool %s is niet gedefinieerd"
#: src/symtab.c:572
#, c-format
msgid "the start symbol %s is a token"
msgstr "het startsymbool %s is een token"
#: lib/argmatch.c:161
#, fuzzy, c-format
msgid "invalid argument %s for %s"
msgstr "ongeldige invoer: %s"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:235
#, c-format
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:238
#, c-format
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:241
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
#: lib/getopt.c:662
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: optie `%s' is niet eenduidig\n"
#: lib/getopt.c:719
#: lib/getopt.c:687
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: optie `--%s' staat geen argument toe\n"
#: lib/getopt.c:724
#: lib/getopt.c:692
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: optie `%c%s' staat geen argument toe\n"
#: lib/getopt.c:742 lib/getopt.c:915
#: lib/getopt.c:710 lib/getopt.c:883
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: optie `%s' vereist een argument\n"
#: lib/getopt.c:771
#: lib/getopt.c:739
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: onbekende optie `--%s'\n"
#: lib/getopt.c:775
#: lib/getopt.c:743
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: onbekende optie `%c%s'\n"
#: lib/getopt.c:801
#: lib/getopt.c:769
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: ongeldige optie -- %c\n"
#: lib/getopt.c:804
#: lib/getopt.c:772
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: ongeldige optie -- %c\n"
#: lib/getopt.c:834 lib/getopt.c:964
#: lib/getopt.c:802 lib/getopt.c:932
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: optie vereist een argument -- %c\n"
#: lib/getopt.c:881
#: lib/getopt.c:849
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: optie `-W %s' is niet eenduidig\n"
#: lib/getopt.c:899
#: lib/getopt.c:867
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: optie `--%s' staat geen argument toe\n"
#: lib/obstack.c:494 lib/obstack.c:497 lib/xmalloc.c:66
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
msgid "memory exhausted"
msgstr "geen geheugen meer beschikbaar"
@@ -510,14 +714,35 @@ msgstr "`"
msgid "'"
msgstr "'"
#~ msgid "too many states (max %d)"
#~ msgstr "teveel staten (maximum is %d)"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
#~ msgid " (rule %d)"
#~ msgstr " (regel %d)"
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\tfout (niet associatief)\n"
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
#~ msgid "reduce"
#~ msgstr "reductie"
#~ msgid "shift"
#~ msgstr "shift"
#~ msgid "an error"
#~ msgstr "een fout"
#~ msgid "%s contains "
#~ msgstr "%s bevat"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[reductie via regel %d (%s)]\n"
#~ msgid ""
#~ " $default\treduce using rule %d (%s)\n"
@@ -526,30 +751,14 @@ msgstr "'"
#~ " $standaard\treductie via regel %d (%s)\n"
#~ "\n"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[reductie via regel %d (%s)]\n"
#~ msgid " %-4s\treduce using rule %d (%s)\n"
#~ msgstr " %-4s\treductie via regel %d (%s)\n"
#~ msgid " $default\treduce using rule %d (%s)\n"
#~ msgstr " $standaard\treductie via regel %d (%s)\n"
#~ msgid "invalid $ value"
#~ msgstr "ongeldige $-waarde"
#~ msgid "Grammar"
#~ msgstr "Grammatica"
# Ik zou liever 'line' vertalen als 'regel', maar hoe zit het dan met 'rule'? :-)
#~ msgid "Number, Line, Rule"
#~ msgstr "Nummer, Lijn, Regel"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid "empty"
#~ msgstr "leeg"
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' wordt niet meer ondersteund"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "onverwachte `/' gevonden en genegeerd"
@@ -557,9 +766,6 @@ msgstr "'"
#~ msgid "unterminated comment"
#~ msgstr "niet-beëindigde commentaar"
#~ msgid "unexpected end of file"
#~ msgstr "onverwacht einde van bestand"
# geen letterlijke vertaling, maar zegt wel waar het om gaat
#~ msgid "unescaped newline in constant"
#~ msgstr "newline-teken zonder voorafgaande `\\' in constante"
@@ -589,8 +795,30 @@ msgstr "'"
#~ msgid "`%s' requires an argument"
#~ msgstr "`%s' heeft een argument nodig"
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' wordt niet meer ondersteund"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "maximale tabelgrootte (%d) overschreden"
#~ msgid " (rule %d)"
#~ msgstr " (regel %d)"
#~ msgid " $default\taccept\n"
#~ msgstr " $standaard\taccepteer\n"
#~ msgid " NO ACTIONS\n"
#~ msgstr " GEEN AKTIES\n"
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\tfout (niet associatief)\n"
#~ msgid " %-4s\tgo to state %d\n"
#~ msgstr " %-4s\tga naar staat %d\n"
# Ik zou liever 'line' vertalen als 'regel', maar hoe zit het dan met 'rule'? :-)
#~ msgid "Number, Line, Rule"
#~ msgstr "Nummer, Lijn, Regel"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid " Skipping to next \\n"
#~ msgstr " Verder naar volgende \\n"
@@ -604,12 +832,18 @@ msgstr "'"
#~ msgid "unterminated string"
#~ msgstr "niet-beëindigde string"
#~ msgid "unterminated `%{' definition"
#~ msgstr "niet-beëindigde `%{' definitie"
#~ msgid "Premature EOF after %s"
#~ msgstr "Voortijdig bestandseinde na %s"
#~ msgid "`%s' is invalid in %s"
#~ msgstr "`%s' is ongeldig in %s"
#~ msgid "invalid %s declaration"
#~ msgstr "ongeldige %s declaratie"
#~ msgid "%type declaration has no <typename>"
#~ msgstr "%type declaratie heeft geen <typenaam>"
@@ -627,11 +861,14 @@ msgstr "'"
#~ msgid "unmatched %s"
#~ msgstr "%s zonder tegenhanger"
#~ msgid "invalid %s declaration"
#~ msgstr "ongeldige %s declaratie"
#~ msgid "argument of %%expect is not an integer"
#~ msgstr "argument van %%expect is geen geheel getal"
#~ msgid "unrecognized: %s"
#~ msgstr "onbekend: %s"
#~ msgid "unrecognized item %s, expected an identifier"
#~ msgstr "onbekend element %s; een naam werd verwacht"
#~ msgid "expected string constant instead of %s"
#~ msgstr "in plaats van %s werd een stringconstante verwacht"
#~ msgid "no input grammar"
#~ msgstr "geen invoergrammatica"
@@ -639,6 +876,9 @@ msgstr "'"
#~ msgid "unknown character: %s"
#~ msgstr "onbekend karakter: %s"
#~ msgid "unterminated %guard clause"
#~ msgstr "niet-beëindigde %guard-clausule"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr ""
#~ "slecht geformuleerde regel: beginsymbool wordt niet gevolgd door dubbele "
@@ -650,76 +890,8 @@ msgstr "'"
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "`;' ontbreekt aan het einde van de voorgaande regel"
#~ msgid "invalid input: %s"
#~ msgstr "ongeldige invoer: %s"
#~ msgid "two actions at end of one rule"
#~ msgstr "twee akties aan het einde van één regel"
#~ msgid "reduce"
#~ msgstr "reductie"
#~ msgid "shift"
#~ msgstr "shift"
#~ msgid "an error"
#~ msgstr "een fout"
#~ msgid "symbol %s is used, but is not defined as a token and has no rules"
#~ msgstr ""
#~ "symbool %s wordt gebruikt, maar is niet gedefinieerd als een teken en "
#~ "heeft geen regels"
#~ msgid "symbol `%s' used more than once as a literal string"
#~ msgstr "symbool `%s' meer dan eens gebruikt als een letterlijke string"
#~ msgid "symbol `%s' given more than one literal string"
#~ msgstr "symbool `%s' krijgt meer dan één letterlijke string toegewezen"
#~ msgid "conflicting precedences for %s and %s"
#~ msgstr "voorrangen voor %s en %s geven conflicten"
#~ msgid "conflicting assoc values for %s and %s"
#~ msgstr "associativiteitswaarden voor %s en %s geven conflicten"
#~ msgid "tokens %s and %s both assigned number %d"
#~ msgstr "tokens %s en %s hebben beide nummer %d toegewezen gekregen"
#~ msgid "unterminated `%{' definition"
#~ msgstr "niet-beëindigde `%{' definitie"
#~ msgid "symbol %s redefined"
#~ msgstr "symbool %s opnieuw gedefinieerd"
#~ msgid "type redeclaration for %s"
#~ msgstr "type herdeclaratie voor %s"
#~ msgid "redefining precedence of %s"
#~ msgstr "herdefinitie van de voorrang van %s"
#~ msgid "argument of %%expect is not an integer"
#~ msgstr "argument van %%expect is geen geheel getal"
#~ msgid "unrecognized item %s, expected an identifier"
#~ msgstr "onbekend element %s; een naam werd verwacht"
#~ msgid "expected string constant instead of %s"
#~ msgstr "in plaats van %s werd een stringconstante verwacht"
#~ msgid "the start symbol %s is undefined"
#~ msgstr "het startsymbool %s is niet gedefinieerd"
#~ msgid "the start symbol %s is a token"
#~ msgstr "het startsymbool %s is een token"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard aanwezig maar %%semantic_parser niet opgegeven"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "maximale tabelgrootte (%d) overschreden"
#~ msgid " $ \tgo to state %d\n"
#~ msgstr " $ \tga naar staat %d\n"
#~ msgid "unterminated %guard clause"
#~ msgstr "niet-beëindigde %guard-clausule"
#~ msgid "two actions at end of one rule"
#~ msgstr "twee akties aan het einde van één regel"
+142 -418
View File
@@ -4,9 +4,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"PO-Revision-Date: 2002-07-24 17:35-0300\n"
"Project-Id-Version: bison 1.50\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-10-07 00:30-0300\n"
"Last-Translator: Alexandre Folle de Menezes <[email protected]>\n"
"Language-Team: Brazilian Portuguese <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -14,66 +14,6 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, c-format
msgid "Exiting get_state => %d\n"
msgstr ""
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, c-format
msgid "Closure: %s\n"
msgstr ""
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (regra %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Erro de sistema desconhecido"
@@ -87,22 +27,19 @@ msgid "fatal error: "
msgstr "erro fatal: "
#: src/conflicts.c:72
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr ""
"Conflito no estado %d entre a regra %d e a token %s resolvido como %s.\n"
msgstr " Conflito entre a regra %d e a token %s resolvido como `shift`."
#: src/conflicts.c:80
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr ""
"Conflito no estado %d entre a regra %d e a token %s resolvido como %s.\n"
msgstr " Conflito entre a regra %d e a token %s resolvido como `reduce`."
#: src/conflicts.c:87
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
"Conflito no estado %d entre a regra %d e a token %s resolvido como %s.\n"
msgstr " Conflito entre a regra %d e a token %s resolvido como um erro."
#: src/conflicts.c:402
#, c-format
@@ -142,11 +79,11 @@ msgid "State %d contains "
msgstr "O estado %d contém "
#: src/conflicts.c:537
#, fuzzy, c-format
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "esperado: %d conflito de deslocamento/redução\n"
msgstr[1] "esperados: %d conflitos de deslocamento/redução\n"
msgstr[0] "esperado: %d conflito de deslocamento/redução"
msgstr[1] "esperados: %d conflitos de deslocamento/redução"
#: src/files.c:114
#, c-format
@@ -208,7 +145,6 @@ msgstr ""
" --k, --token-table inclui uma tabela de nomes de tokens\n"
#: src/getargs.c:190
#, fuzzy
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -221,7 +157,8 @@ msgid ""
msgstr ""
"Saída:\n"
" -d, --defines também produz um arquivo de cabeçalho\n"
" -v, --verbose também produz uma explicação do autômato\n"
" -r, --report=ITENS também produz detalhes do autômato\n"
" -v, --verbose o mesmo que `--report=state'\n"
" -b, --file-prefix=PREFIXO especifica o PREFIXO para os arquivos de saída\n"
" -o, --output=ARQUIVO armazena a saída em ARQUIVO\n"
" -g, --graph também produz uma descrição em VCG do autômato\n"
@@ -236,6 +173,14 @@ msgid ""
" `all' include all the above information\n"
" `none' disable the report\n"
msgstr ""
"ITENS é uma lista separada por vírgulas, que pode incluir:\n"
" `state' descreve os estados\n"
" `itemset' completa os conjuntos de ítens básicos com seus "
"fechamentos\n"
" `lookahead' associa explicitamente as previsões com os ítens\n"
" `solved' descreve a solução de conflitos de deslocamento/redução\n"
" `all' inclui todas as informações acima\n"
" `none' desabilita o relatório\n"
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
@@ -289,70 +234,22 @@ msgstr "vazio"
msgid "Grammar"
msgstr "Gramática"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
#: src/gram.c:253
msgid "Value Sprec Sassoc Tag\n"
msgstr ""
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
msgstr "aviso: "
msgstr "aviso"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "muitos gotos (máximo %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
msgstr "regra não reduzida por causa de conflitos"
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
msgstr "o POSIX proíbe declarações na gramática"
#: src/print.c:46
#, c-format
@@ -360,58 +257,56 @@ msgid " type %d is %s\n"
msgstr " tipo %d é %s\n"
#: src/print.c:162
#, fuzzy, c-format
#, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tdeslocar e ir ao estado %d\n"
msgstr "deslocar, e ir ao estado %d\n"
#: src/print.c:164
#, fuzzy, c-format
#, c-format
msgid "go to state %d\n"
msgstr " %-4s\tir ao estado %d\n"
msgstr "ir ao estado %d\n"
#: src/print.c:201
#, fuzzy
msgid "error (nonassociative)\n"
msgstr " %-4s\terro (não associativo)\n"
msgstr "erro (não associativo)\n"
#: src/print.c:290
#, fuzzy, c-format
#, c-format
msgid "reduce using rule %d (%s)"
msgstr " %-4s\treduzir usando a regra %d (%s)\n"
msgstr "reduzir usando a regra %d (%s)"
#: src/print.c:293
msgid "accept"
msgstr ""
msgstr "aceitar"
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr ""
msgstr "$padrão"
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "estado %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Terminais, com as regras onde eles aparecem"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Não-terminais com as regras onde eles aparecem"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " à esquerda:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " à direita:"
#: src/print.c:552
#, fuzzy
#: src/print.c:555
msgid "Rules never reduced"
msgstr "%d regra que nunca foi reduzida\n"
msgstr "Regras nunca reduzidas"
#: src/reader.c:52
#, c-format
@@ -421,84 +316,79 @@ msgstr "declara
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr ""
msgstr "tipo de resultado conflita na fução de mescla %s: `%s' vs. `%s'"
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "regra fornecida para %s, que é um token"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "os tipos (`%s' `%s') não concordam na ação padrão"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "regra vazia para um não-terminal com tipo, e não há ações"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "dois @prec em uma linha"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
msgstr "%%dprec afeta apenas analisadores GLR"
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
msgstr "%%dprec deve ser seguido por um número positivo"
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
msgstr "apenas um %%dprec é permitido por regra"
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
msgstr "%%merge afeta apenas analisadores GLR"
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
msgstr "apenas um %%merge é permitido por regra"
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "não há regras na gramática de entrada"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "muitos símbolos (terminais e não-terminais); máximo %d"
#: src/reduce.c:239
#, fuzzy
msgid "useless rule"
msgstr "%d regra inútil"
msgstr "regra inútil"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d não-terminal inútil"
msgstr "não-terminal inútil"
#: src/reduce.c:349
#, fuzzy
msgid "Useless nonterminals"
msgstr "Não-terminais inúteis:"
msgstr "Não-terminais inúteis"
#: src/reduce.c:362
#, fuzzy
msgid "Terminals which are not used"
msgstr "Terminais não usados:"
msgstr "Terminais que não foram usados"
#: src/reduce.c:371
#, fuzzy
msgid "Useless rules"
msgstr "Regras inúteis:"
msgstr "Regras inúteis"
#: src/reduce.c:387
#, c-format
@@ -526,75 +416,61 @@ msgstr[0] "%d regra in
msgstr[1] "%d regras inúteis"
#: src/reduce.c:435
#, fuzzy, c-format
#, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "O símbolo de início %s não deriva nenhuma sentença"
msgstr "símbolo de início %s não deriva nenhuma sentença"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
msgstr ": caractere inválido: `%c'\n"
#: src/scan-gram.l:246
#, fuzzy
#: scan-gram.l:255
msgid ": unexpected end of file in a comment\n"
msgstr "fim de arquivo inesperado"
msgstr ": fim de arquivo inesperado em um comentário\n"
#: src/scan-gram.l:274 src/scan-gram.l:412
#, fuzzy
#: scan-gram.l:284 scan-gram.l:423
msgid ": unexpected end of file in a string\n"
msgstr "fim de arquivo inesperado"
msgstr ": fim de arquivo inesperado em uma string\n"
#: src/scan-gram.l:311 src/scan-gram.l:383
#, fuzzy
#: scan-gram.l:322 scan-gram.l:394
msgid ": unexpected end of file in a character\n"
msgstr "fim de arquivo inesperado"
msgstr ": fim de arquivo inesperado em um caractere\n"
#: src/scan-gram.l:332
#, fuzzy, c-format
#: scan-gram.l:343
#, c-format
msgid ": invalid escape: %s\n"
msgstr "valor inválido: %s%d"
msgstr ": escape inválido: %s\n"
#: src/scan-gram.l:353
#, fuzzy, c-format
#: scan-gram.l:364
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr "não reconhecido: %s"
msgstr ": escape não reconhecido: %s\n"
#: src/scan-gram.l:473
#, fuzzy
#: scan-gram.l:485
msgid ": unexpected end of file in a braced code\n"
msgstr "fim de arquivo inesperado"
msgstr ": fim de arquivo inesperado em código entre chaves\n"
#: src/scan-gram.l:502
#, fuzzy
#: scan-gram.l:514
msgid ": unexpected end of file in a prologue\n"
msgstr "fim de arquivo inesperado"
msgstr ": fim de arquivo inesperado em um prólogo\n"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ de `%s' não tem tipo declarado"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "valor inválido: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d de `%s' não tem tipo declarado"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s é inválido"
@@ -614,9 +490,9 @@ msgid "type redeclaration for %s"
msgstr "redeclaração de tipo para %s"
#: src/symtab.c:98 src/symtab.c:117
#, fuzzy, c-format
#, c-format
msgid "%s redeclaration for %s"
msgstr "redeclaração de tipo para %s"
msgstr "redeclaração de %s para %s"
#: src/symtab.c:138
#, c-format
@@ -629,9 +505,9 @@ msgid "symbol %s redefined"
msgstr "símbolo %s redefinido"
#: src/symtab.c:180
#, fuzzy, c-format
#, c-format
msgid "redefining user token number of %s"
msgstr "redefinindo precedência de %s"
msgstr "redefinindo número de token de usuário de %s"
#: src/symtab.c:225
#, c-format
@@ -654,9 +530,9 @@ msgid "conflicting precedences for %s and %s"
msgstr "precedências conflitantes para %s e %s"
#: src/symtab.c:293
#, fuzzy, c-format
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "valores assoc conflitantes para %s e %s"
msgstr "valores associativos conflitantes para %s (%s) e %s (%s)"
#: src/symtab.c:363
#, c-format
@@ -673,93 +549,85 @@ msgstr "o s
msgid "the start symbol %s is a token"
msgstr "o símbolo de início %s é um terminal"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
#, c-format
msgid "invalid argument %s for %s"
msgstr "valor inválido: %s%d"
msgstr "argumento %s inválido para %s"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
msgstr "argumento %s ambíguo para %s"
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
msgstr "Argumentos válidos são:"
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr ""
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u liberados (%.2f%%).\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgstr ""
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u em cache (%.2f%%)\n"
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
msgstr ""
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u em cache (%.2f%%)\n"
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u em cache (%.2f%%)\n"
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr "histograma de log de contagens\n"
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
msgstr "histograma de log de tamanhos\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
msgstr "histograma de densidades\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Estatísticas de bitset:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgstr ""
msgid "Accumulated runs = %u\n"
msgstr "Execuções acumuladas = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
msgstr "Impossível ler o arquivo de estatísticas."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
msgstr "Tamanho do arquivo de estatísticas com erro.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
msgstr "Impossível de escrever no arquivo de estatísticas."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
msgstr "Impossível abrir arquivo de estatísticas para escrita."
#: lib/getopt.c:662
#, c-format
@@ -828,163 +696,19 @@ msgstr "`"
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
"\n"
"Tempos de execução (segundos)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
msgstr " TOTAL :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
#~ msgid "reduce"
#~ msgstr "reduzir"
#~ msgid "shift"
#~ msgstr "deslocar"
#~ msgid "an error"
#~ msgstr "um erro"
#~ msgid "%s contains "
#~ msgstr "%s contém "
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' não é mais suportado"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "encontrado e ignorado um `/' inesperado"
#~ msgid "unterminated comment"
#~ msgstr "comentario não terminado"
#~ msgid "unescaped newline in constant"
#~ msgstr "salto de linha em constante sem escape"
#~ msgid "octal value outside range 0...255: `\\%o'"
#~ msgstr "valor octal fora da faixa 0...255: `\\%o'"
#~ msgid "hexadecimal value above 255: `\\x%x'"
#~ msgstr "valor hexadecimal maior que 255: `\\x%x'"
#~ msgid "unknown escape sequence: `\\' followed by `%s'"
#~ msgstr "seqüência de escape desconhecida: `\\' seguido de `%s'"
#~ msgid "unterminated type name at end of file"
#~ msgstr "nome de tipo sem terminação no final do arquivo"
#~ msgid "unterminated type name"
#~ msgstr "nome de tipo sem terminação"
#~ msgid "use \"...\" for multi-character literal tokens"
#~ msgstr "use \"...\" para tokens literais multi-caracteres"
#~ msgid "`%s' supports no argument: %s"
#~ msgstr "`%s' não suporta o argumento: %s"
#~ msgid "`%s' requires an argument"
#~ msgstr "`%s' exige um argumento"
#~ msgid ""
#~ " $default\treduce using rule %d (%s)\n"
#~ "\n"
#~ msgstr ""
#~ " $default\treduzir usando a regra %d (%s)\n"
#~ "\n"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[reduzir usando a regra %d (%s)]\n"
#~ msgid " $default\treduce using rule %d (%s)\n"
#~ msgstr " $default\treduzir usando a regra %d (%s)\n"
#~ msgid " $default\taccept\n"
#~ msgstr " $default\taceitar\n"
#~ msgid " NO ACTIONS\n"
#~ msgstr " SEM AÇÕES\n"
#~ msgid "Number, Line, Rule"
#~ msgstr "Número, Linha, Regra"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid " Skipping to next \\n"
#~ msgstr " Pulando para o próximo \\n"
#~ msgid " Skipping to next %c"
#~ msgstr " Pulando para o próximo %c"
#~ msgid "unterminated string at end of file"
#~ msgstr "string não terminada no final do arquivo"
#~ msgid "unterminated string"
#~ msgstr "string não terminada"
#~ msgid "unterminated `%{' definition"
#~ msgstr "definição `%{' não terminada"
#~ msgid "Premature EOF after %s"
#~ msgstr "EOF prematuor depois de %s"
#~ msgid "`%s' is invalid in %s"
#~ msgstr "`%s' é inválido em %s"
#~ msgid "invalid %s declaration"
#~ msgstr "declaração de %s inválida"
#~ msgid "%type declaration has no <typename>"
#~ msgstr "a declaração %type no tem <nome-de-tipo>"
#~ msgid "invalid %%type declaration due to item: %s"
#~ msgstr "declaração de %%type inválida devido ao ítem: %s"
#~ msgid "invalid text (%s) - number should be after identifier"
#~ msgstr ""
#~ "texto inválido (%s) - o número deveria estar depois do identificador"
#~ msgid "unexpected item: %s"
#~ msgstr "ítem inesperado: %s"
#~ msgid "unmatched %s"
#~ msgstr "%s sem correspondência"
#~ msgid "argument of %%expect is not an integer"
#~ msgstr "o argumento de %%expect não é um inteiro"
#~ msgid "unrecognized item %s, expected an identifier"
#~ msgstr "ítem %s desconhecido, era esperado um identificador"
#~ msgid "expected string constant instead of %s"
#~ msgstr "era esperada uma string constante no lugar de %s"
#~ msgid "no input grammar"
#~ msgstr "não há gramática de entrada"
#~ msgid "unknown character: %s"
#~ msgstr "caractere desconhecido: %s"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "regra mal formada: o símbolo inicial não está seguido por :"
#~ msgid "grammar starts with vertical bar"
#~ msgstr "a gramática começa com uma barra vertical"
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "falta um `;' no final da regra anterior"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard presente mas %%semantic_parser não especificado"
#~ msgid "two actions at end of one rule"
#~ msgstr "duas ações no final de uma regra"
#~ msgid "invalid input: %s"
#~ msgstr "entrada inválida: %s"
msgstr "tempo em %s: %ld.%06ld (%ld%%)\n"
+92 -195
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-07-20 13:23+0400\n"
"Last-Translator: Dmitry S. Sivachenko <[email protected]>\n"
"Language-Team: Russian <[email protected]>\n"
@@ -15,66 +15,6 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, fuzzy, c-format
msgid "Exiting get_state => %d\n"
msgstr " %-4s\tÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, c-format
msgid "Closure: %s\n"
msgstr ""
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (ÐÒÁ×ÉÌÏ %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ"
@@ -294,45 +234,6 @@ msgstr "
msgid "Grammar"
msgstr "çÒÁÍÍÁÔÉËÁ"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
"ðÅÒÅÍÅÎÎÙÅ\n"
"----------\n"
"\n"
#: src/gram.c:253
#, fuzzy
msgid "Value Sprec Sassoc Tag\n"
msgstr "úÎÁÞ ðÒÉÏÒ áÓÓÏÃ ôÅÇ\n"
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
"ðÒÁ×ÉÌÁ\n"
"-------\n"
"\n"
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
"éÎÔÅÒÐÒÅÔÉÒÏ×ÁÎÎÙÅ ÐÒÁ×ÉÌÁ\n"
"--------------------------\n"
"\n"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
@@ -343,30 +244,12 @@ msgstr "
msgid "too many gotos (max %d)"
msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ goto (ÍÁËÓÉÍÁÌØÎÏ %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
#: src/main.c:117
#, fuzzy
msgid "rule never reduced because of conflicts"
msgstr " 1 ËÏÎÆÌÉËÔ ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
@@ -408,23 +291,23 @@ msgstr ""
msgid "state %d"
msgstr "ÓÏÓÔÏÑÎÉÅ %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "ôÅÒÍÉÎÁÌØÎÙÅ ÓÉÍ×ÏÌÙ Ó ÐÒÁ×ÉÌÁÍÉ, × ËÏÔÏÒÙÈ ÏÎÉ ÐÏÑ×ÌÑÀÔÓÑ"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "îÅÔÅÒÍÉÎÁÌØÎÙÅ ÓÉÍ×ÏÌÙ Ó ÐÒÁ×ÉÌÁÍÉ, × ËÏÔÏÒÙÈ ÏÎÉ ÐÏÑ×ÌÑÀÔÓÑ"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " ÎÁÌÅ×Ï:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " ÎÁÐÒÁ×Ï:"
#: src/print.c:552
#: src/print.c:555
#, fuzzy
msgid "Rules never reduced"
msgstr "%d ÐÒÁ×ÉÌÏ ÎÅ Ó×ÅÄÅÎÏ\n"
@@ -444,50 +327,50 @@ msgstr ""
msgid "rule given for %s, which is a token"
msgstr "ÐÒÁ×ÉÌÏ ÚÁÄÁÎÏ ÄÌÑ %s, ËÏÔÏÒÙÊ Ñ×ÌÑÅÔÓÑ ÌÅËÓÅÍÏÊ"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "ËÏÎÆÌÉËÔ ÔÉÐÏ× (`%s' `%s') ÎÁ ÄÅÊÓÔ×ÉÉ ÐÏ ÕÍÏÌÞÁÎÉÀ"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr ""
"ÐÕÓÔÏÅ ÐÒÁ×ÉÌÏ ÄÌÑ ÔÉÐÉÚÉÒÏ×ÁÎÎÏÇÏ ÎÅÔÅÒÍÉÎÁÌØÎÏÇÏ ÓÉÍ×ÏÌÁ, É ÎÅÔ ÄÅÊÓÔ×ÉÑ"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "Ä×Á @prec ÐÏÄÒÑÄ"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "ÏÔÓÕÔÓÔ×ÕÀÔ ÐÒÁ×ÉÌÁ ×Ï ×ÈÏÄÎÏÊ ÇÒÁÍÍÁÔÉËÅ"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÉÍ×ÏÌÏ× (ÌÅËÓÅÍÙ ÐÌÀÓ ÎÅÔÅÒÍÉÎÁÌÙ); ÍÁËÓÉÍÁÌØÎÏ %d"
@@ -550,71 +433,62 @@ msgstr[2] "%d
msgid "start symbol %s does not derive any sentence"
msgstr "îÁÞÁÌØÎÙÊ ÓÉÍ×ÏÌ %s ÎÅ ×Ù×ÏÄÉÔ ÎÉ ÏÄÎÏÇÏ ÐÒÅÄÌÏÖÅÎÉÑ"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
#: src/scan-gram.l:246
#: scan-gram.l:255
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: src/scan-gram.l:274 src/scan-gram.l:412
#: scan-gram.l:284 scan-gram.l:423
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: src/scan-gram.l:311 src/scan-gram.l:383
#: scan-gram.l:322 scan-gram.l:394
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: src/scan-gram.l:332
#: scan-gram.l:343
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgstr "ÎÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ: %s%d"
#: src/scan-gram.l:353
#: scan-gram.l:364
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgstr "ÎÅÒÁÓÐÏÚÎÁÎÏ: %s"
#: src/scan-gram.l:473
#: scan-gram.l:485
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: src/scan-gram.l:502
#: scan-gram.l:514
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ × `%s' ÎÅ ÉÍÅÅÔ ÏÐÉÓÁÎÎÏÇÏ ÔÉÐÁ"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "ÎÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d ÉÚ `%s' ÎÅ ÉÍÅÅÔ ÏÐÉÓÁÎÎÏÇÏ ÔÉÐÁ"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "ÎÅ×ÅÒÎÙÊ ÚÎÁË %s"
@@ -693,16 +567,6 @@ msgstr "
msgid "the start symbol %s is a token"
msgstr "ÎÁÞÁÌØÎÙÊ ÓÉÍ×ÏÌ %s Ñ×ÌÑÅÔÓÑ ÌÅËÓÅÍÏÊ"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
msgid "invalid argument %s for %s"
@@ -717,67 +581,67 @@ msgstr ""
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
@@ -848,17 +712,17 @@ msgstr "`"
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
@@ -911,6 +775,9 @@ msgstr ""
#~ msgid "`%s' requires an argument"
#~ msgstr "ËÌÀÞ `%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ Ó ÁÒÇÕÍÅÎÔÏÍ"
#~ msgid " (rule %d)"
#~ msgstr " (ÐÒÁ×ÉÌÏ %d)"
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\tÏÛÉÂËÁ (ÎÅÁÓÓÏÃÉÁÔÉ×ÎÁÑ)\n"
@@ -1050,6 +917,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 ""
+154 -410
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"PO-Revision-Date: 2002-05-04 11:27+0200\n"
"Project-Id-Version: bison 1.50\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-10-08 19:02+0200\n"
"Last-Translator: Göran Uddeborg <[email protected]>\n"
"Language-Team: Swedish <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -15,66 +15,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, fuzzy, c-format
msgid "Exiting get_state => %d\n"
msgstr " %-4s\tgå till tillstånd %d\n"
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, c-format
msgid "Closure: %s\n"
msgstr ""
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (regel %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Okänt systemfel"
@@ -88,22 +28,19 @@ msgid "fatal error: "
msgstr "ödesdigert fel: "
#: src/conflicts.c:72
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr ""
"Konflikt i tillstånd %d mellan regel %d och element %s, löstes med %s.\n"
msgstr " Konflikt mellan regel %d och element %s löstes som skift"
#: src/conflicts.c:80
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr ""
"Konflikt i tillstånd %d mellan regel %d och element %s, löstes med %s.\n"
msgstr " Konflikt mellan regel %d och element %s löstes som reducera"
#: src/conflicts.c:87
#, fuzzy, c-format
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
"Konflikt i tillstånd %d mellan regel %d och element %s, löstes med %s.\n"
msgstr " Konflikt mellan regel %d och element %s löstes som ett fel"
#: src/conflicts.c:402
#, c-format
@@ -143,11 +80,11 @@ msgid "State %d contains "
msgstr "Tillstånd %d innehåller "
#: src/conflicts.c:537
#, fuzzy, c-format
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "förväntade %d skifta/reducerakonflikt\n"
msgstr[1] "förväntade %d skifta/reducerakonflikter\n"
msgstr[0] "förväntade %d skifta/reducerakonflikt"
msgstr[1] "förväntade %d skifta/reducerakonflikter"
#: src/files.c:114
#, c-format
@@ -209,7 +146,6 @@ msgstr ""
" -k, --token-table inkludera en tabell över elementnamn\n"
#: src/getargs.c:190
#, fuzzy
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -222,7 +158,8 @@ msgid ""
msgstr ""
"Utdata:\n"
" -d, --defines skapa också en huvudfil\n"
" -v, --verbose skapa också en förklaring av automaten\n"
" -r, --report=SAKER skapa också detaljer om automaten\n"
" -v, --verbose samma som \"--report=state\"\n"
" -b, --file-prefix=PREFIX ange ett PREFIX för utdatafiler\n"
" -o, --output=FIL lägg utdata i FIL\n"
" -g, --graph skapa också en VCG-beskrivning av automaten\n"
@@ -237,6 +174,13 @@ msgid ""
" `all' include all the above information\n"
" `none' disable the report\n"
msgstr ""
"SAKER är en lista med kommaseparerade ord som kan innehålla:\n"
" \"state\" beskriv tillstånden\n"
" \"itemset\" komplettera kärnobjektmängderna med sina höljen\n"
" \"lookahead\" koppla uttryckligen framåtblickar till objekt\n"
" \"solved\" beskriv lösningar av skifta/reducerakonflikter\n"
" \"all\" inkludera all ovanstående information\n"
" \"none\" avaktivera rapporten\n"
#: src/getargs.c:212
msgid "Report bugs to <[email protected]>.\n"
@@ -290,70 +234,22 @@ msgstr "tom"
msgid "Grammar"
msgstr "Grammatik"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
#: src/gram.c:253
msgid "Value Sprec Sassoc Tag\n"
msgstr ""
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
msgstr "varning: "
msgstr "varning"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "för många goto (max %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
msgstr "regel aldrig reducerad på grund av konflikter"
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
msgstr "POSIX förbjuder deklarationer i grammatiken"
#: src/print.c:46
#, c-format
@@ -361,58 +257,56 @@ msgid " type %d is %s\n"
msgstr " typ %d är %s\n"
#: src/print.c:162
#, fuzzy, c-format
#, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tskifta, och gå till tillstånd %d\n"
msgstr "skifta, och gå till tillstånd %d\n"
#: src/print.c:164
#, fuzzy, c-format
#, c-format
msgid "go to state %d\n"
msgstr " %-4s\tgå till tillstånd %d\n"
msgstr "gå till tillstånd %d\n"
#: src/print.c:201
#, fuzzy
msgid "error (nonassociative)\n"
msgstr " %-4s\tfel (ickeassociativ)\n"
msgstr "fel (ickeassociativ)\n"
#: src/print.c:290
#, fuzzy, c-format
#, c-format
msgid "reduce using rule %d (%s)"
msgstr " %-4s\treducera med regel %d (%s)\n"
msgstr "reducera med regel %d (%s)"
#: src/print.c:293
msgid "accept"
msgstr ""
msgstr "acceptera"
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr ""
msgstr "$standard"
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "tillstånd %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Terminaler, med regler där de förekommer"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Icketerminaler, med regler där de förekommer"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " till vänster:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " till höger:"
#: src/print.c:552
#, fuzzy
#: src/print.c:555
msgid "Rules never reduced"
msgstr "%d regel reduceras aldrig\n"
msgstr "Aldrig reducerade regler"
#: src/reader.c:52
#, c-format
@@ -422,84 +316,79 @@ msgstr "flera %s-deklarationer"
#: src/reader.c:141
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr ""
msgstr "resultattypskonflikt vid sammanslagningsfunktion %s: \"%s\" mot \"%s\""
#: src/reader.c:239
#, c-format
msgid "rule given for %s, which is a token"
msgstr "regel given för %s, som är ett element"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "typkonflikt (\"%s\" \"%s\") för standardåtgärd"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr "tom regel för typad icketerminal, och ingen åtgärd"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "två @prec i rad"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
msgstr "%%dprec påverkar endast GLR-parsrar"
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
msgstr "%%dprec måste följas av ett positivt tal"
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
msgstr "endast en %%dprec tillåts per regel"
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
msgstr "%%merge påverkar endast GLR-parsrar"
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
msgstr "endast en %%merge tillåts per regel"
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "inga regler i ingrammatiken"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "för många symboler (element plus icketerminaler); max %d"
#: src/reduce.c:239
#, fuzzy
msgid "useless rule"
msgstr "%d oanvändbar regel"
msgstr "oanvändbar regel"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d oanvändbar icketerminal"
msgstr "oanvändbar icketerminal"
#: src/reduce.c:349
#, fuzzy
msgid "Useless nonterminals"
msgstr "Oanvändbara icketerminaler:"
msgstr "Oanvändbara icketerminaler"
#: src/reduce.c:362
#, fuzzy
msgid "Terminals which are not used"
msgstr "Terminaler som inte används:"
msgstr "Terminaler som inte används"
#: src/reduce.c:371
#, fuzzy
msgid "Useless rules"
msgstr "Oanvändbara regler:"
msgstr "Oanvändbara regler"
#: src/reduce.c:387
#, c-format
@@ -527,75 +416,61 @@ msgstr[0] "%d oanv
msgstr[1] "%d oanvändbara regler"
#: src/reduce.c:435
#, fuzzy, c-format
#, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "Startsymbolen %s genererar inga meningar"
msgstr "startsymbolen %s genererar inga meningar"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
msgstr ": ogiltigt tecken: \"%c\"\n"
#: src/scan-gram.l:246
#, fuzzy
#: scan-gram.l:255
msgid ": unexpected end of file in a comment\n"
msgstr "oväntat filslut"
msgstr ": oväntat filslut i en kommentar\n"
#: src/scan-gram.l:274 src/scan-gram.l:412
#, fuzzy
#: scan-gram.l:284 scan-gram.l:423
msgid ": unexpected end of file in a string\n"
msgstr "oväntat filslut"
msgstr ": oväntat filslut i en sträng\n"
#: src/scan-gram.l:311 src/scan-gram.l:383
#, fuzzy
#: scan-gram.l:322 scan-gram.l:394
msgid ": unexpected end of file in a character\n"
msgstr "oväntat filslut"
msgstr ": oväntat filslut i ett tecken\n"
#: src/scan-gram.l:332
#, fuzzy, c-format
#: scan-gram.l:343
#, c-format
msgid ": invalid escape: %s\n"
msgstr "felaktigt värde: %s%d"
msgstr ": ogiltig specialsekvens: %s\n"
#: src/scan-gram.l:353
#, fuzzy, c-format
#: scan-gram.l:364
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr "okänt: %s"
msgstr ": okänd specialsekvens: %s\n"
#: src/scan-gram.l:473
#, fuzzy
#: scan-gram.l:485
msgid ": unexpected end of file in a braced code\n"
msgstr "oväntat filslut"
msgstr ": oväntat filslut i kod inom klamrar\n"
#: src/scan-gram.l:502
#, fuzzy
#: scan-gram.l:514
msgid ": unexpected end of file in a prologue\n"
msgstr "oväntat filslut"
msgstr ": oväntat filslut i en prolog\n"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ för \"%s\" har ingen deklarerad typ"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "felaktigt värde: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d för \"%s\" har ingen deklarerad typ"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s är felaktigt"
@@ -615,9 +490,9 @@ msgid "type redeclaration for %s"
msgstr "typen omdeklarerad för %s"
#: src/symtab.c:98 src/symtab.c:117
#, fuzzy, c-format
#, c-format
msgid "%s redeclaration for %s"
msgstr "typen omdeklarerad för %s"
msgstr "%s-omdeklaration för %s"
#: src/symtab.c:138
#, c-format
@@ -630,9 +505,9 @@ msgid "symbol %s redefined"
msgstr "symbolen %s omdefinierad"
#: src/symtab.c:180
#, fuzzy, c-format
#, c-format
msgid "redefining user token number of %s"
msgstr "omdefinition av precedens för %s"
msgstr "omdefinition av elementnummer för %s"
#: src/symtab.c:225
#, c-format
@@ -657,9 +532,9 @@ msgid "conflicting precedences for %s and %s"
msgstr "motstridiga precedenser mellan %s och %s"
#: src/symtab.c:293
#, fuzzy, c-format
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "motstridiga assoc-värden mellan %s och %s"
msgstr "motstridiga associativiteter för %s (%s) och %s (%s)"
#: src/symtab.c:363
#, c-format
@@ -676,93 +551,85 @@ msgstr "startsymbolen %s
msgid "the start symbol %s is a token"
msgstr "startsymbolen %s är ett element"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
#, c-format
msgid "invalid argument %s for %s"
msgstr "felaktigt värde: %s%d"
msgstr "ogiltigt argument %s till %s"
#: lib/argmatch.c:162
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
msgstr "tvetydigt argument %s till %s"
#: lib/argmatch.c:181
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
msgstr "Giltiga argument är:"
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr ""
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitmängdallokeringar, %u frianden (%.2f%%).\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgstr ""
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitmängdmängder, %u cachade (%.2f%%)\n"
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
msgstr ""
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitmängdåterställanden, %u cachade (%.2f%%)\n"
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitmängdtester, %u cachade (%.2f%%)\n"
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr "%u bitmängdlistor\n"
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr "anropslogghistogram\n"
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
msgstr "storlekslogghistogram\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
msgstr "densitetshistogram\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Bitmängdsstatistik:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgstr ""
msgid "Accumulated runs = %u\n"
msgstr "Accumulerade körningar = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
msgstr "Kunde inte läsa statistikfil."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
msgstr "Dålig statistikfilstorlek.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
msgstr "Kunde inte skriva statistikfil."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
msgstr "Kunde inte öppna statistikfil för skrivning."
#: lib/getopt.c:662
#, c-format
@@ -834,162 +701,39 @@ msgstr "\""
msgid "'"
msgstr "\""
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
"\n"
"Exekveringstider (sekunder)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
msgstr " TOTALT :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
msgstr "tid i %s: %ld.%06ld (%ld%%)\n"
#~ msgid "reduce"
#~ msgstr "reducera"
#~ msgid "shift"
#~ msgstr "skifta"
#~ msgid "an error"
#~ msgstr "ett fel"
#~ msgid "%s contains "
#~ msgstr "%s innehåller "
#~ msgid "`%s' is no longer supported"
#~ msgstr "\"%s\" stöds inte längre"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "oväntat \"/\" hittat och ignorerat"
#~ msgid "unterminated comment"
#~ msgstr "oavslutad kommentar"
#~ msgid "unescaped newline in constant"
#~ msgstr "oskyddat nyradstecken i konstant"
#~ msgid "octal value outside range 0...255: `\\%o'"
#~ msgstr "oktalt värde utanför intervallet 0-255: \"\\%o\""
#~ msgid "hexadecimal value above 255: `\\x%x'"
#~ msgstr "hexadecimalt värde över 255: \"\\x%x\""
#~ msgid "unknown escape sequence: `\\' followed by `%s'"
#~ msgstr "okänd specialsekvens: \"\\\" följt av \"%s\""
#~ msgid "unterminated type name at end of file"
#~ msgstr "oavslutat typnamn vid filslut"
#~ msgid "unterminated type name"
#~ msgstr "oavslutat typnamn"
#~ msgid "use \"...\" for multi-character literal tokens"
#~ msgstr "använd \"...\" för bokstavliga element med mer än ett tecken"
#~ msgid "`%s' supports no argument: %s"
#~ msgstr "\"%s\" stödjer inga argument: %s"
#~ msgid "`%s' requires an argument"
#~ msgstr "\"%s\" behöver ett argument"
# RTC betyder "reflexive transitive closure"
# Firsts är ett variabelnamn
#~ msgid "RTC: Firsts Input"
#~ msgstr "RTH: Firsts-indata"
#~ msgid ""
#~ " $default\treduce using rule %d (%s)\n"
#~ "\n"
#~ "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
#~ msgstr ""
#~ " $standard\treducera med regel %d (%s)\n"
#~ "\n"
#~ "Num (Prec, Assoc, Användbar, Robjektintervall) Vhs -> Hhs "
#~ "(Hobjektintervall) [Num]\n"
#~ msgid " %-4s\t[reduce using rule %d (%s)]\n"
#~ msgstr " %-4s\t[reducera med regel %d (%s)]\n"
#~ msgid "Lookaheads: BEGIN\n"
#~ msgstr "Framåtblickar: START\n"
#~ msgid " $default\treduce using rule %d (%s)\n"
#~ msgstr " $standard\treducera med regel %d (%s)\n"
#~ msgid "State %d: %d lookaheads\n"
#~ msgstr "Tillstånd %d: %d framåtblickar\n"
#~ msgid " $default\taccept\n"
#~ msgstr " $standard\tacceptera\n"
#~ msgid " NO ACTIONS\n"
#~ msgstr " INGA ÅTGÄRDER\n"
#~ msgid "Number, Line, Rule"
#~ msgstr "Nummer, Rad, Regel"
#~ msgid " %3d %3d %s ->"
#~ msgstr " %3d %3d %s ->"
#~ msgid " Skipping to next \\n"
#~ msgstr " Hoppar över till nästa \\n"
#~ msgid " Skipping to next %c"
#~ msgstr " Hoppar över till nästa %c"
#~ msgid "unterminated string at end of file"
#~ msgstr "oavslutad sträng vid filslut"
#~ msgid "unterminated string"
#~ msgstr "oavslutad sträng"
#~ msgid "unterminated `%{' definition"
#~ msgstr "oavslutad \"%{\"-definition"
#~ msgid "Premature EOF after %s"
#~ msgstr "Förtida filslut efter %s"
#~ msgid "`%s' is invalid in %s"
#~ msgstr "\"%s\" är felaktig i %s"
#~ msgid "invalid %s declaration"
#~ msgstr "felaktig %s-deklaration"
#~ msgid "%type declaration has no <typename>"
#~ msgstr "%type-deklaration har inget <typnamn>"
#~ msgid "invalid %%type declaration due to item: %s"
#~ msgstr "felaktig %%type-deklaration på grund av objekt: %s"
#~ msgid "invalid text (%s) - number should be after identifier"
#~ msgstr "felaktig text (%s) - tal skulle följa efter identifierare"
#~ msgid "unexpected item: %s"
#~ msgstr "oväntat objekt: %s"
#~ msgid "unmatched %s"
#~ msgstr "ensam %s"
#~ msgid "argument of %%expect is not an integer"
#~ msgstr "argument till %%expect är inte ett heltal"
#~ msgid "unrecognized item %s, expected an identifier"
#~ msgstr "oväntat objekt %s, förväntade en identifierare"
#~ msgid "expected string constant instead of %s"
#~ msgstr "förväntade strängkonstant istället för %s"
#~ msgid "no input grammar"
#~ msgstr "ingen ingrammatik"
#~ msgid "unknown character: %s"
#~ msgstr "okänt tecken: %s"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "felskriven regel: första symbolen följs inte av ett kolon"
#~ msgid "grammar starts with vertical bar"
#~ msgstr "grammatiken startar med ett vertikalt streck"
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "föregående regel saknar ett avslutande \";\""
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard finns men %%semantic_parser är inte angiven"
#~ msgid "two actions at end of one rule"
#~ msgstr "två åtgärder vid slutet av en regel"
#~ msgid "invalid input: %s"
#~ msgstr "felaktig indata: %s"
#~ msgid "Lookaheads: END\n"
#~ msgstr "Framåtblickar: SLUT\n"
+62 -185
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-08-11 00:16-0700\n"
"POT-Creation-Date: 2002-10-14 14:47+0200\n"
"PO-Revision-Date: 2002-06-25 11:03GMT +02:00\n"
"Last-Translator: Altuð Bayram <[email protected]>\n"
"Language-Team: Turkish <[email protected]>\n"
@@ -15,66 +15,6 @@ msgstr ""
"X-Generator: KBabel 0.9.5\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/LR0.c:63
#, c-format
msgid "state_list_append (state = %d, symbol = %d (%s))\n"
msgstr ""
#: src/LR0.c:181
#, c-format
msgid "Entering new_itemsets, state = %d\n"
msgstr ""
#: src/LR0.c:219
#, c-format
msgid "Entering get_state, symbol = %d (%s)\n"
msgstr ""
#: src/LR0.c:227
#, fuzzy, c-format
msgid "Exiting get_state => %d\n"
msgstr " %-4s\tdurum %d'ye git\n"
#: src/LR0.c:247
#, c-format
msgid "Entering append_states, state = %d\n"
msgstr ""
#: src/LR0.c:355
#, c-format
msgid "Processing state %d (reached by %s)\n"
msgstr ""
#: src/assoc.c:31
msgid "undefined associativity"
msgstr ""
#: src/closure.c:56
#, c-format
msgid "Closure: %s\n"
msgstr ""
#: src/closure.c:63
#, fuzzy, c-format
msgid " (rule %d)\n"
msgstr " (kural %d)"
#: src/closure.c:136
msgid "RTC: Firsts Input"
msgstr ""
#: src/closure.c:139
msgid "RTC: Firsts Output"
msgstr ""
#: src/closure.c:203
msgid "input"
msgstr ""
#: src/closure.c:234
msgid "output"
msgstr ""
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
msgid "Unknown system error"
msgstr "Bilinmeyen sistem hatasý"
@@ -294,35 +234,6 @@ msgstr "bo
msgid "Grammar"
msgstr "Gramer"
#: src/gram.c:250
msgid ""
"Variables\n"
"---------\n"
"\n"
msgstr ""
#: src/gram.c:253
msgid "Value Sprec Sassoc Tag\n"
msgstr ""
#: src/gram.c:263
msgid ""
"Rules\n"
"-----\n"
"\n"
msgstr ""
#: src/gram.c:266
msgid "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
msgstr ""
#: src/gram.c:292
msgid ""
"Rules interpreted\n"
"-----------------\n"
"\n"
msgstr ""
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#, fuzzy
msgid "warning"
@@ -333,29 +244,11 @@ msgstr "uyar
msgid "too many gotos (max %d)"
msgstr "gotos çok fazla (en fazla %d)"
#: src/lalr.c:406
msgid "Lookaheads: BEGIN\n"
msgstr ""
#: src/lalr.c:418
#, c-format
msgid "State %d: %d lookaheads\n"
msgstr ""
#: src/lalr.c:425
#, c-format
msgid " on %d (%s) -> rule %d\n"
msgstr ""
#: src/lalr.c:430
msgid "Lookaheads: END\n"
msgstr ""
#: src/main.c:117
msgid "rule never reduced because of conflicts"
msgstr ""
#: src/parse-gram.y:344
#: parse-gram.y:347
msgid "POSIX forbids declarations in the grammar"
msgstr ""
@@ -397,23 +290,23 @@ msgstr ""
msgid "state %d"
msgstr "durum %d"
#: src/print.c:453
#: src/print.c:456
msgid "Terminals, with rules where they appear"
msgstr "Sabit simgeler, kurallarýnýn bulunduklarý yerde"
#: src/print.c:480
#: src/print.c:483
msgid "Nonterminals, with rules where they appear"
msgstr "Deðiþken simgeler, kurallarýnýn bulunduklarý yerde"
#: src/print.c:509
#: src/print.c:512
msgid " on left:"
msgstr " solda:"
#: src/print.c:524
#: src/print.c:527
msgid " on right:"
msgstr " saðda:"
#: src/print.c:552
#: src/print.c:555
#, fuzzy
msgid "Rules never reduced"
msgstr "%d kural asla indirgenmedi\n"
@@ -433,50 +326,50 @@ msgstr ""
msgid "rule given for %s, which is a token"
msgstr "bir andaç olan %s için verilen kural"
#: src/reader.c:264
#: src/reader.c:268
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "öntanýmlý eylem üzerinde (`%s' `%s') tip çatýþmasý"
#: src/reader.c:272
#: src/reader.c:274
msgid "empty rule for typed nonterminal, and no action"
msgstr ""
"Tipli deðiþken simge için boþ kural tanýmlanmýþ, ve eylem belirtilmemiþ"
#: src/reader.c:343
#: src/reader.c:344
msgid "two @prec's in a row"
msgstr "bir satýrda iki @prec"
#: src/reader.c:353
#: src/reader.c:354
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr ""
#: src/reader.c:355
#: src/reader.c:356
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#: src/reader.c:358
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#: src/reader.c:369
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#: src/reader.c:371
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:514
msgid "no rules in the input grammar"
msgstr "girdi grameri içinde kurallar yok"
#: src/reader.c:545
#: src/reader.c:546
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "çok fazla simge var (andaçlar ve deðiþken simgeler); en fazla %d"
@@ -536,71 +429,62 @@ msgstr[1] "%d yarars
msgid "start symbol %s does not derive any sentence"
msgstr "Baþlangýç simgesi %s herhangi bir cümleden türemez"
#: src/relation.c:137
msgid "relation_transpose: input\n"
msgstr ""
#: src/relation.c:176
msgid "relation_transpose: output\n"
msgstr ""
#: src/scan-gram.l:202
#: scan-gram.l:211
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ""
#: src/scan-gram.l:246
#: scan-gram.l:255
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "beklenmeyen dosya sonu"
#: src/scan-gram.l:274 src/scan-gram.l:412
#: scan-gram.l:284 scan-gram.l:423
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "beklenmeyen dosya sonu"
#: src/scan-gram.l:311 src/scan-gram.l:383
#: scan-gram.l:322 scan-gram.l:394
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "beklenmeyen dosya sonu"
#: src/scan-gram.l:332
#: scan-gram.l:343
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgstr "geçersiz deðer: %s%d"
#: src/scan-gram.l:353
#: scan-gram.l:364
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgstr "tanýnmayan: %s"
#: src/scan-gram.l:473
#: scan-gram.l:485
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "beklenmeyen dosya sonu"
#: src/scan-gram.l:502
#: scan-gram.l:514
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "beklenmeyen dosya sonu"
#: src/scan-gram.l:560
#: scan-gram.l:572
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "`%s''in $$'ý bildirilmiþ tip deðil"
#: src/scan-gram.l:577 src/scan-gram.l:664
#: scan-gram.l:584 scan-gram.l:666
#, c-format
msgid "invalid value: %s%d"
msgstr "geçersiz deðer: %s%d"
#: src/scan-gram.l:584
#: scan-gram.l:591
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "`%2$s''in %1$d'i bildirilmiþ tip deðil"
#: src/scan-gram.l:595 src/scan-gram.l:612 src/scan-gram.l:671
#: src/scan-gram.l:688
#: scan-gram.l:602 scan-gram.l:619 scan-gram.l:673 scan-gram.l:690
#, c-format
msgid "%s is invalid"
msgstr "%s geçersizdir"
@@ -680,16 +564,6 @@ msgstr "ba
msgid "the start symbol %s is a token"
msgstr "baþlangýç simgesi %s bir andaçtýr"
#: src/tables.c:210
#, c-format
msgid "growing table and check from: %lu to %lu\n"
msgstr ""
#: src/tables.c:757
#, c-format
msgid "base_t too small to hold %d\n"
msgstr ""
#: lib/argmatch.c:161
#, fuzzy, c-format
msgid "invalid argument %s for %s"
@@ -704,67 +578,67 @@ msgstr ""
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:238
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:241
msgid "count log histogram\n"
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:244
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:248
#, c-format
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:250
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:253
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:256
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:272
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:275
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:320
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:322
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:348
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:352
msgid "Could not open stats file for writing."
msgstr ""
@@ -835,17 +709,17 @@ msgstr "`"
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr ""
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
@@ -898,6 +772,9 @@ msgstr ""
#~ msgid "`%s' requires an argument"
#~ msgstr "`%s' bir argüman gerektirir"
#~ msgid " (rule %d)"
#~ msgstr " (kural %d)"
#~ msgid " %-4s\terror (nonassociative)\n"
#~ msgstr " %-4s\thata (birleþmeli deðil)\n"
+6 -6
View File
@@ -62,7 +62,7 @@ state_list_append (symbol_number_t symbol,
state_t *state = state_new (symbol, core_size, core);
if (trace_flag & trace_automaton)
fprintf (stderr, _("state_list_append (state = %d, symbol = %d (%s))\n"),
fprintf (stderr, "state_list_append (state = %d, symbol = %d (%s))\n",
nstates, symbol, symbols[symbol]->tag);
/* If this is the endtoken, and this is not the initial state, then
@@ -180,7 +180,7 @@ new_itemsets (state_t *state)
int i;
if (trace_flag & trace_automaton)
fprintf (stderr, _("Entering new_itemsets, state = %d\n"),
fprintf (stderr, "Entering new_itemsets, state = %d\n",
state->number);
for (i = 0; i < nsyms; i++)
@@ -218,7 +218,7 @@ get_state (symbol_number_t symbol, size_t core_size, item_number_t *core)
state_t *sp;
if (trace_flag & trace_automaton)
fprintf (stderr, _("Entering get_state, symbol = %d (%s)\n"),
fprintf (stderr, "Entering get_state, symbol = %d (%s)\n",
symbol, symbols[symbol]->tag);
sp = state_hash_lookup (core_size, core);
@@ -226,7 +226,7 @@ get_state (symbol_number_t symbol, size_t core_size, item_number_t *core)
sp = state_list_append (symbol, core_size, core);
if (trace_flag & trace_automaton)
fprintf (stderr, _("Exiting get_state => %d\n"), sp->number);
fprintf (stderr, "Exiting get_state => %d\n", sp->number);
return sp;
}
@@ -246,7 +246,7 @@ append_states (state_t *state)
symbol_number_t symbol;
if (trace_flag & trace_automaton)
fprintf (stderr, _("Entering append_states, state = %d\n"),
fprintf (stderr, "Entering append_states, state = %d\n",
state->number);
/* first sort shift_symbol into increasing order */
@@ -354,7 +354,7 @@ generate_states (void)
{
state_t *state = list->state;
if (trace_flag & trace_automaton)
fprintf (stderr, _("Processing state %d (reached by %s)\n"),
fprintf (stderr, "Processing state %d (reached by %s)\n",
state->number,
symbols[state->accessing_symbol]->tag);
/* Set up ruleset and itemset for the transitions out of this
+2 -2
View File
@@ -21,8 +21,8 @@ DEFS = @DEFS@ \
-DPKGDATADIR=\"$(pkgdatadir)\" \
-DLOCALEDIR=\"$(datadir)/locale\"
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS) $(WERROR_CFLAGS)
YFLAGS = "-dv"
AM_CFLAGS = $(WARNING_CFLAGS) $(WERROR_CFLAGS)
AM_YFLAGS = "-dv"
# config.h is in build/.
INCLUDES = -I$(top_builddir) \
+1 -1
View File
@@ -28,7 +28,7 @@ assoc_to_string (assoc_t assoc)
switch (assoc)
{
case undef_assoc:
return _("undefined associativity");
return "undefined associativity";
case right_assoc:
return "%right";
+6 -6
View File
@@ -53,14 +53,14 @@ static void
print_closure (const char *title, item_number_t *array, size_t size)
{
size_t i;
fprintf (stderr, _("Closure: %s\n"), title);
fprintf (stderr, "Closure: %s\n", title);
for (i = 0; i < size; ++i)
{
item_number_t *rp;
fprintf (stderr, " %2d: .", array[i]);
for (rp = &ritem[array[i]]; *rp >= 0; ++rp)
fprintf (stderr, " %s", symbols[*rp]->tag);
fprintf (stderr, _(" (rule %d)\n"), -*rp - 1);
fprintf (stderr, " (rule %d)\n", -*rp - 1);
}
fputs ("\n\n", stderr);
}
@@ -133,10 +133,10 @@ set_firsts (void)
}
if (trace_flag & trace_sets)
bitsetv_matrix_dump (stderr, _("RTC: Firsts Input"), firsts);
bitsetv_matrix_dump (stderr, "RTC: Firsts Input", firsts);
bitsetv_reflexive_transitive_closure (firsts);
if (trace_flag & trace_sets)
bitsetv_matrix_dump (stderr, _("RTC: Firsts Output"), firsts);
bitsetv_matrix_dump (stderr, "RTC: Firsts Output", firsts);
if (trace_flag & trace_sets)
print_firsts ();
@@ -200,7 +200,7 @@ closure (item_number_t *core, int n)
bitset_iterator iter;
if (trace_flag & trace_sets)
print_closure (_("input"), core, n);
print_closure ("input", core, n);
bitset_zero (ruleset);
@@ -231,7 +231,7 @@ closure (item_number_t *core, int n)
}
if (trace_flag & trace_sets)
print_closure (_("output"), itemset, nritemset);
print_closure ("output", itemset, nritemset);
}
-53
View File
@@ -134,59 +134,6 @@ xfclose (FILE *ptr)
return result;
}
/*------------------------------------------------------------------.
| Return the path to the skeleton which locaction might be given in |
| ENVVAR, otherwise return SKELETON_NAME. |
`------------------------------------------------------------------*/
const char *
skeleton_find (const char *envvar, const char *skeleton_name)
{
const char *res = getenv (envvar);
#if defined (MSDOS) || defined (_WIN32)
const char *cp = getenv ("INIT");
if (!res)
{
/* Skeleton file name without path */
const char *skel_name = strrchr (skeleton_name, '/');
if (!skel_name)
skel_name = strrchr (skeleton_name, '\\');
if (!skel_name)
skel_name = skeleton_name;
else
++skel_name;
/* File doesn't exist in current directory; try in INIT directory. */
if (cp)
{
res = XMALLOC (char, strlen (cp) + strlen (skel_name) + 2);
sprintf (res, "%s%c%s", cp, '\\', skel_name);
}
else if (access (skel_name, 4) == 0) /* Look in current dir. */
res = skel_name;
else
{
/* Look in program locations dir. */
extern char *program_name;
cp = strrchr(program_name, '\\');
if (!cp)
return skeleton_name;
else
++cp;
res = XMALLOC (char, cp - program_name + strlen (skel_name) + 1);
strncpy (res, program_name, cp - program_name);
strcpy (res + (cp - program_name), skel_name);
}
}
#endif /* defined (MSDOS) || defined (_WIN32) */
if (!res)
res = skeleton_name;
return res;
}
/*----------------------------------------------------------------.
+1 -4
View File
@@ -1,5 +1,5 @@
/* File names and variables for bison,
Copyright 1984, 1989, 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -57,9 +57,6 @@ void compute_output_file_names PARAMS((void));
FILE *xfopen PARAMS ((const char *name, const char *mode));
int xfclose PARAMS ((FILE *ptr));
const char *skeleton_find PARAMS ((const char *envvar,
const char *skeleton_name));
/* Is SUFFIX ending STRING? */
int strsuffix (const char* string, const char* suffix);
+5 -5
View File
@@ -247,10 +247,10 @@ grammar_dump (FILE *out, const char *title)
ntokens, nvars, nsyms, nrules, nritems);
fprintf (out, _("Variables\n---------\n\n"));
fprintf (out, "Variables\n---------\n\n");
{
symbol_number_t i;
fprintf (out, _("Value Sprec Sassoc Tag\n"));
fprintf (out, "Value Sprec Sassoc Tag\n");
for (i = ntokens; i < nsyms; i++)
fprintf (out, "%5d %5d %5d %s\n",
@@ -260,10 +260,10 @@ grammar_dump (FILE *out, const char *title)
fprintf (out, "\n\n");
}
fprintf (out, _("Rules\n-----\n\n"));
fprintf (out, "Rules\n-----\n\n");
{
rule_number_t i;
fprintf (out, _("Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"));
fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
for (i = 0; i < nrules + nuseless_productions; i++)
{
rule_t *rule = &rules[i];
@@ -289,7 +289,7 @@ grammar_dump (FILE *out, const char *title)
}
fprintf (out, "\n\n");
fprintf (out, _("Rules interpreted\n-----------------\n\n"));
fprintf (out, "Rules interpreted\n-----------------\n\n");
{
rule_number_t r;
for (r = 0; r < nrules + nuseless_productions; r++)
+1 -1
View File
@@ -115,7 +115,7 @@ extern int nvars;
typedef int item_number_t;
# define ITEM_NUMBER_MAX ((item_number_t) INT_MAX)
# define ITEM_NUMBER_MIN ((item_number_t) MIN_MAX)
# define ITEM_NUMBER_MIN ((item_number_t) INT_MIN)
extern item_number_t *ritem;
extern unsigned int nritems;
-126
View File
@@ -1,126 +0,0 @@
/* Grammar reduction for Bison.
Copyright (C) 2002 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. */
/* Reduce the grammar: Look for injections. Akim Demaille. */
#include "system.h"
#include "quotearg.h"
#include "bitsetv.h"
#include "bitsetv-print.h"
#include "complain.h"
#include "gram.h"
#include "getargs.h"
#include "derives.h"
#include "injections.h"
/* Set of all nonterminals which are not useless. */
static bitsetv injects;
#define INJECTS(Var) injects[(Var) - ntokens]
/*-----------------------------------------------------------.
| Free the global sets used to compute the reduced grammar. |
`-----------------------------------------------------------*/
void
injections_new (void)
{
if (!injects)
injects = bitsetv_create (nvars, nvars, BITSET_FIXED);
else
bitsetv_zero (injects);
}
void
injections_free (void)
{
bitsetv_free (injects);
injects = NULL;
}
/*------------------------------.
| Dump the list of injections. |
`------------------------------*/
static void
injections_print (const char *title)
{
int i, j;
fprintf (stderr, "%s\n", title);
for (i = ntokens; i < nsyms; i++)
if (bitset_count (INJECTS (i)))
{
fprintf (stderr, "\t%s injects\n",
quotearg_style (escape_quoting_style, symbols[i]->tag));
for (j = 0; j < nvars; j++)
if (bitset_test (INJECTS (i), j))
fprintf (stderr, "\t\t%s\n",
quotearg_style (escape_quoting_style,
symbols[j + ntokens]->tag));
}
fprintf (stderr, "\n\n");
}
/*-----------------------------------------------------------------.
| Set INJECTS[i, j] if the nonterminal j derives the nonterminal j |
| (typically, `i -> j' is a rule, plus transitive closure). |
`-----------------------------------------------------------------*/
static void
injections_compute (void)
{
int i, j;
injections_new ();
for (i = ntokens; i < nsyms; i++)
for (j = 0; derives[i][j] >= 0; ++j)
{
int symbol = rules[derives[i][j]].rhs[0];
if (ISVAR (symbol) && rules[derives[i][j]].rhs[1] < 0)
bitset_set (INJECTS (i), symbol - ntokens);
}
if (trace_flag & trace_sets)
injections_print (_("syntactic direct injections"));
bitsetv_transitive_closure (injects);
if (trace_flag & trace_sets)
injections_print (_("syntactic injections"));
}
/*--------------------------------------------------------------.
| Look for infinitely ambiguous grammars: they contain cycles. |
`--------------------------------------------------------------*/
void
injections_check_cycles (void)
{
int i;
injections_compute ();
for (i = ntokens; i < nsyms; i++)
if (bitset_test (INJECTS (i), i - ntokens))
complain (_("infinitely ambiguous grammar: %s derives itself"),
symbols[i]->tag);
}
+4 -4
View File
@@ -403,7 +403,7 @@ lookaheads_print (FILE *out)
{
state_number_t i;
int j, k;
fprintf (out, _("Lookaheads: BEGIN\n"));
fprintf (out, "Lookaheads: BEGIN\n");
for (i = 0; i < nstates; ++i)
{
reductions_t *reds = states[i]->reductions;
@@ -415,19 +415,19 @@ lookaheads_print (FILE *out)
if (reds->lookaheads[k])
++nlookaheads;
fprintf (out, _("State %d: %d lookaheads\n"),
fprintf (out, "State %d: %d lookaheads\n",
i, nlookaheads);
if (reds->lookaheads)
for (j = 0; j < reds->num; ++j)
BITSET_FOR_EACH (iter, reds->lookaheads[j], k, 0)
{
fprintf (out, _(" on %d (%s) -> rule %d\n"),
fprintf (out, " on %d (%s) -> rule %d\n",
k, symbols[k]->tag,
reds->rules[j]->number);
};
}
fprintf (out, _("Lookaheads: END\n"));
fprintf (out, "Lookaheads: END\n");
}
void
+1 -1
View File
@@ -55,7 +55,7 @@ void lalr_free PARAMS ((void));
TO_STATE of the first of them. */
typedef short goto_number_t;
# define GOTO_NUMBER_MAX ((goto_number_t) INT_MAX)
# define GOTO_NUMBER_MAX ((goto_number_t) SHRT_MAX)
extern goto_number_t *goto_map;
extern state_number_t *from_state;
+13 -13
View File
@@ -503,19 +503,19 @@ prepare_actions (void)
muscle_insert_base_table ("check", check,
check[0], 1, high + 1);
if (glr_parser)
{
/* GLR parsing slightly modifies yytable and yycheck
(and thus yypact) so that in states with unresolved conflicts,
the default reduction is not used in the conflicted entries, so
that there is a place to put a conflict pointer. This means that
yyconflp and yyconfl are nonsense for a non-GLR parser, so we
avoid accidents by not writing them out in that case. */
muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table,
conflict_table[0], 1, high+1);
muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list,
conflict_list[0], 1, conflict_list_cnt);
}
/* GLR parsing slightly modifies YYTABLE and YYCHECK (and thus
YYPACT) so that in states with unresolved conflicts, the default
reduction is not used in the conflicted entries, so that there is
a place to put a conflict pointer.
This means that YYCONFLP and YYCONFL are nonsense for a non-GLR
parser, so we could avoid accidents by not writing them out in
that case. Nevertheless, it seems even better to be able to use
the GLR skeletons even without the non-deterministic tables. */
muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table,
conflict_table[0], 1, high+1);
muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list,
conflict_list[0], 1, conflict_list_cnt);
}
+88 -86
View File
@@ -1,4 +1,4 @@
/* A Bison parser, made from parse-gram.y, by GNU bison 1.49b. */
/* A Bison parser, made from parse-gram.y, by GNU bison 1.49c. */
/* Skeleton parser for Yacc-like parsing with Bison,
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
@@ -233,7 +233,7 @@ typedef union {
char *string;
assoc_t assoc;
} yystype;
/* Line 188 of /tmp/prefix/share/bison/yacc.c. */
/* Line 188 of /usr/local/share/bison/yacc.c. */
#line 238 "parse-gram.c"
# define YYSTYPE yystype
# define YYSTYPE_IS_TRIVIAL 1
@@ -254,7 +254,7 @@ typedef struct yyltype
/* Copy the second part of user declarations. */
/* Line 208 of /tmp/prefix/share/bison/yacc.c. */
/* Line 208 of /usr/local/share/bison/yacc.c. */
#line 259 "parse-gram.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
@@ -444,14 +444,14 @@ static const signed char yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short yyrline[] =
{
0, 159, 159, 172, 174, 177, 179, 180, 181, 182,
183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
193, 194, 195, 198, 200, 201, 205, 212, 211, 222,
221, 234, 233, 239, 239, 244, 253, 268, 270, 271,
274, 276, 281, 283, 287, 292, 297, 303, 309, 319,
322, 331, 333, 339, 341, 346, 353, 352, 357, 359,
362, 365, 367, 369, 371, 373, 377, 379, 380, 383,
389, 398, 406, 411, 417, 419
0, 162, 162, 175, 177, 180, 182, 183, 184, 185,
186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
196, 197, 198, 201, 203, 204, 208, 215, 214, 225,
224, 237, 236, 242, 242, 247, 256, 271, 273, 274,
277, 279, 284, 286, 290, 295, 300, 306, 312, 322,
325, 334, 336, 342, 344, 349, 356, 355, 360, 362,
365, 368, 370, 372, 374, 376, 380, 382, 383, 386,
392, 401, 409, 414, 420, 422
};
#endif
@@ -460,16 +460,16 @@ static const unsigned short yyrline[] =
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
"\"end of string\"", "error", "$undefined", "STRING", "CHARACTER", "INT",
"\"%token\"", "\"%nterm\"", "\"%type\"", "\"%destructor\"",
"\"%printer\"", "\"%union\"", "\"%left\"", "\"%right\"",
"\"%nonassoc\"", "\"%expect\"", "\"%start\"", "\"%prec\"", "\"%dprec\"",
"\"%merge\"", "\"%verbose\"", "\"%error-verbose\"", "\"%output\"",
"\"%file-prefix\"", "\"%name-prefix\"", "\"%define\"",
"\"end of file\"", "error", "$undefined", "\"string\"", "\"character\"",
"\"integer\"", "\"%token\"", "\"%nterm\"", "\"%type\"",
"\"%destructor\"", "\"%printer\"", "\"%union\"", "\"%left\"",
"\"%right\"", "\"%nonassoc\"", "\"%expect\"", "\"%start\"", "\"%prec\"",
"\"%dprec\"", "\"%merge\"", "\"%verbose\"", "\"%error-verbose\"",
"\"%output\"", "\"%file-prefix\"", "\"%name-prefix\"", "\"%define\"",
"\"%pure-parser\"", "\"%glr-parser\"", "\"%defines\"", "\"%yacc\"",
"\"%debug\"", "\"%locations\"", "\"%no-lines\"", "\"%skeleton\"",
"\"%token-table\"", "TYPE", "\"=\"", "\";\"", "\":\"", "\"|\"",
"\"identifier\"", "\"%%\"", "PROLOGUE", "EPILOGUE", "BRACED_CODE",
"\"%token-table\"", "\"type\"", "\"=\"", "\";\"", "\":\"", "\"|\"",
"\"identifier\"", "\"%%\"", "\"%{...%}\"", "\"epilogue\"", "\"{...}\"",
"$accept", "input", "declarations", "declaration",
"grammar_declaration", "@1", "@2", "symbol_declaration", "@3", "@4",
"precedence_declaration", "precedence_declarator", "type.opt",
@@ -480,6 +480,7 @@ static const char *const yytname[] =
};
#endif
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
static const unsigned short yytoknum[] =
@@ -490,6 +491,7 @@ static const unsigned short yytoknum[] =
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
295, 296, 297, 298, 299
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const unsigned char yyr1[] =
@@ -1267,7 +1269,7 @@ yyreduce:
switch (yyn)
{
case 2:
#line 161 "parse-gram.y"
#line 164 "parse-gram.y"
{
yycontrol->errcode = 0;
epilogue_set (yyvsp[0].string, yylsp[0]);
@@ -1275,99 +1277,99 @@ yyreduce:
break;
case 6:
#line 179 "parse-gram.y"
#line 182 "parse-gram.y"
{ prologue_augment (yyvsp[0].string, yylsp[0]); }
break;
case 7:
#line 180 "parse-gram.y"
#line 183 "parse-gram.y"
{ debug_flag = 1; }
break;
case 8:
#line 181 "parse-gram.y"
#line 184 "parse-gram.y"
{ muscle_insert (yyvsp[-1].string, yyvsp[0].string); }
break;
case 9:
#line 182 "parse-gram.y"
#line 185 "parse-gram.y"
{ defines_flag = 1; }
break;
case 10:
#line 183 "parse-gram.y"
#line 186 "parse-gram.y"
{ error_verbose = 1; }
break;
case 11:
#line 184 "parse-gram.y"
#line 187 "parse-gram.y"
{ expected_conflicts = yyvsp[0].integer; }
break;
case 12:
#line 185 "parse-gram.y"
#line 188 "parse-gram.y"
{ spec_file_prefix = yyvsp[0].string; }
break;
case 13:
#line 186 "parse-gram.y"
#line 189 "parse-gram.y"
{ locations_flag = 1; }
break;
case 14:
#line 187 "parse-gram.y"
#line 190 "parse-gram.y"
{ spec_name_prefix = yyvsp[0].string; }
break;
case 15:
#line 188 "parse-gram.y"
#line 191 "parse-gram.y"
{ no_lines_flag = 1; }
break;
case 16:
#line 189 "parse-gram.y"
#line 192 "parse-gram.y"
{ spec_outfile = yyvsp[0].string; }
break;
case 17:
#line 190 "parse-gram.y"
#line 193 "parse-gram.y"
{ pure_parser = 1; }
break;
case 18:
#line 191 "parse-gram.y"
#line 194 "parse-gram.y"
{ glr_parser = 1; }
break;
case 19:
#line 192 "parse-gram.y"
#line 195 "parse-gram.y"
{ skeleton = yyvsp[0].string; }
break;
case 20:
#line 193 "parse-gram.y"
#line 196 "parse-gram.y"
{ token_table_flag = 1; }
break;
case 21:
#line 194 "parse-gram.y"
#line 197 "parse-gram.y"
{ report_flag = 1; }
break;
case 22:
#line 195 "parse-gram.y"
#line 198 "parse-gram.y"
{ yacc_flag = 1; }
break;
case 25:
#line 202 "parse-gram.y"
#line 205 "parse-gram.y"
{
grammar_start_symbol_set (yyvsp[0].symbol, yylsp[0]);
}
break;
case 26:
#line 206 "parse-gram.y"
#line 209 "parse-gram.y"
{
typed = 1;
MUSCLE_INSERT_INT ("stype_line", yylsp[0].first_line);
@@ -1376,12 +1378,12 @@ yyreduce:
break;
case 27:
#line 212 "parse-gram.y"
#line 215 "parse-gram.y"
{ current_braced_code = destructor_braced_code; }
break;
case 28:
#line 214 "parse-gram.y"
#line 217 "parse-gram.y"
{
symbol_list_t *list;
for (list = yyvsp[0].list; list; list = list->next)
@@ -1392,12 +1394,12 @@ yyreduce:
break;
case 29:
#line 222 "parse-gram.y"
#line 225 "parse-gram.y"
{ current_braced_code = printer_braced_code; }
break;
case 30:
#line 224 "parse-gram.y"
#line 227 "parse-gram.y"
{
symbol_list_t *list;
for (list = yyvsp[0].list; list; list = list->next)
@@ -1408,12 +1410,12 @@ yyreduce:
break;
case 31:
#line 234 "parse-gram.y"
#line 237 "parse-gram.y"
{ current_class = nterm_sym; }
break;
case 32:
#line 235 "parse-gram.y"
#line 238 "parse-gram.y"
{
current_class = unknown_sym;
current_type = NULL;
@@ -1421,12 +1423,12 @@ yyreduce:
break;
case 33:
#line 239 "parse-gram.y"
#line 242 "parse-gram.y"
{ current_class = token_sym; }
break;
case 34:
#line 240 "parse-gram.y"
#line 243 "parse-gram.y"
{
current_class = unknown_sym;
current_type = NULL;
@@ -1434,7 +1436,7 @@ yyreduce:
break;
case 35:
#line 245 "parse-gram.y"
#line 248 "parse-gram.y"
{
symbol_list_t *list;
for (list = yyvsp[0].list; list; list = list->next)
@@ -1444,7 +1446,7 @@ yyreduce:
break;
case 36:
#line 255 "parse-gram.y"
#line 258 "parse-gram.y"
{
symbol_list_t *list;
++current_prec;
@@ -1459,49 +1461,49 @@ yyreduce:
break;
case 37:
#line 269 "parse-gram.y"
#line 272 "parse-gram.y"
{ yyval.assoc = left_assoc; }
break;
case 38:
#line 270 "parse-gram.y"
#line 273 "parse-gram.y"
{ yyval.assoc = right_assoc; }
break;
case 39:
#line 271 "parse-gram.y"
#line 274 "parse-gram.y"
{ yyval.assoc = non_assoc; }
break;
case 40:
#line 275 "parse-gram.y"
#line 278 "parse-gram.y"
{ current_type = NULL;}
break;
case 41:
#line 276 "parse-gram.y"
#line 279 "parse-gram.y"
{ current_type = yyvsp[0].string; }
break;
case 42:
#line 282 "parse-gram.y"
#line 285 "parse-gram.y"
{ yyval.list = symbol_list_new (yyvsp[0].symbol, yylsp[0]); }
break;
case 43:
#line 283 "parse-gram.y"
#line 286 "parse-gram.y"
{ yyval.list = symbol_list_prepend (yyvsp[-1].list, yyvsp[0].symbol, yylsp[0]); }
break;
case 44:
#line 289 "parse-gram.y"
#line 292 "parse-gram.y"
{
current_type = yyvsp[0].string;
}
break;
case 45:
#line 293 "parse-gram.y"
#line 296 "parse-gram.y"
{
symbol_class_set (yyvsp[0].symbol, current_class, yylsp[0]);
symbol_type_set (yyvsp[0].symbol, current_type, yylsp[0]);
@@ -1509,7 +1511,7 @@ yyreduce:
break;
case 46:
#line 298 "parse-gram.y"
#line 301 "parse-gram.y"
{
symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
@@ -1518,7 +1520,7 @@ yyreduce:
break;
case 47:
#line 304 "parse-gram.y"
#line 307 "parse-gram.y"
{
symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
@@ -1527,7 +1529,7 @@ yyreduce:
break;
case 48:
#line 310 "parse-gram.y"
#line 313 "parse-gram.y"
{
symbol_class_set (yyvsp[-2].symbol, current_class, yylsp[-2]);
symbol_type_set (yyvsp[-2].symbol, current_type, yylsp[-2]);
@@ -1537,17 +1539,17 @@ yyreduce:
break;
case 49:
#line 321 "parse-gram.y"
#line 324 "parse-gram.y"
{;}
break;
case 50:
#line 323 "parse-gram.y"
#line 326 "parse-gram.y"
{;}
break;
case 54:
#line 342 "parse-gram.y"
#line 345 "parse-gram.y"
{
if (yacc_flag)
complain_at (yyloc, _("POSIX forbids declarations in the grammar"));
@@ -1555,84 +1557,84 @@ yyreduce:
break;
case 55:
#line 347 "parse-gram.y"
#line 350 "parse-gram.y"
{
yyerrok;
}
break;
case 56:
#line 353 "parse-gram.y"
#line 356 "parse-gram.y"
{ current_lhs = yyvsp[-1].symbol; current_lhs_location = yylsp[-1]; }
break;
case 57:
#line 354 "parse-gram.y"
#line 357 "parse-gram.y"
{;}
break;
case 58:
#line 358 "parse-gram.y"
#line 361 "parse-gram.y"
{ grammar_rule_end (yylsp[0]); }
break;
case 59:
#line 359 "parse-gram.y"
#line 362 "parse-gram.y"
{ grammar_rule_end (yylsp[0]); }
break;
case 60:
#line 364 "parse-gram.y"
#line 367 "parse-gram.y"
{ grammar_rule_begin (current_lhs, current_lhs_location); }
break;
case 61:
#line 366 "parse-gram.y"
#line 369 "parse-gram.y"
{ grammar_current_rule_symbol_append (yyvsp[0].symbol, yylsp[0]); }
break;
case 62:
#line 368 "parse-gram.y"
#line 371 "parse-gram.y"
{ grammar_current_rule_action_append (yyvsp[0].string, yylsp[0]); }
break;
case 63:
#line 370 "parse-gram.y"
#line 373 "parse-gram.y"
{ grammar_current_rule_prec_set (yyvsp[0].symbol, yylsp[0]); }
break;
case 64:
#line 372 "parse-gram.y"
#line 375 "parse-gram.y"
{ grammar_current_rule_dprec_set (yyvsp[0].integer, yylsp[0]); }
break;
case 65:
#line 374 "parse-gram.y"
#line 377 "parse-gram.y"
{ grammar_current_rule_merge_set (yyvsp[0].string, yylsp[0]); }
break;
case 66:
#line 378 "parse-gram.y"
#line 381 "parse-gram.y"
{ yyval.symbol = yyvsp[0].symbol; }
break;
case 67:
#line 379 "parse-gram.y"
#line 382 "parse-gram.y"
{ yyval.symbol = yyvsp[0].symbol; }
break;
case 68:
#line 380 "parse-gram.y"
#line 383 "parse-gram.y"
{ yyval.symbol = symbol_get (yyvsp[0].string, yylsp[0]); }
break;
case 69:
#line 385 "parse-gram.y"
#line 388 "parse-gram.y"
{ yyval.string = yyvsp[0].string; }
break;
case 70:
#line 391 "parse-gram.y"
#line 394 "parse-gram.y"
{
yyval.symbol = symbol_get (yyvsp[0].string, yylsp[0]);
symbol_class_set (yyval.symbol, token_sym, yylsp[0]);
@@ -1640,7 +1642,7 @@ yyreduce:
break;
case 71:
#line 400 "parse-gram.y"
#line 403 "parse-gram.y"
{
yyval.string = yyvsp[0].string + 1;
yyval.string[strlen (yyval.string) - 1] = '\0';
@@ -1648,14 +1650,14 @@ yyreduce:
break;
case 72:
#line 408 "parse-gram.y"
#line 411 "parse-gram.y"
{
yyval.string = xstrdup ("");
}
break;
case 73:
#line 412 "parse-gram.y"
#line 415 "parse-gram.y"
{
yyval.string = yyvsp[0].string;
}
@@ -1664,8 +1666,8 @@ yyreduce:
}
/* Line 1079 of /tmp/prefix/share/bison/yacc.c. */
#line 1669 "parse-gram.c"
/* Line 1081 of /usr/local/share/bison/yacc.c. */
#line 1671 "parse-gram.c"
yyvsp -= yylen;
yyssp -= yylen;
@@ -1837,7 +1839,7 @@ yyreturn:
}
#line 421 "parse-gram.y"
#line 424 "parse-gram.y"
/*------------------------------------------------------------------.
| When debugging the parser, display tokens' locations and values. |
+2 -2
View File
@@ -1,4 +1,4 @@
/* A Bison parser, made from parse-gram.y, by GNU bison 1.49b. */
/* A Bison parser, made from parse-gram.y, by GNU bison 1.49c. */
/* Skeleton parser for Yacc-like parsing with Bison,
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
@@ -136,7 +136,7 @@ typedef union {
char *string;
assoc_t assoc;
} yystype;
/* Line 1292 of /tmp/prefix/share/bison/yacc.c. */
/* Line 1294 of /usr/local/share/bison/yacc.c. */
#line 141 "y.tab.h"
# define YYSTYPE yystype
#endif
+27 -24
View File
@@ -95,9 +95,10 @@ braced_code_t current_braced_code = action_braced_code;
};
/* Define the tokens together with their human representation. */
%token GRAM_EOF 0 "end of string"
%token STRING CHARACTER
%token INT
%token GRAM_EOF 0 "end of file"
%token STRING "string"
%token CHARACTER "character"
%token INT "integer"
%token PERCENT_TOKEN "%token"
%token PERCENT_NTERM "%nterm"
@@ -112,41 +113,43 @@ braced_code_t current_braced_code = action_braced_code;
%token PERCENT_RIGHT "%right"
%token PERCENT_NONASSOC "%nonassoc"
%token PERCENT_EXPECT "%expect"
%token PERCENT_START "%start"
%token PERCENT_PREC "%prec"
%token PERCENT_DPREC "%dprec"
%token PERCENT_MERGE "%merge"
%token PERCENT_VERBOSE "%verbose"
%token PERCENT_EXPECT "%expect"
%token PERCENT_START "%start"
%token PERCENT_PREC "%prec"
%token PERCENT_DPREC "%dprec"
%token PERCENT_MERGE "%merge"
%token PERCENT_VERBOSE "%verbose"
%token PERCENT_ERROR_VERBOSE "%error-verbose"
%token PERCENT_OUTPUT "%output"
%token PERCENT_OUTPUT "%output"
%token PERCENT_FILE_PREFIX "%file-prefix"
%token PERCENT_NAME_PREFIX "%name-prefix"
%token PERCENT_DEFINE "%define"
%token PERCENT_DEFINE "%define"
%token PERCENT_PURE_PARSER "%pure-parser"
%token PERCENT_GLR_PARSER "%glr-parser"
%token PERCENT_GLR_PARSER "%glr-parser"
%token PERCENT_DEFINES "%defines"
%token PERCENT_YACC "%yacc"
%token PERCENT_DEBUG "%debug"
%token PERCENT_LOCATIONS "%locations"
%token PERCENT_NO_LINES "%no-lines"
%token PERCENT_SKELETON "%skeleton"
%token PERCENT_DEBUG "%debug"
%token PERCENT_LOCATIONS "%locations"
%token PERCENT_NO_LINES "%no-lines"
%token PERCENT_SKELETON "%skeleton"
%token PERCENT_TOKEN_TABLE "%token-table"
%token TYPE
%token EQUAL "="
%token SEMICOLON ";"
%token COLON ":"
%token PIPE "|"
%token ID "identifier"
%token TYPE "type"
%token EQUAL "="
%token SEMICOLON ";"
%token COLON ":"
%token PIPE "|"
%token ID "identifier"
%token PERCENT_PERCENT "%%"
%token PROLOGUE EPILOGUE
%token BRACED_CODE
%token PROLOGUE "%{...%}"
%token EPILOGUE "epilogue"
%token BRACED_CODE "{...}"
%type <string> CHARACTER TYPE STRING string_content
BRACED_CODE PROLOGUE EPILOGUE epilogue.opt action
+4 -1
View File
@@ -422,7 +422,10 @@ print_state (FILE *out, state_t *state)
print_actions (out, state);
if ((report_flag & report_solved_conflicts)
&& state->solved_conflicts)
fputs (state->solved_conflicts, out);
{
fputc ('\n', out);
fputs (state->solved_conflicts, out);
}
}
/*-----------------------------------------.
+14 -13
View File
@@ -132,8 +132,8 @@ get_merge_function (const char* name, const char* type,
if (syms->next == NULL)
{
syms->next = XMALLOC (merger_list, 1);
syms->next->name = strdup (name);
syms->next->type = strdup (type);
syms->next->name = xstrdup (name);
syms->next->type = xstrdup (type);
syms->next->next = NULL;
merge_functions = head.next;
}
@@ -246,18 +246,22 @@ static void
grammar_current_rule_check (void)
{
symbol_t *lhs = current_rule->sym;
char const *lhs_type = lhs->type_name;
symbol_t *first_rhs = current_rule->next->sym;
/* If there is an action, then there is nothing we can do: the user
is allowed to shoot in her foot. */
is allowed to shoot herself in the foot. */
if (current_rule->action)
return;
/* If $$ is being set in default way, report if any type mismatch.
*/
/* Don't worry about the default action if $$ is untyped, since $$'s
value can't be used. */
if (! lhs_type)
return;
/* If $$ is being set in default way, report if any type mismatch. */
if (first_rhs)
{
const char *lhs_type = lhs->type_name ? lhs->type_name : "";
const char *rhs_type = first_rhs->type_name ? first_rhs->type_name : "";
if (strcmp (lhs_type, rhs_type))
complain_at (current_rule->location,
@@ -266,11 +270,8 @@ grammar_current_rule_check (void)
}
/* Warn if there is no default for $$ but we need one. */
else
{
if (lhs->type_name)
complain_at (current_rule->location,
_("empty rule for typed nonterminal, and no action"));
}
complain_at (current_rule->location,
_("empty rule for typed nonterminal, and no action"));
}
@@ -541,9 +542,9 @@ reader (void)
grammar = p;
}
if (nsyms > SHRT_MAX)
if (SYMBOL_NUMBER_MAX < nsyms)
fatal (_("too many symbols (tokens plus nonterminals); maximum %d"),
SHRT_MAX);
SYMBOL_NUMBER_MAX);
assert (nsyms == ntokens + nvars);
+2 -2
View File
@@ -134,7 +134,7 @@ relation_transpose (relation_t *R_arg, int n)
if (trace_flag & trace_sets)
{
fputs (_("relation_transpose: input\n"), stderr);
fputs ("relation_transpose: input\n", stderr);
relation_print (*R_arg, n, stderr);
}
@@ -173,7 +173,7 @@ relation_transpose (relation_t *R_arg, int n)
if (trace_flag & trace_sets)
{
fputs (_("relation_transpose: output\n"), stderr);
fputs ("relation_transpose: output\n", stderr);
relation_print (new_R, n, stderr);
}
+270 -247
View File
File diff suppressed because it is too large Load Diff
+16 -14
View File
@@ -79,6 +79,14 @@ scanner_last_string_free (void)
static int braces_level = 0;
static int percent_percent_count = 0;
/* Within well-formed rules, RULE_LENGTH is the number of values in
the current rule so far, which says where to find `$0' with respect
to the top of the stack. It is not the same as the rule->length in
the case of mid rule actions.
Outside of well-formed rules, RULE_LENGTH has an undefined value. */
static int rule_length;
static void handle_dollar PARAMS ((braced_code_t code_kind,
char *cp, location_t location));
static void handle_at PARAMS ((braced_code_t code_kind,
@@ -138,7 +146,7 @@ blanks [ \t\f]+
"%nonassoc" return PERCENT_NONASSOC;
"%nterm" return PERCENT_NTERM;
"%output" return PERCENT_OUTPUT;
"%prec" return PERCENT_PREC;
"%prec" { rule_length--; return PERCENT_PREC; }
"%printer" return PERCENT_PRINTER;
"%pure"[-_]"parser" return PERCENT_PURE_PARSER;
"%right" return PERCENT_RIGHT;
@@ -153,14 +161,15 @@ blanks [ \t\f]+
"%yacc" return PERCENT_YACC;
"=" return EQUAL;
":" return COLON;
"|" return PIPE;
":" { rule_length = 0; return COLON; }
"|" { rule_length = 0; return PIPE; }
";" return SEMICOLON;
{eols} YY_LINES; YY_STEP;
{blanks} YY_STEP;
{id} {
yylval->symbol = symbol_get (yytext, *yylloc);
rule_length++;
return ID;
}
@@ -262,6 +271,7 @@ blanks [ \t\f]+
YY_OBS_FINISH;
yylval->string = last_string;
yy_pop_state ();
rule_length++;
return STRING;
}
@@ -298,6 +308,7 @@ blanks [ \t\f]+
(unsigned char) last_string[1], *yylloc);
YY_OBS_FREE;
yy_pop_state ();
rule_length++;
return ID;
}
}
@@ -347,7 +358,7 @@ blanks [ \t\f]+
\\r obstack_1grow (&string_obstack, '\r');
\\t obstack_1grow (&string_obstack, '\t');
\\v obstack_1grow (&string_obstack, '\v');
\\[\\""] obstack_1grow (&string_obstack, yytext[1]);
\\[\\""''] obstack_1grow (&string_obstack, yytext[1]);
\\(.|\n) {
LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, _(": unrecognized escape: %s\n"), quote (yytext));
@@ -451,6 +462,7 @@ blanks [ \t\f]+
yy_pop_state ();
YY_OBS_FINISH;
yylval->string = last_string;
rule_length++;
return BRACED_CODE;
}
}
@@ -566,11 +578,6 @@ handle_action_dollar (char *text, location_t location)
}
else if (('0' <= *cp && *cp <= '9') || *cp == '-')
{
/* RULE_LENGTH is the number of values in the current rule so
far, which says where to find `$0' with respect to the top of
the stack. It is not the same as the rule->length in the
case of mid rule actions. */
int rule_length = symbol_list_length (current_rule->next);
int n = strtol (cp, &cp, 10);
if (n > rule_length)
@@ -653,11 +660,6 @@ handle_action_at (char *text, location_t location)
}
else if (('0' <= *cp && *cp <= '9') || *cp == '-')
{
/* RULE_LENGTH is the number of values in the current rule so
far, which says where to find `$0' with respect to the top of
the stack. It is not the same as the rule->length in the
case of mid rule actions. */
int rule_length = symbol_list_length (current_rule->next);
int n = strtol (cp, &cp, 10);
if (n > rule_length)
+1
View File
@@ -40,6 +40,7 @@ typedef enum
/* Internal token numbers. */
typedef short symbol_number_t;
#define SYMBOL_NUMBER_MAX ((symbol_number_t) SHRT_MAX)
typedef struct symbol_s symbol_t;
+11 -18
View File
@@ -207,13 +207,12 @@ table_grow (size_t desired)
table_size *= 2;
if (trace_flag & trace_resource)
fprintf (stderr, _("growing table and check from: %lu to %lu\n"),
(unsigned long) old_size, (unsigned long) table_size);
fprintf (stderr, "growing table and check from: %d to %d\n",
old_size, table_size);
table = XREALLOC (table, base_t, table_size);
check = XREALLOC (check, base_t, table_size);
if (glr_parser)
conflict_table = XREALLOC (conflict_table, unsigned int, table_size);
conflict_table = XREALLOC (conflict_table, unsigned int, table_size);
for (/* Nothing. */; old_size < table_size; ++old_size)
{
@@ -470,27 +469,22 @@ token_actions (void)
symbol_number_t j;
rule_number_t r;
int nconflict = conflicts_total_count ();
int nconflict = glr_parser ? conflicts_total_count () : 0;
yydefact = XCALLOC (rule_number_t, nstates);
actrow = XCALLOC (action_t, ntokens);
conflrow = XCALLOC (unsigned int, ntokens);
conflict_list = XCALLOC (unsigned int, 1 + 2 * nconflict);
conflict_list_free = 2 * nconflict;
conflict_list_cnt = 1;
/* Find the rules which are reduced. */
if (!glr_parser)
for (r = 0; r < nrules; ++r)
rules[r].useful = FALSE;
if (glr_parser)
{
conflict_list = XCALLOC (unsigned int, 1 + 2 * nconflict);
conflict_list_free = 2 * nconflict;
conflict_list_cnt = 1;
}
else
conflict_list_free = conflict_list_cnt = 0;
for (i = 0; i < nstates; ++i)
{
rule_t *default_rule = action_row (states[i]);
@@ -754,7 +748,7 @@ pack_vector (vector_number_t vector)
high = loc;
if (j < BASE_MIN || BASE_MAX < j)
fatal (_("base_t too small to hold %d\n"), j);
fatal ("base_t too small to hold %d\n", j);
return j;
}
}
@@ -780,7 +774,7 @@ table_ninf_remap (base_t tab[], size_t size, base_t ninf)
for (i = 0; i < size; i++)
if (tab[i] < res && tab[i] != ninf)
res = base[i];
res = tab[i];
--res;
@@ -799,8 +793,7 @@ pack_table (void)
base = XCALLOC (base_t, nvectors);
pos = XCALLOC (base_t, nentries);
table = XCALLOC (base_t, table_size);
if (glr_parser)
conflict_table = XCALLOC (unsigned int, table_size);
conflict_table = XCALLOC (unsigned int, table_size);
check = XCALLOC (base_t, table_size);
lowzero = 0;
+25 -1
View File
@@ -27,7 +27,7 @@ MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
## package.m4. ##
## ------------ ##
$(srcdir)/package.m4: $(top_srcdir)/configure.in
$(srcdir)/package.m4: $(top_srcdir)/configure.ac
{ \
echo '# Signature of the current package.'; \
echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \
@@ -71,3 +71,27 @@ check_SCRIPTS = bison
# Run the test suite on the *installed* tree.
installcheck-local:
$(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin
# Be real mean with it.
.PHONY: maintainer-check-g++
maintainer-check-g++: $(TESTSUITE)
if test -n "$(VALGRIND)"; then \
$(TESTSUITE) CC='$(GXX)'; \
else \
true; \
fi
.PHONY: maintainer-check-posix
maintainer-check-posix: $(TESTSUITE)
$(TESTSUITE) POSIXLY_CORRECT=1
.PHONY: maintainer-check-valgrind
maintainer-check-valgrind: $(TESTSUITE)
if test -n "$(VALGRIND)"; then \
$(TESTSUITE) PREBISON='$(VALGRIND) -q' PREPARSER='$(VALGRIND) -q'; \
else \
true; \
fi
.PHONY: maintainer-check
maintainer-check: maintainer-check-posix maintainer-check-valgrind maintainer-check-g++
+6 -6
View File
@@ -72,7 +72,7 @@ main (void)
}
]])
AT_CHECK([bison input.y -d -v -o input.c])
AT_CHECK([bison -d -v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 0,
[[0123456789
@@ -103,18 +103,18 @@ AT_DATA([[input.y]],
int val;
};
%type <val> a_1 a_2 a_4 a_5
%type <val> a_1 a_2 a_5
sum_of_the_five_previous_values
%%
exp: a_1 a_2 { $<val>$ = 3; } a_4 a_5 sum_of_the_five_previous_values
exp: a_1 a_2 { $<val>$ = 3; } { $<val>$ = $<val>3 + 1; } a_5
sum_of_the_five_previous_values
{
printf ("%d\n", $6);
}
;
a_1: { $$ = 1; };
a_2: { $$ = 2; };
a_4: { $$ = 4; };
a_5: { $$ = 5; };
sum_of_the_five_previous_values:
@@ -143,7 +143,7 @@ main (void)
}
]])
AT_CHECK([bison input.y -d -v -o input.c])
AT_CHECK([bison -d -v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 0,
[[15
@@ -295,7 +295,7 @@ main (void)
}
]])
AT_CHECK([bison input.y --location -d -v -o input.c])
AT_CHECK([bison --location -d -v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 1,
[[sending: 'x' (value = 0, line 0)
+4 -2
View File
@@ -1,10 +1,12 @@
# @configure_input@ -*- shell-script -*-
# Configurable variable values for Bison test suite.
# Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
# We need a C compiler.
CC='@CC@'
CFLAGS='@CFLAGS@ @WARNING_CFLAGS@ @WERROR_CFLAGS@'
# We want no optimization.
CFLAGS='@O0CFLAGS@ @WARNING_CFLAGS@ @WERROR_CFLAGS@'
# We need `config.h'.
CPPFLAGS="-I$abs_top_builddir @CPPFLAGS@"
+1 -1
View File
@@ -5,4 +5,4 @@
# We want to use the files shipped with Bison.
BISON_PKGDATADIR='@abs_top_srcdir@/data'
export BISON_PKGDATADIR
exec '@abs_top_builddir@/src/bison' ${1+"$@"}
exec $PREBISON '@abs_top_builddir@/src/bison' ${1+"$@"}
+81 -35
View File
@@ -16,8 +16,6 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
AT_BANNER([[Simple Calculator.]])
## ---------------------------------------------------- ##
## Compile the grammar described in the documentation. ##
## ---------------------------------------------------- ##
@@ -275,8 +273,8 @@ main (int argc, const char **argv)
# Produce `calc.y'.
m4_define([AT_DATA_CALC_Y],
[_AT_DATA_CALC_Y($[1], $[2], $[3],
[m4_bmatch([$1], [--yyerror-verbose],
[[%error-verbose]])])])
[m4_bpatsubst([$1], [--[^ ]*])])
])
@@ -284,17 +282,22 @@ m4_define([AT_DATA_CALC_Y],
# ------------------------------------------------------------
# Run `calc' on INPUT and expect no STDOUT nor STDERR.
#
# If BISON-OPTIONS contains `--debug', then NUM-STDERR-LINES is the number
# of expected lines on stderr.
# If BISON-OPTIONS contains `%debug' but not `%glr-parser', then
# NUM-STDERR-LINES is the number of expected lines on stderr.
#
# We don't count GLR's traces yet, since its traces are somewhat
# different from LALR's.
m4_define([_AT_CHECK_CALC],
[AT_DATA([[input]],
[[$2
]])
AT_PARSER_CHECK([./calc input], 0, [], [stderr])dnl
AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0,
[m4_bmatch([$1], [--debug],
[$3], [0])
])
AT_PARSER_CHECK([./calc input], 0, [], [stderr])
m4_bmatch([$1],
[%debug.*%glr\|%glr.*%debug],
[],
[%debug],
[AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0, [$3
])])
])
@@ -309,12 +312,12 @@ AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0,
# If BISON-OPTIONS contains `--location', then make sure the ERROR-LOCATION
# is correctly output on stderr.
#
# If BISON-OPTIONS contains `--yyerror-verbose', then make sure the
# If BISON-OPTIONS contains `%error-verbose', then make sure the
# IF-YYERROR-VERBOSE message is properly output after `parse error, '
# on STDERR.
#
# If BISON-OPTIONS contains `--debug', then NUM-STDERR-LINES is the number
# of expected lines on stderr.
# If BISON-OPTIONS contains `%debug' but not `%glr', then NUM-STDERR-LINES
# is the number of expected lines on stderr.
m4_define([_AT_CHECK_CALC_ERROR],
[m4_bmatch([$2], [^/],
[AT_PARSER_CHECK([./calc $2], 0, [], [stderr])],
@@ -322,9 +325,11 @@ m4_define([_AT_CHECK_CALC_ERROR],
[[$2
]])
AT_PARSER_CHECK([./calc input], 0, [], [stderr])])
m4_bmatch([$1], [--debug],
[AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0, [$3
m4_bmatch([$1],
[%debug.*%glr\|%glr.*%debug],
[],
[%debug],
[AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0, [$3
])])
# Normalize the observed and expected error messages, depending upon the
@@ -332,6 +337,7 @@ m4_bmatch([$1], [--debug],
# 1. Remove the traces from observed.
sed '/^Starting/d
/^Entering/d
/^Stack/d
/^Reading/d
/^Reducing/d
/^Shifting/d
@@ -350,7 +356,7 @@ m4_bmatch([$1], [--location], [],
[[sed 's/^[-0-9.]*: //' expout >at-expout
mv at-expout expout]])
# 4. If error-verbose is not used, strip the`, unexpected....' part.
m4_bmatch([$1], [--yyerror-verbose], [],
m4_bmatch([$1], [%error-verbose], [],
[[sed 's/parse error, .*$/parse error/' expout >at-expout
mv at-expout expout]])
# 5. Check
@@ -358,8 +364,8 @@ AT_CHECK([cat stderr], 0, [expout])
])
# AT_CHECK_CALC([BISON-OPTIONS], [PARSER-EXPECTED-STDERR])
# --------------------------------------------------------
# AT_CHECK_CALC([BISON-OPTIONS])
# ------------------------------
# Start a testing chunk which compiles `calc' grammar with
# BISON-OPTIONS, and performs several tests over the parser.
m4_define([AT_CHECK_CALC],
@@ -369,7 +375,7 @@ AT_SETUP([Calculator $1])
AT_DATA_CALC_Y([$1])
# Specify the output files to avoid problems on different file systems.
AT_CHECK([bison calc.y -o calc.c m4_bpatsubst([$1], [--yyerror-verbose])],
AT_CHECK([bison -o calc.c m4_bpatsubst([$1], [%[^ ]*]) calc.y],
[0], [], [])
AT_COMPILE([calc])
@@ -427,22 +433,62 @@ AT_CLEANUP
# ------------------ #
# Test the parsers. #
# ------------------ #
# ------------------------ #
# Simple LALR Calculator. #
# ------------------------ #
AT_CHECK_CALC()
AT_BANNER([[Simple LALR Calculator.]])
AT_CHECK_CALC([--defines])
AT_CHECK_CALC([--locations])
AT_CHECK_CALC([--name-prefix=calc])
AT_CHECK_CALC([--verbose])
AT_CHECK_CALC([--yacc])
AT_CHECK_CALC([--yyerror-verbose])
# AT_CHECK_CALC_LALR([BISON-OPTIONS])
# -----------------------------------
# Start a testing chunk which compiles `calc' grammar with
# BISON-OPTIONS, and performs several tests over the parser.
m4_define([AT_CHECK_CALC_LALR],
[AT_CHECK_CALC($@)])
AT_CHECK_CALC([--locations --yyerror-verbose])
AT_CHECK_CALC_LALR()
AT_CHECK_CALC([--defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose])
AT_CHECK_CALC_LALR([--defines])
AT_CHECK_CALC_LALR([--locations])
AT_CHECK_CALC_LALR([--name-prefix=calc])
AT_CHECK_CALC_LALR([--verbose])
AT_CHECK_CALC_LALR([--yacc])
AT_CHECK_CALC_LALR([%error-verbose])
AT_CHECK_CALC([--debug])
AT_CHECK_CALC([--debug --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose])
AT_CHECK_CALC_LALR([%error-verbose --locations])
AT_CHECK_CALC_LALR([%error-verbose --defines --locations --name-prefix=calc --verbose --yacc])
AT_CHECK_CALC_LALR([%debug])
AT_CHECK_CALC_LALR([%error-verbose %debug --defines --locations --name-prefix=calc --verbose --yacc])
# ----------------------- #
# Simple GLR Calculator. #
# ----------------------- #
AT_BANNER([[Simple GLR Calculator.]])
# AT_CHECK_CALC_GLR([BISON-OPTIONS])
# ----------------------------------
# Start a testing chunk which compiles `calc' grammar with
# BISON-OPTIONS and %glr-parser, and performs several tests over the parser.
m4_define([AT_CHECK_CALC_GLR],
[AT_CHECK_CALC([%glr_parser] $@)])
AT_CHECK_CALC_GLR()
AT_CHECK_CALC_GLR([--defines])
AT_CHECK_CALC_GLR([--locations])
AT_CHECK_CALC_GLR([--name-prefix=calc])
AT_CHECK_CALC_GLR([--verbose])
AT_CHECK_CALC_GLR([--yacc])
AT_CHECK_CALC_GLR([%error-verbose])
AT_CHECK_CALC_GLR([%error-verbose --locations])
AT_CHECK_CALC_GLR([%error-verbose --defines --locations --name-prefix=calc --verbose --yacc])
AT_CHECK_CALC_GLR([%debug])
AT_CHECK_CALC_GLR([%error-verbose %debug --defines --locations --name-prefix=calc --verbose --yacc])
+9 -8
View File
@@ -37,7 +37,7 @@ exp: e 'e';
e: 'e' | /* Nothing. */;
]])
AT_CHECK([bison input.y -o input.c], 0, [],
AT_CHECK([bison -o input.c input.y], 0, [],
[[input.y:4.8: warning: rule never reduced because of conflicts: e: /* empty */
]])
@@ -103,7 +103,7 @@ main (int argc, const char *argv[])
]])
# Specify the output files to avoid problems on different file systems.
AT_CHECK([bison input.y -o input.c])
AT_CHECK([bison -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input '0<0'])
@@ -141,7 +141,7 @@ AT_DATA([input.y],
exp: exp OP exp | NUM;
]])
AT_CHECK([bison input.y -o input.c --report=all], 0, [],
AT_CHECK([bison -o input.c --report=all input.y], 0, [],
[input.y: warning: 1 shift/reduce conflict
])
@@ -249,7 +249,7 @@ AT_DATA([input.y],
exp: exp OP exp | NUM;
]])
AT_CHECK([bison input.y -o input.c --report=all])
AT_CHECK([bison -o input.c --report=all input.y])
# Check the contents of the report.
AT_CHECK([cat input.output], [],
@@ -328,6 +328,7 @@ state 5
1 | exp OP exp . [$end, OP]
$default reduce using rule 1 (exp)
Conflict between rule 1 and token OP resolved as reduce (%left OP).
]])
@@ -370,7 +371,7 @@ id : '0';
%%
]])
AT_CHECK([bison input.y -o input.c --report=all], 0, [],
AT_CHECK([bison -o input.c --report=all input.y], 0, [],
[[input.y: warning: 1 reduce/reduce conflict
input.y:4.4-8: warning: rule never reduced because of conflicts: id: '0'
]])
@@ -487,7 +488,7 @@ AT_DATA([input.y],
exp: exp OP exp | NUM;
]])
AT_CHECK([bison input.y -o input.c], 1, [],
AT_CHECK([bison -o input.c input.y], 1, [],
[input.y: warning: 1 shift/reduce conflict
input.y: expected 0 shift/reduce conflicts
])
@@ -507,7 +508,7 @@ AT_DATA([input.y],
exp: exp OP exp | NUM;
]])
AT_CHECK([bison input.y -o input.c])
AT_CHECK([bison -o input.c input.y])
AT_CLEANUP
@@ -524,7 +525,7 @@ AT_DATA([input.y],
exp: exp OP exp | NUM;
]])
AT_CHECK([bison input.y -o input.c], 1, [],
AT_CHECK([bison -o input.c input.y], 1, [],
[input.y: warning: 1 shift/reduce conflict
input.y: expected 2 shift/reduce conflicts
])
+4 -3
View File
@@ -93,8 +93,9 @@ declarator : ID { printf ("\"%s\" ", ]$[1); }
int
main (int argc, char** argv)
{
assert (argc = 2);
assert (freopen (argv[1], "r", stdin));
assert (argc == 2);
if (!freopen (argv[1], "r", stdin))
abort ();
exit (yyparse ());
}
@@ -182,7 +183,7 @@ z + q;
This is total garbage, but it should be ignored.
]])
AT_CHECK([bison types.y -o types.c], 0, [], ignore)
AT_CHECK([bison -o types.c types.y], 0, [], ignore)
AT_COMPILE([types])
])
+1 -1
View File
@@ -105,7 +105,7 @@ my_error (const char *msg)
exp:;
])
AT_CHECK([bison --defines input.y -o input.c])
AT_CHECK([bison --defines -o input.c input.y])
# YYLTYPE should be defined, and MY_LLOC declared.
AT_DATA([caller.c],
+1 -1
View File
@@ -181,7 +181,7 @@ main (void)
}
]])
AT_CHECK([bison input.y -d -v -o input.c])
AT_CHECK([bison -d -v -o input.c input.y])
AT_COMPILE([input], [input.c main.c])
AT_PARSER_CHECK([./input], 0,
[[[1],
+40 -14
View File
@@ -50,7 +50,7 @@ exp: MY_TOKEN;
%%
]])
AT_CHECK([bison input.y -o input.c])
AT_CHECK([bison -o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_CLEANUP
@@ -72,9 +72,9 @@ exp: { tests = {{{{{{{{{{}}}}}}}}}}; };
%%
]])
AT_CHECK([bison -v input.y -o input.c])
AT_CHECK([bison -v -o input.c input.y])
AT_CHECK([fgrep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c], 0, [ignore])
AT_CHECK([grep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c], 0, [ignore])
AT_CLEANUP
@@ -99,7 +99,7 @@ exp: '(' exp ')' | NUM ;
%%
]])
AT_CHECK([bison -v input.y -o input.c], 0, [],
AT_CHECK([bison -v -o input.c input.y], 0, [],
[[input.y:6.8-14: warning: symbol `"<="' used more than once as a literal string
]])
@@ -144,7 +144,7 @@ expr:
};
]])
AT_CHECK([bison input.y -o input.c -v])
AT_CHECK([bison -o input.c -v input.y])
# Check the contents of the report.
AT_CHECK([cat input.output], [],
@@ -266,7 +266,7 @@ exp: ;
%%
]])
AT_CHECK([bison -v input.y -o input.c])
AT_CHECK([bison -v -o input.c input.y])
AT_CLEANUP
@@ -298,7 +298,7 @@ input.y:5.1: invalid character: `%'
input.y:6.1: invalid character: `%'
input.y:6.2: invalid character: `-'
input.y:7.1-8.0: unexpected end of file in a prologue
input.y:7.1-8.0: parse error, unexpected PROLOGUE, expecting ";" or "|"
input.y:7.1-8.0: parse error, unexpected "%{...%}", expecting ";" or "|"
]])
AT_CLEANUP
@@ -327,7 +327,33 @@ int yylex (void);
exp: "a";
]])
AT_CHECK([bison input.y -o input.c])
AT_CHECK([bison -o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_CLEANUP
## -------------------- ##
## Characters Escapes. ##
## -------------------- ##
AT_SETUP([Characters Escapes])
AT_DATA([input.y],
[%{
void yyerror (const char *s);
int yylex (void);
%}
[%%
exp:
'\'' "\'"
| '\"' "\""
| '"' "'"
;
]])
AT_CHECK([bison -o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_CLEANUP
@@ -532,7 +558,7 @@ else: "else" statement;
%%
]])
AT_CHECK([bison -v input.y -o input.c])
AT_CHECK([bison -v -o input.c input.y])
# Check only the tables. We don't use --no-parser, because it is
# still to be implemented in the experimental branch of Bison.
@@ -573,7 +599,7 @@ static const unsigned char yyprhs[] =
{
0, 0, 3, 5, 6, 9, 14
};
static const signed char yyrhs[] =
static const yysigned_char yyrhs[] =
{
8, 0, -1, 9, -1, -1, 10, 11, -1, 3,
4, 5, 8, -1, 6, 8, -1
@@ -604,16 +630,16 @@ static const unsigned char yydefact[] =
3, 0, 0, 2, 0, 0, 1, 3, 4, 3,
6, 5
};
static const signed char yydefgoto[] =
static const yysigned_char yydefgoto[] =
{
-1, 2, 3, 4, 8
};
static const signed char yypact[] =
static const yysigned_char yypact[] =
{
-2, -1, 4, -8, 0, 2, -8, -2, -8, -2,
-8, -8
};
static const signed char yypgoto[] =
static const yysigned_char yypgoto[] =
{
-8, -7, -8, -8, -8
};
@@ -621,7 +647,7 @@ static const unsigned char yytable[] =
{
10, 1, 11, 5, 6, 0, 7, 9
};
static const signed char yycheck[] =
static const yysigned_char yycheck[] =
{
7, 3, 9, 4, 0, -1, 6, 5
};
+1 -1
View File
@@ -66,7 +66,7 @@ AT_SYNCLINES_COMPILE([syncline.c])
AT_CHECK([[test "`cat stdout`" = 'syncline.c:1: @%:@error "1"' || exit 77]])
AT_DATA([[input.y]], [$2])
AT_CHECK([bison input.y -o input.c])
AT_CHECK([bison -o input.c input.y])
AT_SYNCLINES_COMPILE([input.c])
AT_CHECK([cat stdout], 0, [$3])
AT_CLEANUP
+4 -4
View File
@@ -144,7 +144,7 @@ AT_SETUP([Big triangle])
# With 500 and the new parser, which consume far too much memory,
# it gets killed too. Of course the parser is to be cleaned.
AT_DATA_TRIANGULAR_GRAMMAR([input.y], [200])
AT_CHECK([bison input.y -v -o input.c])
AT_CHECK([bison -v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input])
@@ -248,7 +248,7 @@ AT_DATA_HORIZONTAL_GRAMMAR([input.y], [1000])
# Ask for 200 MiB, which should be plenty even on a 64-bit host.
AT_INCREASE_DATA_SIZE(204000)
AT_CHECK([bison input.y -v -o input.c])
AT_CHECK([bison -v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input])
@@ -372,7 +372,7 @@ AT_DATA_LOOKAHEADS_GRAMMAR([input.y], [1000])
# Ask for 200 MiB, which should be plenty even on a 64-bit host.
AT_INCREASE_DATA_SIZE(204000)
AT_CHECK([bison input.y -v -o input.c])
AT_CHECK([bison -v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input])
@@ -429,7 +429,7 @@ main (int argc, const char **argv)
return yyparse ();
}
]])
AT_CHECK([bison input.y -o input.c])
AT_CHECK([bison -o input.c input.y])
AT_COMPILE([input])
])