Compare commits

...
566 Commits
Author SHA1 Message Date
Paul Eggert 8e4900ef40 Regenerate. 2003-01-01 10:09:55 +00:00
Paul Eggert dc546b0f6e Bison 1.875. 2003-01-01 09:04:56 +00:00
Paul Eggert 1deb9bdcad src/scan-gram.l (<SC_BRACED_CODE>"}"): Append ";" only in braced code,
not in unions etc.
2002-12-31 02:26:51 +00:00
Paul Eggert 2c09b6a7ea Treat stray "," more uniformly.
Append ";" before last brace in braced code.
Don't use "yystype", which is deprecated.
2002-12-30 23:47:56 +00:00
Paul Eggert 83adb046bf (<INITIAL,SC_AFTER_IDENTIFIER,SC_PRE_CODE>","):
Moved here from...
(<INITIAL>","): Here.  This causes stray "," to be treated
more uniformly.
2002-12-30 23:38:20 +00:00
Paul Eggert 255227393f (<SC_BRACED_CODE>"}"): Append ";" before the last brace in braced code
when not in Yacc mode, for compatibility with Bison 1.35.  This
resurrects the 2001-12-15 patch to src/reader.c.
2002-12-30 22:40:52 +00:00
Paul Eggert 5b25cd7cd8 (YYDECL): Use YYSTYPE, not its deprecated alias yystype. This follows
up the 2002-12-24 YYSTYPE bug fix.
2002-12-30 22:35:56 +00:00
Paul Eggert 535c0f6328 * src/symtab.c (symbol_make_alias): Set type of SYMVAL to be
that of SYM's type.  This fixes Debian bug 168069, reported by
Thomas Olsson.
2002-12-29 04:31:58 +00:00
Paul Eggert 527203e98e (symbol_make_alias): Set type of SYMVAL to be that of SYM's type.
This fixes Debian bug 168069, reported by Thomas Olsson.
2002-12-29 04:30:18 +00:00
Paul Eggert 7b56c4bc0e Update version number to 1.75g. 2002-12-29 04:18:09 +00:00
Paul Eggert 78a00b7d7f Regenerate. 2002-12-29 03:17:45 +00:00
Paul Eggert 963fcc1705 Version 1.75f. 2002-12-29 03:17:12 +00:00
Paul Eggert 00c378a21f (Badly Collapsed GLR States): Switch to Yacc-style conflict reports. 2002-12-29 02:00:20 +00:00
Paul Eggert a4b746ea04 (GNU Cim Grammar): Switch to Yacc-style reports. 2002-12-29 01:59:40 +00:00
Paul Eggert 2c8ba4cd59 (Unresolved SR Conflicts, Defaulted
Conflicted Reduction, %expect not enough, %expect too much,
%expect with reduce conflicts): Switch to Yacc-style reports.
2002-12-29 01:59:13 +00:00
Paul Eggert be7280480c (conflict_report):
Renamed from conflict_report_yacc, removing the old
'conflict_report'.  Translate the entire conflict report at once,
so that we don't assume that "," has the same interpretation in
all languages.
(conflicts_output): Use Yacc-style conflict report for each state,
instead of our more-complicated style.
(conflicts_print): Use Yacc-style conflict report, except print
the input file name when not emulating Yacc.
2002-12-29 01:58:49 +00:00
Paul Eggert 5a99098d0b (Understanding): Use Yacc style for conflict reports. Also, use new
way of locating rules.
2002-12-29 01:58:11 +00:00
Paul Eggert fb8ccdcd35 (reduce_print): Don't invoke fflush; it's not needed. 2002-12-29 01:23:02 +00:00
Paul Eggert 8ca1967ea2 (warn_at, warn, complain_at, complain, fatal_at, fatal): Don't invoke
fflush; it's not needed and it might even be harmful for stdout, as
stdout might not be open.
2002-12-29 01:22:30 +00:00
Paul Eggert b1efe548af Fix a bug where error locations were not being recorded correctly.
Warn if we detect conflicting outputs to the same file.

If the user specifies "%expect N", report an error if there are any
reduce/reduce conflicts.
2002-12-28 09:02:18 +00:00
Paul Eggert 120f129d67 (_AT_CHECK_PRINTER_AND_DESTRUCTOR):
Error locations include the locations of all the tokens that were
discarded, not just the last token.
2002-12-28 08:38:14 +00:00
Paul Eggert 96b93a3da4 Mention that YYLLOC_DEFAULT is also invoked for syntax errors. 2002-12-28 08:37:17 +00:00
Paul Eggert d42f69cdf7 (yyparse): New local var yylerrsp, to record the
top of the location stack's error locations.
(yyerrlab): Set it.  When discarding a token, push its location
onto yylerrsp so that we don't lose track of the error's end.
(yyerrlab1): Now is only the target of YYERROR, so that we can
properly record the location of the action that failed.  For GCC
2.93 and later, insert an __attribute__ ((__unused__)) to avoid
GCC warning about yyerrlab1 being unused if YYERROR is unused.
(yyerrlab2): New label, which yyerrlab now falls through to.
Compute the error's location by applying YYLLOC_DEFAULT to
the locations of all the symbols that went into the error.
2002-12-28 08:36:02 +00:00
Paul Eggert 04877eec24 Remove this file, since we
can't use m4_include on relative file names.
2002-12-28 08:00:56 +00:00
Paul Eggert 053658d584 Include quote.h.
(compute_output_file_names): Warn if we detect conflicting outputs to
the same file.
2002-12-26 22:30:10 +00:00
Paul Eggert 6876ecd36e (%expect with reduce conflicts): New test. 2002-12-26 22:21:23 +00:00
Paul Eggert 76be9271f2 (conflicts_print): If the user specifies "%expect N", report an error
if there are any reduce/reduce conflicts.  This is what the manual
says should happen.  This fixes Debian bug 130890, reported by Anthony
DeRobertis.
2002-12-26 22:10:52 +00:00
Paul Eggert 983c5c2c2a Don't use m4_include on relative file names, as it doesn't work.
Remove obsolete references to bison.simple and bison.hairy.
* src/getargs.c (getargs) [MSDOS]: Don't assume optarg != NULL.
* src/parse-gram.y (declaration): Use enum "report_states".
* src/scan-skel.l ("@output ".*\n): Close any old yyout before new one.
2002-12-26 09:12:05 +00:00
Paul Eggert 5b66ea8b80 (dist_m4sugar_DATA): Remove m4sugar/version.m4. 2002-12-26 08:29:56 +00:00
Paul Eggert 70b4c070cc Don't include m4sugar/version.m4. 2002-12-26 08:28:09 +00:00
Paul Eggert cce7a5f423 Don't include c.m4, as "include" doesn't do what we want. 2002-12-26 08:27:09 +00:00
Paul Eggert 2fd4e13193 (output_skeleton): Use full path names when
specifying a file to include; don't rely on include path, as
it's unreliable when the working file contains a file with
that name.
2002-12-26 08:25:56 +00:00
Paul Eggert 7eab453e1b Mention the "yacc" command in the synopsis.
Don't mention bison.simple and bison.hairy, which are obsolete.
2002-12-26 06:59:42 +00:00
Paul Eggert f6abc26e38 Comment fix: don't mention obsolete bison.simple. 2002-12-26 06:58:35 +00:00
Paul Eggert ea03c24f05 Comment wording fix. 2002-12-26 06:57:29 +00:00
Paul Eggert fcbfa6b01c (getargs) [MSDOS]: Don't assume optarg != NULL
with -g option.
2002-12-26 06:55:45 +00:00
Paul Eggert 9dd5b37815 (declaration): Use enum "report_states" rather
than its numeric value 1.
2002-12-26 06:51:42 +00:00
Paul Eggert 88015bf06b ("@output ".*\n): Close any old yyout before opening a new one.
This fixes Debian bug 156349, reported by Bruce Stephens.
2002-12-26 05:59:06 +00:00
Paul Eggert 7ea9026a59 Remove broken URL. 2002-12-24 09:03:23 +00:00
Paul Eggert ebec3740c2 Bump version number. 2002-12-24 08:58:39 +00:00
Paul Eggert 23f2d9dc0f Version 1.75e. 2002-12-24 08:35:23 +00:00
Paul Eggert 73521d9ff8 Regenerate. 2002-12-24 08:33:38 +00:00
Paul Eggert 366041f014 (cvs-update): Don't assume that the shell supports $(...), as
Solaris sh doesn't.
2002-12-24 08:30:59 +00:00
Paul Eggert 80483e8e0d Update from gnulib. 2002-12-24 08:15:17 +00:00
Paul Eggert 5320ca4d6f (lloc_default): Remove test for empty
nonterminals at the end, since it didn't change the result.
2002-12-24 08:08:18 +00:00
Paul Eggert 33167b8b05 If the user does not define YYSTYPE as a macro, Bison now declares it
using typedef instead of defining it as a macro.  POSIX requires this.
For consistency, YYLTYPE is also declared instead of defined.

%union directives can now have a tag before the `{', e.g., the
directive `%union foo {...}' now generates the C code
`typedef union foo { ... } YYSTYPE;'; this is for Yacc compatibility.
The default union tag is `YYSTYPE', for compatibility with Solaris 9
Yacc.  For consistency, YYLTYPE's struct tag is now `YYLTYPE'
instead of `yyltype'.

`yystype' and `yyltype' are now obsolescent macros instead of being
typedefs or tags; they are no longer documented and will be
withdrawn in a future release.
2002-12-24 07:47:36 +00:00
Paul Eggert 624a35e20b (handle_dollar, handle_at): Now takes int
token_type, not braced_code code_kind.  All uses changed.
(SC_PRE_CODE): New state, for scanning after a keyword that
has (or usually has) an immediately-following braced code.
(token_type): New local var, to keep track of which token type
to return when scanning braced code.
(<INITIAL>"%destructor", <INITIAL>"%lex-param",
<INITIAL>"%parse-param", <INITIAL>"%printer,
<INITIAL>"%union"): Set token type and BEGIN SC_PRE_CODE
instead of returning a token type immediately.
(<INITIAL>"{"): Set token type.
(<SC_BRACED_CODE>"}"): Use it.
(handle_action_dollar, handle_action_at): Now returns bool
indicating success.  Fail if ! current_rule; this prevents a core dump.
(handle_symbol_code_dollar, handle_symbol_code_at):
Remove; merge body into caller.
(handle_dollar, handle_at): Complain in invalid contexts.
2002-12-24 07:46:49 +00:00
Paul Eggert ef4479de37 (braced_code, current_braced_code): Remove.
(token_name): New decl.
2002-12-24 07:45:22 +00:00
Paul Eggert e9ce56889c (add_param): 2nd arg is now char * not char
const *, since it is now modified by stripping surrounding { }.
(current_braced_code): Remove.
(PERCENT_DESTRUCTOR, PERCENT_PRINTER, PERCENT_UNION,
PERCENT_LEX_PARAM, PERCENT_PARSE_PARAM): Change names to include
trailing " {...}".  Now of type <chars>.
(grammar_declaration): Adjust to bundled tokens.
(code_content): Remove; stripping is now done by add_param.
(print_token_value): Print contents of bundled tokens.
(token_name): New function.
2002-12-24 07:44:40 +00:00
Paul Eggert 6273355b36 If the user does not define YYSTYPE as a macro, Bison now declares it
using typedef instead of defining it as a macro.  POSIX requires this.
	For consistency, YYLTYPE is also declared instead of defined.

	%union directives can now have a tag before the `{', e.g., the
	directive `%union foo {...}' now generates the C code
	`typedef union foo { ... } YYSTYPE;'; this is for Yacc compatibility.
	The default union tag is `YYSTYPE', for compatibility with Solaris 9
	Yacc.  For consistency, YYLTYPE's struct tag is now `YYLTYPE'
	instead of `yyltype'.

	`yystype' and `yyltype' are now obsolescent macros instead of being
	typedefs or tags; they are no longer documented and will be
	withdrawn in a future release.
2002-12-24 07:43:43 +00:00
Paul Eggert 050c471b8e (b4_location_type): Remove.
(YYSTYPE): Renamed from yystype.
(YYSTYPE_IS_DECLARED): New macro, used to prevent double-typedef.
(struct YYLTYPE): Renamed from struct yyltype.
(YYLTYPE): Renamed from yyltype.
(yyltype, yystype): New (and obsolescent) macros,
for backward compatibility.

(YYSTYPE): Declare as union YYSTYPE if the user
does not specify a union tag.  This is for compatibility with
Solaris 9 yacc.
2002-12-24 07:41:47 +00:00
Paul Eggert fa8c3ebca3 (b4_location_type): Remove.
(YYSTYPE): Renamed from yystype.
(YYSTYPE_IS_DECLARED): New macro, used to prevent double-typedef.
(struct YYLTYPE): Renamed from struct yyltype.
(YYLTYPE): Renamed from yyltype.
(yyltype, yystype): New (and obsolescent) macros,
for backward compatibility.
2002-12-24 07:40:58 +00:00
Paul Eggert 75eb3bc4e7 * If the user does not define YYSTYPE as a macro, Bison now declares it
using typedef instead of defining it as a macro.  POSIX requires this.
  For consistency, YYLTYPE is also declared instead of defined.

* %union directives can now have a tag before the `{', e.g., the
  directive `%union foo {...}' now generates the C code
  `typedef union foo { ... } YYSTYPE;'; this is for Yacc compatibility.
  The default union tag is `YYSTYPE', for compatibility with Solaris 9 Yacc.
  For consistency, YYLTYPE's struct tag is now `YYLTYPE' instead of `yyltype'.

* `yystype' and `yyltype' are now obsolescent macros instead of being
  typedefs or tags; they are no longer documented and will be
  withdrawn in a future release.

Fix copyright notice.
2002-12-24 07:40:14 +00:00
Paul Eggert 52328c6e99 Comment fix. 2002-12-21 12:56:44 +00:00
Paul Eggert f67ad422a4 (Decl Summary): yytname's first element is not always "$end", as the
user might specify a different name for the end token.
2002-12-21 12:49:33 +00:00
Paul Eggert 879ca4f81b Omit mentions of %lex-param and %parse-param for now. 2002-12-18 00:10:11 +00:00
Paul Eggert 9417597809 (Parser Function, Purel Calling, Error
Reporting, Table of Symbols): Omit mentions of %lex-param and
%parse-param from the documentation for now.
2002-12-18 00:09:33 +00:00
Paul Eggert 20daca0631 Omit mentions of %lex-param and %parse-param from the documentation
for now.
2002-12-18 00:09:10 +00:00
Paul Eggert b317297e4d (Error Reporting): randomness -> nastiness, to fix a typo. 2002-12-15 09:39:12 +00:00
Paul Eggert 1c5fe69d46 Undo most of the 2002-11-12 yychar -> yytoken patch, as it broke GCC 3.2.1. 2002-12-15 09:21:13 +00:00
Paul Eggert a20713a4af Undo most of the 2002-11-12 yychar -> yytoken patch, as it broke
GCC 3.2.1 (which depends on yychar == YYEMPTY when there is no
lookahead symbol, and which sets yychar in parser actions) and it
disagreed with the Bison documentation.  This should fix the bug
reported by Andrew Walrond in
<http://mail.gnu.org/pipermail/bug-bison/2002-December/001949.html>.

(YYTRANSLATE): Don't check for negative argument,
as the caller now does that.
(yyclearin, YYBACKUP, yyparse): Use yychar, not yytoken.
(YYEMPTY): Parenthesize right hand side, since others use it.
(yyparse): Don't assume that our generated code is the only code
that sets yychar.
2002-12-15 09:20:24 +00:00
Paul Eggert d2caf5545c Add date to 1.75d notice. 2002-12-13 13:14:11 +00:00
Paul Eggert c5df10951a (AC_INIT): Bump version number to 1.75e. 2002-12-13 12:54:54 +00:00
Paul Eggert d1de53722b Version 1.75d. 2002-12-13 12:21:57 +00:00
Paul Eggert 00ba950c7b Initial revision. 2002-12-13 12:21:13 +00:00
Paul Eggert 05d18c2493 Regenerate. 2002-12-13 12:20:19 +00:00
Paul Eggert 397ec0734f (Invocation, Bison Options): Mention yacc
as an alias for bison y.
2002-12-13 12:18:31 +00:00
Paul Eggert d8388d7ab6 (bin_SCRIPTS): New macro, for yacc.
(MOSTLYCLEANFILES): Add yacc.
(yacc): New rule.
2002-12-13 12:17:59 +00:00
Paul Eggert 148b7779f3 Add da. 2002-12-13 11:46:51 +00:00
Paul Eggert dbb95312e2 Sync with autotools. 2002-12-13 11:44:16 +00:00
Paul Eggert f47dbf6bef (__GNU_LIBRARY__) [lint]: Define to work around
problem with latest <getopt.h>.
(HACK_FOR___GNU_LIBRARY___PROTOTYPE): New macro.
2002-12-13 11:41:21 +00:00
Paul Eggert fc659dfd69 Sync with gnulib. 2002-12-13 11:24:16 +00:00
Paul Eggert ec1ef903c3 Upgrade to FDL 1.2. 2002-12-13 11:15:01 +00:00
Paul Eggert 1915f1331e Fix a bad interaction with flex 2.5.23 reported by Bruce Lilly in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001929.html>.

(YYLTYPE, struct yyltype): Do not define unless
locations are requested.
(union yyalloc): Do not depend on YYLTYPE_IS_TRIVIAL unless
locations are requested.
2002-12-13 09:33:23 +00:00
Paul Eggert d0f3fe233d Remove unportable casts and storage allocation tricks. 2002-12-13 08:54:41 +00:00
Paul Eggert ca2e738c81 (G_CMAX): Now INT_MAX. 2002-12-13 08:50:13 +00:00
Paul Eggert 177d84c081 Fix misspelling in comments. 2002-12-13 08:49:39 +00:00
Paul Eggert 4613f49b90 XMALLOC -> MALLOC 2002-12-13 08:49:08 +00:00
Paul Eggert 04e309ce35 Put "const" after type that it modifies consistently. 2002-12-13 08:48:03 +00:00
Paul Eggert ac72f3e9b5 (uniqstr_print): Now inline. Return bool, not int.
(uniqstr_print_processor): New function, to avoid casts.
(uniqstrs_new, hash_initialize, uniqstrs_do):
Use new functions instead of casting old functions unportably.
(hash_compare_uniqstr): Remove unnecessary casts.
2002-12-13 08:47:15 +00:00
Paul Eggert ff5c8b8557 (state_number_to_vector_number,
symbol_number_to_vector_number):
Now inline functions rather than macros, to avoid casts.
(table_size): Now int, to pacify GCC.
(table_grow, table_ninf_remap): Use signed table size.
(save_row): Don't bother initializing locals when not needed.
(default_goto, goto_actions, pack_vector): Remove unnecessary casts.
2002-12-13 08:45:38 +00:00
Paul Eggert deedb0b77c (alloca): Remove; decl no longer needed.
(<stddef.h>): Include, for offsetof.
(<inttypes.>, <stdint.h>): Include if available.
(uintptr_t): New type, if system lacks it.
(CALLOC, MALLOC, REALLOC): New macros.
All uses of XCALLOC, XMALLOC, and XREALLOC changed to use these
new macros.
2002-12-13 08:44:28 +00:00
Paul Eggert 2cc6b61207 (NUMBER_UNDEFINED): Remove unnecessary cast.
(symbol_processor): Remove.
(symbols_do): Remove decl; now static.
2002-12-13 08:43:01 +00:00
Paul Eggert 0fb1efaf58 (symbol_check_defined,
symbol_check_alias_consistency, symbol_pack, symbol_translation,
hash_compare_symbol, hash_symbol):
Now inline.  Return bool, not int.
(symbol_check_defined_processor,
symbol_check_alias_consistency_processor, symbol_pack_processor,
symbol_translation_processor, hash_symbol_comparator,
hash_symbol_hasher): New functions, to avoid casts.
(symbols_new, symbols_do, symbols_check_defined,
symbols_token_translations_init):
Use new functions instead of casting old functions unportably.
(symbol_free): Remove; unused.
(symbol_get): Remove cast in lhs of assignment.
(symbols_do): Now static.  Accept generic arguments, not hashing-related ones.
2002-12-13 08:42:03 +00:00
Paul Eggert 2073d76939 (state_number_as_int): Now inline functions rather than macros, to avoid casts. 2002-12-13 08:39:01 +00:00
Paul Eggert 03b9e27342 (state_compare): Now inline. Return bool, not int.
(state_comparator, stage_hasher): New function, to avoid casts.
(state_hash_new): Use new functions instead of casting old functions unportably.
(state_hash_lookup): Use MALLOC rather than alloca, so that we don't
have to worry about alloca.
(TRANSITIONS_ALLOC, ERRS_ALLOC, REDUCTIONS_ALLOC,
STATE_ALLOC): Remove.
(transitions_new, errs_new, reductions_new, state_new): Use malloc
rather than calloc, and use offsetof to avoid allocating slightly
too much storage.
(state_new): Initialize all members.
(state_hash): Use unsigned accumulator, not signed.
2002-12-13 08:37:52 +00:00
Paul Eggert 3b1e470c6d (<SC_ESCAPED_CHARACTER>"'"): Use unsigned char
local var instead of casting to unsigned char, to avoid casts.
2002-12-13 08:35:16 +00:00
Paul Eggert f2a655b6cc XCALLOC -> CALLOC 2002-12-13 08:34:16 +00:00
Paul Eggert c488293484 (reduce_grammar_tables): Do not subtract from the returned value of malloc. 2002-12-13 08:33:27 +00:00
Paul Eggert 9c4637fa8c XCALLOC -> CALLOC, XMALLOC -> MALLOC. 2002-12-13 08:32:12 +00:00
Paul Eggert 87ceef7346 (GENERATE_MUSCLE_INSERT_TABLE): Use long local
var instead of casting to long, to avoid casts.
2002-12-13 08:31:23 +00:00
Paul Eggert 0993971437 (nullable_compute): Do not subtract from the returned value of malloc. 2002-12-13 08:30:08 +00:00
Paul Eggert e00b682606 (muscle_m4_output): Now inline. Return bool, not int.
(muscle_m4_output_processor): New function, to avoid casts.
(muscles_m4_output): Use new functions instead
of casting old functions unportably.
2002-12-13 08:29:05 +00:00
Paul Eggert a54a1bdc6b (alloca) [C_ALLOCA]: Add decl here, the only place where it's needed. 2002-12-13 08:27:32 +00:00
Paul Eggert 5362cd5f78 (set_goto_map): Do not subtract from the returned value of malloc.
(add_lookback_edge): Use malloc rather than calloc,
since the resulting storage is always stored into.
2002-12-13 08:26:46 +00:00
Paul Eggert e46cedb9be (symbol_number_as_item_number,
item_number_as_symbol_number, rule_number_as_item_number,
item_number_as_rule_number): Now inline functions rather
than macros, to avoid casts.
(int_of_rule_number): Remove; no longer used.
2002-12-13 08:25:31 +00:00
Paul Eggert e59a68718b Undo XFREE change; we assume C89 compiler, not C89 library. 2002-12-13 08:22:26 +00:00
Paul Eggert 6c5f863aec Undo XFREE change; we assume C89 compiler, but not C89 library. 2002-12-13 08:20:30 +00:00
Paul Eggert 6f84e9abca Use free rather than XFREE. 2002-12-13 07:57:20 +00:00
Paul Eggert 08721544d1 (getargs): Don't assume EOF == -1. 2002-12-13 07:54:02 +00:00
Paul Eggert 82129ef5d5 (concat2, tr, compute_base_name): Use xmalloc (N) rather than XMALLOC
(char, N).
(filename_split): Rewrite to avoid cast.
2002-12-13 07:52:29 +00:00
Paul Eggert 69cecfeb38 (derives_compute): Do not subtract NTOKENS from
the pointer DSET returned by malloc; this isn't portable.
Instead, always use DSET[i - NTOKENS] rather than DSET[i].
Similarly for DERIVES.

(derives_compute): Do not bother invoking
int_of_rule_number, since rule numbers are integers.

All uses of XCALLOC, XMALLOC, and XREALLOC changed to use new macros
CALLOC, MALLOC, REALLOC.  All uses of XFREE changed to free.
2002-12-13 04:50:32 +00:00
Paul Eggert 1dd15b6ea6 All uses of XCALLOC, XMALLOC, and XREALLOC changed to use new macros
CALLOC, MALLOC, REALLOC.  All uses of XFREE changed to free.
2002-12-13 04:45:45 +00:00
Paul Eggert bb7c2bc623 All uses of XCALLOC, XMALLOC, and XREALLOC changed to use new macros
CALLOC, MALLOC, REALLOC.  All uses of XFREE changed to free.

Don't subtract from the value that malloc returns; it's not portable.
2002-12-13 04:45:04 +00:00
Paul Eggert eb0ca72d8e (AC_CHECK_TYPES): Check for uintptr_t. 2002-12-13 04:40:56 +00:00
Paul Eggert 26b4a96981 Change identifier spellings to avoid collisions with names
that are reserved by POSIX.
Fix misspelling in names.
Sort include-file uses.
2002-12-11 07:17:47 +00:00
Paul Eggert 051ade8391 (Torturing the Scanner): Rename value_t -> value,
value_t_as_yystype -> value_as_yystype.
2002-12-11 07:00:15 +00:00
Paul Eggert e3aa2baac6 (_AT_DATA_CALC_Y, Simple LALR Calculator):
Rename value_t -> value.
2002-12-11 06:59:39 +00:00
Paul Eggert 1faeb1414d (G_EXPAND): Renamed from G_STRETCH.
(G_LONG_STRAIGHT_PHASE): Renamed from G_STRAIGHT_PHASE.
(N_EXPAND): Renamed from N_STRETCH.
(G_NODE_ALIGNMENT): Renamed from G_NODE_ALIGNEMENT.
2002-12-11 06:59:06 +00:00
Paul Eggert 106344fb01 (enum color): Renamed from enum color_e.
(enum textmode): Renamed from enum textmode_e.
(enum shape): Renamed from enum shape_e.
(struct colorentry): Renamed from struct colorentry_s.
(struct classname): Renamed from struct classname_s.
(struct infoname): Renamed from struct infoname_s.
(enum layoutalgorithm): Renamed from enum layoutalgorithm_e.
(enum decision): Renamed from enum decision_e.
(enum orientation): Renamed from enum orientation_e.
(enum alignment): Renamed from enum alignment_e.
(enum arrow_mode): Renamed form enum arrow_mode_e.
(enum crossing_type): Renamed from enum crossing_type_e.
(enum view): Renamed from enum view_e.
(struct node): Renamed from struct node_s.
(node): Renamed from node_t.
(enum linestyle): Renamed from enum linestyle_e.
(enum arrowstyle): Renamed from enum arrowstyle_e.
(struct edge): Renamed from struct edge.
(edge): Renamed from edge_t.
(struct graph): Renamed from struct graph_s.
(graph): Renamed from graph_t.
(struct node_s.expand): Renamed from struct node_s.stretch.
(struct graph_s.expand): Renamed from struct graph_s.stretch.
(enum_alignment_e): Renamed from enum_alignement_e.
2002-12-11 06:58:17 +00:00
Paul Eggert 17ee7397a8 Adjust to renamings. 2002-12-11 06:56:18 +00:00
Paul Eggert 3671fb8483 (base_number): Renamed from base_t. 2002-12-11 06:55:34 +00:00
Paul Eggert c801dbf7d9 (vector_number): Renamed from vector_number_t.
(action_number): Renamed from action_t.
(VECTOR_NUMBER_MAX, VECTOR_NUMBER_MIN): Remove; unused.
(BASE_MAXIMUM): Renamed from BASE_MAX.
(BASE_MINIMUM): Renamed from BASE_MIN.
(ACTION_MAX): Remove; unused.
(ACTION_NUMBER_MINIMUM): Renamed from ACTION_MIN.
2002-12-11 06:54:42 +00:00
Paul Eggert 982cc3023c Do not include <errno.h>.
(TAB_EXT): Renamed from EXT_TAB.
(OUTPUT_EXT): Renamed from EXT_OUTPUT.
(time_report): Remove; decl is now in lib/timevar.h.
2002-12-11 06:54:00 +00:00
Paul Eggert 7486e51b76 (symbol_number): Renamed from symbol_number_t.
(struct symbol): Renamed from struct symbol_s.
(symbol): Renamed from symbol_t.
2002-12-11 06:53:20 +00:00
Paul Eggert e39214489e (symbol_list): Renamed from symbol_list_t.
(struct symbol_list): Renamed from struct symbol_list_s.
2002-12-11 06:52:09 +00:00
Paul Eggert 784573d14a (state_number): Renamed from state_number_t.
(struct state): Renamed from struct state_s.
(state): Renamed from state_t.
(transitions): Renamed from transitions_t.  Unused (and
misspelled) transtion_s tag removed.
(errs): Renamed from errs_t.  Unused errs_s tag removed.
(reductions): Renamed from reductions_t.  Unused tag
reductions_s removed.
(STATE_NUMBER_MAXIMUM): Renamed from STATE_NUMBER_MAX.
Include "gram.h".
2002-12-11 06:50:40 +00:00
Paul Eggert 353d3eb651 Sort include files. 2002-12-11 06:48:54 +00:00
Paul Eggert 223ff46e4c (<INITIAL>{int}): Use set_errno and get_errno instead of errno.
(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>\\x[0-9abcdefABCDEF]+): Likewise.
(handle_action_dollar, handle_action_at): Likewise.
(obstack_for_string): Renamed from string_obstack.
2002-12-11 06:48:18 +00:00
Paul Eggert 7b5cb0cd30 (relation_node): Renamed from relation_node_t.
(relation_nodes): Renamed from relation_nodes_t.
(relation): Renamed from relation_t.
2002-12-11 06:46:55 +00:00
Paul Eggert 5b2dd224dc (braced_code): Renamed from braced_code_t.
Remove brace_code_e tag.
2002-12-11 06:44:28 +00:00
Paul Eggert 16bb742fce (static_graph): Renamed from graph. 2002-12-11 06:43:08 +00:00
Paul Eggert 3d2cbc2662 (<chars>): Renamed from <string>. 2002-12-11 06:40:51 +00:00
Paul Eggert 21fd22d6ec (output_skeleton): Use get_errno instead of errno. 2002-12-11 06:39:20 +00:00
Paul Eggert a0b76449c7 (struct rule_list): Renamed from struct rule_list_s.
(rule_list): Renamed from rule_list_t.
2002-12-11 06:38:17 +00:00
Paul Eggert 2b5ff972bf (muscle_entry_t): Remove; moved to muscle_tab.c and renamed to muscle_entry. 2002-12-11 06:37:17 +00:00
Paul Eggert 8322e8f580 (muscle_entry): Renamed from muscle_entry_t,
and moved here from muscle_tab.h.
2002-12-11 06:36:41 +00:00
Paul Eggert 69b8cc095f (location): Renamed from location_t. 2002-12-11 06:35:35 +00:00
Paul Eggert 81ebdef91d Adjust to type renaming. 2002-12-11 06:35:10 +00:00
Paul Eggert b78d8c23da (goto_number): Renamed from goto_number_t.
(GOTO_NUMBER_MAXIMUM): Renamed from GOTO_NUMBER_MAX.
2002-12-11 06:34:37 +00:00
Paul Eggert 5dde542557 (struct goto_list): Renamed from struct goto_list_s.
(goto_list): Renamed from goto_list_t.
2002-12-11 06:33:59 +00:00
Paul Eggert 7478c462f2 (item_number): Renamed from item_number_t.
(rule_number): Renamed from rule_number_t.
(struct rule_s): Remove the "rule_s" part; not used.
(rule): Renamed from rule_t.
(rule_filter): Renamed from rule_filter_t.
(ITEM_NUMBER_MAX, ITEM_NUMBER_MIN, RULE_NUMBER_MAX):
Remove; unused.
2002-12-11 06:33:22 +00:00
Paul Eggert e8a0acd666 (enum trace): Renamed from enum trace_e.
(enum report): Renamed from enum report_e.
2002-12-11 06:31:14 +00:00
Paul Eggert d38a11a64b Adjust to struniq renaming. 2002-12-11 06:30:36 +00:00
Paul Eggert 651ec3d0ec (strsuffix, stringappend): Remove; unused. 2002-12-11 06:29:17 +00:00
Paul Eggert 6d441fc378 (xfopen, xfclose): Use get_errno instead of errno.
(strsuffix): Remove; unused.
(concat2): Renamed from stringappend.  Now static.
2002-12-11 06:28:25 +00:00
Paul Eggert fbfa091d05 Include "gram.h". 2002-12-11 06:26:42 +00:00
Paul Eggert f041e30b91 (enum conflict_resolution): Renamed from enum conflict_resolution_e. 2002-12-11 06:25:26 +00:00
Paul Eggert 41f83caf1c Don't include stdlib.h, string.h _LIBC stuff. 2002-12-11 06:23:40 +00:00
Paul Eggert c7bd07f75a Adjust to type name changes. 2002-12-11 05:32:51 +00:00
Paul Eggert 3de372bb1b (assoc): Renamed from assoc_t. 2002-12-11 05:31:40 +00:00
Paul Eggert c134bfbeee Adjust to type renamings. 2002-12-11 05:31:12 +00:00
Paul Eggert 5bf3d7c115 (bison_SOURCES): Rename struniq.c and struniq.h to uniqstr.c and uniqstr.h. 2002-12-11 05:30:26 +00:00
Paul Eggert add6614e2b (struct state_list): Renamed from struct state_list_s.
(state_list): Renamed from state_list_t.
2002-12-11 05:29:17 +00:00
Paul Eggert 7c612afb7e (timevar_report): New decl. 2002-12-11 05:28:00 +00:00
Paul Eggert e22ad7fa22 (timevar_report): Renamed from time_report, for consistency with other
names.
2002-12-11 05:27:29 +00:00
Paul Eggert f6a8ccf40a (libbison_a_SOURCES): Add get-errno.h, get-errno.c. 2002-12-11 05:26:00 +00:00
Paul Eggert 178365909f (YYSTACK_GAP_MAXIMUM): Renamed from YYSTACK_GAP_MAX. 2002-12-11 05:25:27 +00:00
Paul Eggert 9939fdb139 Rename struniq -> uniqstr to avoid collision with <string.h>. 2002-12-11 05:23:54 +00:00
Paul Eggert 4bebc88ee1 Initial revision 2002-12-11 05:22:48 +00:00
Paul Eggert 557962dcff Initial revision. 2002-12-11 05:22:23 +00:00
Paul Eggert 5bab03fcf8 Rename struniq to uniqstr, to avoid collision with <string.h>. 2002-12-11 05:20:31 +00:00
Paul Eggert 996b1c7e8c * data/glr.c, data/lalr1.cc, data/yacc.c: Do not use __file__,
since this causes problems when __file__ contains character
sequences like "@" that are treated specially by src/scan-skel.l.
Instead, just use the file's basename.  This fixes the bug
reported by Martin Mokrejs in
<http://mail.gnu.org/pipermail/bug-bison/2002-December/001949.html>.
2002-12-09 04:48:38 +00:00
Paul Eggert e19c4e5d1c Add support for rules that do not have trailing semicolons, as
POSIX requires.  Improve the quality of locations in Bison
diagnostics.

Remove duplicate decl of current_file.
Fix minor promotion problem in templates.
Fix Debian Bug 102878.
2002-12-07 08:09:17 +00:00
Paul Eggert 050931e3f9 (Invalid inputs): No longer `expecting ";"
or "|"' now that so many other tokens are allowed by the new grammar.
2002-12-07 06:16:58 +00:00
Paul Eggert e551232efa (Useless Rules, Reduced Automaton, Underivable Rules): Adjust reported
locations to match the more-precise results now expected.
2002-12-07 06:16:30 +00:00
Paul Eggert b06af56f55 (Invalid $n, Invalid @n, Type Clashes):
Adjust reported locations to match the more-precise
results now expected.
2002-12-07 06:15:55 +00:00
Paul Eggert 2bf21a8322 (S/R in initial, Defaulted Conflicted Reduction):
Adjust reported locations to match the more-precise
results now expected.
2002-12-07 06:15:18 +00:00
Paul Eggert 3f2d73f157 Include "files.h".
(YY_USER_INIT): Initialize scanner_cursor instead
of *loc.
(STEP): Remove.  No longer needed, now that adjust_location does
the work.  All uses removed.
(scanner_cursor): New var.
(adjust_location): Renamed from extend_location.  It now sets
*loc and adjusts the scanner cursor.  All uses changed.
Don't bother testing for CR.
(handle_syncline): Remove location arg; now updates scanner cursor.
All callers changed.
(unexpected_end_of_file): Now accepts start boundary of token or
comment, not location.  All callers changed.  Update scanner cursor,
not the location.
(SC_AFTER_IDENTIFIER): New state.
(context_state): Renamed from c_context.  All uses changed.
(id_loc, code_start, token_start): New local vars.
(<INITIAL,SC_AFTER_IDENTIFIER>): New initial context.  Move all
processing of Yacc white space and equivalents here.
(<INITIAL>{id}): Save id_loc.  Begin state SC_AFTER_IDENTIFIER
instead of returning ID immediately, since we need to search for
a subsequent colon.
(<INITIAL>"'", "\""): Save token_start.
(<INITIAL>"%{", "{", "%%"): Save code_start.
(<SC_AFTER_IDENTIFIER>): New state, looking for a colon.
(<SC_YACC_COMMENT>, <SC_COMMENT>, <SC_LINE_COMMENT>):
BEGIN context_state at end, not INITIAL.
(<SC_ESCAPED_STRING>"\"", <SC_ESCAPED_CHARACTER>"'",
<SC_BRACED_CODE>"}", <SC_PROLOGUE>"%}", <SC_EPILOGUE><<EOF>>):
Return correct token start.
(<SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE>): Save start boundary when
the start of a character, string or multiline comment is found.
2002-12-07 06:14:27 +00:00
Paul Eggert d6ea8200af (nonterminals_reduce): Use warn_at rather than rolling our own. 2002-12-07 06:12:48 +00:00
Paul Eggert 0aa32d51bb Include location.h.
(scanner_cursor): New decl.
2002-12-07 06:11:11 +00:00
Paul Eggert 2073702c37 Adjust to new location_t layout. 2002-12-07 06:02:10 +00:00
Paul Eggert b729552289 (lloc_default): New function, which handles
empty locations more accurately.
(YYLLOC_DEFAULT): Use it.
(%token COLON): Remove.
(%token ID_COLON): New token.
(rules): Use it.
(declarations, rules): Remove trailing semicolon.
(declaration, rules_or_grammar_declaration):
Allow empty (";") declaration.
(symbol_def): Remove empty actions; no longer needed.
(rules_or_grammar_declaration): Remove trailing semicolon.
(semi_colon.opt): Remove.
2002-12-07 06:01:20 +00:00
Paul Eggert 8f759107f1 Do not include <quotearg.h>; no longer needed.
(boundary): New type.
(location_t): Use it.  This allows locations to span file boundaries.
All member uses changed: file -> start.file or end.file (as needed),
first_line -> start.line, first_column -> start.column,
last_line -> end.line, last_column -> end.column.
(equal_boundaries): New function.
(LOCATION_RESET, LOCATION_STEP): Remove.
(LOCATION_PRINT): Remove.  All callers changed to use location_print.
(empty_location): Now const.
(location_print): New decl.
2002-12-07 05:58:38 +00:00
Paul Eggert b17a1fc541 * src/location.c: Include <quotearg.h>.
(empty_location): Now const.
(location_print): New function.  Follow the recommendation of the
GNU Coding Standards for locations that span file boundaries.
2002-12-07 05:57:32 +00:00
Paul Eggert 5fcdb07b70 LOCATION_PRINT -> location_print 2002-12-07 05:55:28 +00:00
Paul Eggert 7f8ba6c7f3 (current_file): Remove duplicate decl;
current_file is now owned by files.h.
2002-12-07 05:54:29 +00:00
Paul Eggert 4b68955b1d Include files.h. LOCATION_PRINT -> location_print. 2002-12-07 05:53:51 +00:00
Paul Eggert b69d743e78 (Table of Symbols): YYERROR_VERBOSE should
be #defined in the prologue, not in the Bison declarations.
This fixes Debian Bug 102878, reported by Shaul Karl.
2002-12-07 05:50:45 +00:00
Paul Eggert 4f21fffe7e (yy_reduce_print): Don't assume that yyrline[yyrule] promotes to int;
it might be unsigned int.
2002-12-07 05:46:30 +00:00
Paul Eggert c5d128ec1a (yy_reduce_print): Don't assume that yyrline[yyrule]
promotes to int; it might be unsigned int.
2002-12-07 05:45:46 +00:00
Paul Eggert b64755e391 Add strtoul.c
In src/scan-gram.l, move helper function definitions to epilogue.
2002-12-02 18:20:30 +00:00
Paul Eggert 022fb98e85 (AC_REPLACE_FUNCS): Add strtoul. 2002-12-02 18:19:51 +00:00
Paul Eggert 570fe42828 New file, from gnulib. 2002-12-02 18:19:30 +00:00
Paul Eggert 6c30d6413e (no_cr_read, extend_location): Move to epilogue,
and put only a forward declaration in the prologue.  This is for
consistency with the other scanner helper functions.
2002-12-01 02:37:56 +00:00
Paul Eggert 6ba5559289 Type clashes now generate warnings, not errors, since it
appears that POSIX may allow some grammars with type clashes.
2002-11-30 09:52:42 +00:00
Paul Eggert e927351156 (grammar_current_rule_check): Warn about
type clashes instead of complaining.
2002-11-30 09:52:11 +00:00
Paul Eggert 38e71ff8c8 (Type Clashes): Expect warnings, not complaints. 2002-11-30 09:51:50 +00:00
Paul Eggert 3b0ee3aa8b fund -> found 2002-11-30 09:25:06 +00:00
Paul Eggert 6e746484fc Add Yacc Library.
gram_error is static.
yylex and yyerror must be declared.
2002-11-30 09:20:52 +00:00
Paul Eggert 74724a70a5 Describe Yacc library, lex-param and parse-param changes. 2002-11-30 09:18:34 +00:00
Paul Eggert 1fec91df90 (gram_error): Now static. Add static decl.
(print_token_value): Omit parameter names from forward decl,
for consistency.
2002-11-30 09:16:54 +00:00
Paul Eggert d18f45311a (gram_error): Remove decl. 2002-11-30 09:16:32 +00:00
Paul Eggert 93dd49ab29 (Yacc Library): New node. Regenerate top menu. 2002-11-30 09:11:30 +00:00
Paul Eggert 1f14d97ae5 (lib_LIBRARIES, liby_a_SOURCES): New macros. 2002-11-30 09:10:55 +00:00
Paul Eggert 0af19cd0c1 lib/main.c, lib/yyerror.c: New files. 2002-11-30 09:10:20 +00:00
Paul Eggert 38a92d500a Emphasize that yylex and yyerror must be declared before being used.
E.g., one should typically declare them in the prologue.  Use GNU
coding style in examples.  Put "const" consistently after the type it
modifies.  Mention that C99 supports "inline".  Mention that yyerror
traditionally returns "int".
2002-11-30 07:42:37 +00:00
Paul Eggert 6b0d38ab2c [a-f] -> [abcdef], so that we don't assume the C locale. 2002-11-29 09:03:16 +00:00
Paul Eggert 88510f9c07 %parse-param and %lex-param now take just one argument, the
declaration; the argument name is deduced from the declaration.
2002-11-29 08:45:33 +00:00
Paul Eggert da90e18c6e (Simple LALR Calculator): Adopt new convention for %parse-param
and %lex-param.
2002-11-29 08:45:14 +00:00
Paul Eggert 763ed7a687 "," now elicits a warning, rather than being
a token; this is more compatible with byacc.
2002-11-29 08:44:40 +00:00
Paul Eggert 1773ceee65 (add_param): New function.
(COMMA): Remove.
(declaration): Implement new rule for %parse-param and %lex-param.
2002-11-29 08:44:04 +00:00
Paul Eggert feeb0edaf1 (Parser Function, Pure Calling, Error Reporting, Table of Symbols):
%parse-param and %lex-param now take just one argument, the
declaration; the argument name is deduced from the declaration.
2002-11-29 08:43:12 +00:00
Paul Eggert 78c3da9e09 (reader): Remove gram_control; it wasn't being used. 2002-11-29 05:59:59 +00:00
Paul Eggert 4f39538148 Sync with gnulib. 2002-11-28 00:42:28 +00:00
Paul Eggert bb92250c78 Rename identifiers to avoid real and potential collisions. 2002-11-27 18:36:41 +00:00
Paul Eggert 41141c568e (STEP): Renamed from YY_STEP. All uses changed.
(STRING_GROW): Renamed from YY_OBS_GROW.  All uses changed.
(STRING_FINISH): Renamed from YY_OBS_FINISH.  All uses changed.
(STRING_FREE): Renamed from YY_OBS_FREE.  All uses changed.
2002-11-27 18:34:14 +00:00
Paul Eggert f6d03984ae (struct gram_control_s, gram_control_t): Remove.
(YY_DECL): Don't use "yy" at start of local variables.
All uses changed, e.g., yylloc -> loc.
2002-11-27 18:33:42 +00:00
Paul Eggert ad8a3efc5a (print_token_value): Renamed from yyprint.
All uses changed.
(YYPARSE_PARAM, YYLEX_PARAM, yycontrol): Remove.  All uses changed.
The name "yycontrol" violates the name space rules, and this stuff
wasn't being used anyway.
(input): Remove action; this stuff wasn't being used.
(gram_error): Rename local variable yylloc -> loc.
2002-11-27 18:33:18 +00:00
Paul Eggert 831d3c996d yyprint -> print_token_value 2002-11-27 18:32:12 +00:00
Paul Eggert 136d65300d (_AT_CHECK_PRINTER_AND_DESTRUCTOR): yyout -> yyoutput,
to avoid collision with lex macro described by Bruce Lilly in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001929.html>.
2002-11-27 18:31:27 +00:00
Paul Eggert 14740648d5 (b4_yysymprint_generate): yyout -> yyoutput,
to avoid collision with lex macro described by Bruce Lilly in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001929.html>.
2002-11-27 18:30:50 +00:00
Paul Eggert 08cae37b47 Update version to 1.75d. 2002-11-25 08:21:40 +00:00
Paul Eggert ceed6cdce5 Regenerate. 2002-11-25 08:05:09 +00:00
Paul Eggert 3af4feb22f Version 1.75c. 2002-11-25 07:56:44 +00:00
Paul Eggert dda7aa54b6 Sync with gnulib. 2002-11-25 07:50:25 +00:00
Paul Eggert 16f37b35a5 (Actions after errors): Use an output format
more similar to that of the Printers and Destructors test.
Test the position of the ';' token too.
(Printers and Destructors): Likewise.
(Printers and Destructors: %glr-parser): Remove for now, to avoid
unnecessarily alarming people when the test fails.
2002-11-25 07:36:54 +00:00
Paul Eggert 300a796626 (yyerrlab1): Move this label down, so that the
parser does not discard the lookahead token if the user code
invokes YYERROR.  This change is required for POSIX conformance.
2002-11-25 06:42:10 +00:00
Paul Eggert f6cf0f6e5f Sync with gnulib. 2002-11-23 07:25:41 +00:00
Paul Eggert 69e16b4c5e Sync with gnulib again. 2002-11-22 00:30:58 +00:00
Paul Eggert 0368ae1269 Sync with gnulib. 2002-11-21 19:14:24 +00:00
Paul Eggert 580043087e * lib/argmatch.c, lib/argmatch.h: Sync with gnulib.
Avoid use of <assert.h>, as the GNU Coding Standards hint that one
should use `if (! x) abort ();' rather than `assert (x);', and
anyway it's one less thing to worry about configuring.
2002-11-21 07:37:24 +00:00
Paul Eggert 6f5db56451 Sync with gnulib. 2002-11-21 07:35:58 +00:00
Paul Eggert 500bbfcd81 (_AT_TEST_GLR_CXXTYPES): Do not include <assert.h>.
Replace all instances of assert with abort.
2002-11-21 05:28:44 +00:00
Paul Eggert 63d0fb9ce4 (_AT_DATA_CALC_Y): Do not include <assert.h>.
Replace all instances of assert with abort.
2002-11-21 05:28:09 +00:00
Paul Eggert 7a86d7eba9 (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Do not include <assert.h>. 2002-11-21 05:27:28 +00:00
Paul Eggert 4344c500b5 (get_color_str, get_textmode_str, get_shape_str,
get_layoutalgorithm_str, get_decision_str, get_orientation_str,
get_node_alignement_str, get_arrow_mode_str, get_crossing_type_str,
get_view_str, get_linestyle_str, get_arrowstyle_str): Use abort rather
than assert.
2002-11-21 05:26:41 +00:00
Paul Eggert 443594d0c4 (conflict_row, pack_vector): Use abort rather than assert.
(tables_generate): Use verify rather than assert.
2002-11-21 05:25:55 +00:00
Paul Eggert 87aabbff99 Do not include <assert.h>.
(verify): New macro.
2002-11-21 05:24:53 +00:00
Paul Eggert 2f82502a6f (symbol_user_token_number_set, symbol_make_alias, symbol_pack):
Use abort rather than assert.
2002-11-21 05:23:46 +00:00
Paul Eggert fe22d5d20f (struniq_assert): Now returns void, and aborts if the assertion is false. 2002-11-21 05:22:29 +00:00
Paul Eggert ec14f0c83f (state_new, state_free, state_transitions_set, state_reduction_find):
Use abort rather than assert.
2002-11-21 05:21:35 +00:00
Paul Eggert 35dcf428c9 (packgram, reader): Use abort rather than assert. 2002-11-21 05:20:49 +00:00
Paul Eggert a932883e41 (prepare_rules, token_definitions_output): Use abort rather than assert. 2002-11-21 05:20:05 +00:00
Paul Eggert b475e0cce5 (nullable_compute): Use abort rather than assert. 2002-11-21 05:18:57 +00:00
Paul Eggert 58a84254ef (set_goto_map, map_goto): Use abort rather than assert. 2002-11-21 05:18:08 +00:00
Paul Eggert 7223426a2b (trace_argmatch, report_argmatch): Use verify rather than assert. 2002-11-21 05:17:21 +00:00
Paul Eggert b9a0104860 (resolve_sr_conflict): Use abort rather than assert. 2002-11-21 05:16:36 +00:00
Paul Eggert 937fd8646f Do not include <assert.h>.
(hash_lookup, hash_get_first, hash_get_next,
hash_find_entry, hash_rehash, hash_insert): Likewise.
2002-11-21 05:15:52 +00:00
Paul Eggert b973108e1e (ARRAY_CARDINALITY): Do not bother to #undef.
(ARGMATCH_CONSTRAINT): New macro.
(ARGMATCH_ASSERT): Use it.
2002-11-21 05:12:27 +00:00
Paul Eggert 51dffcbca9 Do not include <assert.h>.
(yydoAction, yyglrReduce, yysplitStack, yyresolveStates,
yyresolveAction, yyprocessOneStack): Use abort rather than assert.
2002-11-21 05:11:29 +00:00
Paul Eggert 76ae81983c * data/glr.c (yygetLRActions): Replace `yyindex' with
`yytable[yyindex]' to fix typo introduced in my 2002-11-09 patch.
This fixes the regression with Sun ONE Studio 7 cc that I reported in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001892.html>.
2002-11-19 09:33:21 +00:00
Paul Eggert df38312ab0 (yygetLRActions): Replace `yyindex' with
`yytable[yyindex]' to fix typo introduced in my 2002-11-09 patch.
This fixes the regression with Sun ONE Studio 7 cc that I reported in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001892.html>.
2002-11-19 07:35:29 +00:00
Paul Eggert 8d8a7238ee Pacify Sun ONE Studio 7 lint. Also, rename "ParseError"
to "SyntaxError" for consistency with my 2002-11-15 change.
2002-11-18 20:08:57 +00:00
Akim Demaille d3c4e709ff * doc/bison.texinfo (Tracing): `yyprint' shouldn't prepend a
space.
From Tim Van Holder.
2002-11-18 09:33:22 +00:00
Paul Eggert 4e8c79eb7f (_AT_DATA_CALC_Y): Make vars static instead of
extern when possible.  Remove unused initializations.
2002-11-18 07:52:13 +00:00
Paul Eggert ee16363fd2 (YYDPRINTF, YYDSYMPRINT, YYDSYMPRINTF) [!YYDEBUG]: Do not define to
{}, since this breaks the common use of `YYDPRINTF ((...));' if a
single statement is desired (e.g. before `else').  Work around GCC
warnings by surrounding corresponding calls with {} if needed.
(yyhasResolvedValue): Remove unused function.
(yymergeOptionSets, yyresolvStack): Use `continue;' for empty
loop body.
(yyreportSyntaxError): Renamed from yyreportParseError.
(yyrecoverSyntaxError): Renamed from yyrecoverParseError.
All uses changed.
2002-11-18 07:51:47 +00:00
Akim Demaille 60a3dcf956 Really remove it. 2002-11-16 12:36:30 +00:00
Akim Demaille b0937b2259 Augment the similarity between GLR and LALR traces.
* data/yacc.c (yy_stack_print, YY_STACK_PRINT, yy_reduce_print)
(YY_REDUCE_PRINT): New.
(yyparse): Use them.
* data/glr.c (yy_reduce_print): Use YYFPRINTF, no need for
YYDPRINT here.
(yyglrReduce, yyrecoverParseError, yyparse): Don't report the
state reached after the reduction/recovery, since...
(yyparse, yyprocessOneStack): Report the state we are entering in.
2002-11-16 12:32:27 +00:00
Akim Demaille c5e3e51055 * src/getargs.h, src/getargs.c (trace_e, trace_args, trace_types):
Add support for --trace=skeleton.
* src/scan-skel.l: %option debug.
Scan strings of non-@ or n instead of character by character.
(scan_skel): Handle trace_skeleton.
(QPUTS): New.
(@output_parser_name@, @output_header_name@): ``Restore'' their
support (used to be M4 macros).
* data/yacc.c: Quote larger chunks, a la glr.c.
* data/lalr1.cc: Likewise.
The header guards are no longer available, so use some other
string than `YYLSP_NEEDED'.
2002-11-16 12:31:36 +00:00
Akim Demaille 4c6cc1db75 Make the ``Printers and Destructors'' test more verbose, taking
`yacc.c''s behavior as (possibly wrong) reference.
* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Use printf
instead of fprint on stdout.
Set and report the last_line of the symbols.
Consistently display values and locations.
2002-11-16 12:30:23 +00:00
Paul Eggert 6d9e8019e1 * data/yacc.c: Avoid over-quoting of __line__ and __file__. 2002-11-16 08:14:23 +00:00
Paul Eggert ee41006f01 Avoid over-quoting of __line__ and __file. 2002-11-16 08:13:40 +00:00
Paul Eggert b25d88f6d2 * tests/actions.at (Actions after errors): New test case. 2002-11-16 07:32:09 +00:00
Paul Eggert 5dac0025f6 (Actions after errors): New test case. 2002-11-16 07:31:35 +00:00
Paul Eggert f0616f0b5c Regenerate. 2002-11-15 20:58:07 +00:00
Paul Eggert 6e649e659e * data/glr.c, data/lalr1.cc, data/yacc.cc, doc/bison.texinfo,
src/conflicts.c, src/parse-gram.y, src/tables.c, src/tables.h,
tests/action.at, tests/calc.at, tests/conflicts.at,
tests/cxx-type.at, tests/regression.at:
"parse error" -> "syntax error" for POSIX compatibility.
"parsing stack overflow..." -> "parser stack overflow" so
that code matches Bison documentation.
2002-11-15 20:32:21 +00:00
Akim Demaille 0f39aab92a * src/parse-gram.y (declaration): Have %parse-param and %lex-param
take two BRACED_CODE, not two string_content.
Free the scanner's obstack when we are done.
(code_content): New.
* tests/calc.at: Adjust.
* doc/bison.texinfo: Adjust.
Also, make sure to include the `,' for these declarations.
2002-11-15 16:42:16 +00:00
Akim Demaille 761c1926a1 * m4/prereq.m4: Removed the commented jm_PREREQ_HASH
definition; avoids potential autoreconf problems.
2002-11-15 16:30:37 +00:00
Akim Demaille 0258d1661c 2002-11-15 Tim Van Holder <[email protected]>
* src/.cvsignore: Add src-gram.c.
* tests/.cvsignore: Add atlocal.
* config/.cvsignore, m4/.cvsignore, po/.cvsignore:
Add several files that autoreconf may bring in during
bootstrap.
2002-11-15 09:04:37 +00:00
Akim Demaille b0f98b1016 Always check the value returned by yyparse.
* tests/calc.at (_AT_DATA_CALC_Y): Have `main' exit with the value
returned by yyparse.
(_AT_CHECK_CALC_ERROR): Take the expected exit value as argument.
Adjust calls.
* tests/glr-regr1.at (glr-regr1.y): Have `main' exit with the value
returned by yyparse.
2002-11-15 08:56:40 +00:00
Paul Eggert edbc04c709 (AT_TEST_CPP_GUARD_H): Compile with -I., as Forte 7 C requires it,
and it shouldn't hurt on other compilers.
2002-11-15 01:57:23 +00:00
Paul Eggert 7ec1b48eb8 * src/output.c (output_skeleton): Call xfopen instead of
duplicating xfopen's body.
2002-11-15 01:29:53 +00:00
Paul Eggert 93ba6bf344 (output_skeleton): Call xfopen instead of duplicating xfopen's body. 2002-11-15 01:28:40 +00:00
Paul Hilfinger 970785f1a0 * data/glr.c (yyFail): Always set yyerrflag. Corrects regression
on input.at test.
2002-11-14 23:18:55 +00:00
Paul Eggert cfff7583d2 Mention the bugs fixed by the latest change. 2002-11-14 23:11:11 +00:00
Paul Eggert 8fcc7db138 * tests/headers.at (AT_TEST_CPP_GUARD_H): Don't assume that
"$CC -E foo.h" is allowed, as this doesn't work with the Portland
Group compiler.  Instead, use "$CC -E bar.c".  Include the .h
file twice in the grammar, as an extra check.

* tests/input.at (Torturing the Scanner): Surround the
backslash-newline tests with "#if 0", to make it less likely that
we'll run into compiler bugs.  Bring back solitary \ inside
comment, but add a closing comment to work around HP C bug.  Don't
test backslash-newline in C character constant.  This should fix
the input.at bug reported by Nelson H. F. Beebe in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001893.html>.
2002-11-14 23:08:27 +00:00
Paul Eggert 1d39f854cf (AT_TEST_CPP_GUARD_H): Don't assume that "$CC -E foo.h" is allowed, as
this doesn't work with the Portland Group compiler.  Instead, use "$CC
-E bar.c".  Include the .h file twice in the grammar, as an extra
check.
2002-11-14 23:08:01 +00:00
Paul Eggert dda7a53e4d (Torturing the Scanner): Surround the backslash-newline tests with
"#if 0", to make it less likely that we'll run into compiler bugs.
Bring back solitary \ inside comment, but add a closing comment to
work around HP C bug.  Don't test backslash-newline in C character
constant.  This should fix the input.at bug reported by Nelson
H. F. Beebe in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001893.html>.
2002-11-14 22:53:47 +00:00
Akim Demaille f32b346d84 * tests/synclines.at (AT_SYNCLINES_COMPILE): Ignore the exit
status of the compiler.
Calling `exit 1' is no longer needed.
Reported by Nelson H. F. Beebe.
2002-11-14 11:09:51 +00:00
Akim Demaille 4e8d992c7d * tests/synclines.at (AT_SYNCLINES_COMPILE): Ignore the exit
status of the compiler.
Reported by Nelson H. F. Beebe.
2002-11-14 11:07:00 +00:00
Akim Demaille 9501dc6e69 * tests/atlocal.in (CPPFLAGS): We have config.h.
* tests/testsuite.at (AT_DATA_GRAMMAR_PROLOGUE, AT_DATA_GRAMMAR):
New.
* tests/actions.at, tests/calc.at, tests/conflicts.at,
* tests/cxx-type.at, tests/glr-regr1.at, tests/headers.at,
* tests/regression.at, tests/torture.at: Use them for all the
grammars that are to be compiled.
* tests/cxx-type.at (_AT_TEST_GLR_CALC): Rename as...
* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): this.
* doc/bison.texinfo (GLR Parsers): Document `inline'.
2002-11-14 09:58:01 +00:00
Akim Demaille 18b519c0d6 * doc/bison.texinfo: Various formatting changes (alignments in
samples, additional @group/@end group, GCS in samples.
Use @deffn instead of simple @table to define the directives,
macros, variables etc.
2002-11-14 08:32:10 +00:00
Paul Eggert daa33def28 Fix some bugs reported by Albert Chin-A-Young in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001881.html>.
2002-11-14 01:24:12 +00:00
Paul Eggert 2b42986e75 (export YYLTYPE): Don't invoke "cc a.c b.c -o c"; the HP-UX 11i C
compiler chatters during compilation.  Instead, invoke "cc -c a.c -o
a.o; cc -c b.c -o b.o; cc a.o b.o -o c".
2002-11-14 00:36:03 +00:00
Paul Eggert efc6bf1b94 (Torturing the Scanner): Don't invoke "cc a.c b.c
-o c"; the HP-UX 11i C compiler chatters during compilation.
Instead, invoke "cc -c a.c -o a.o; cc -c b.c -o b.o; cc a.o b.o -o c".
2002-11-14 00:35:27 +00:00
Paul Eggert 149365be01 (Torturing the Scanner): Remove lines containing
solitary backslashes, as they tickle a bug in the HP-UX 11i C
compiler.
2002-11-14 00:26:45 +00:00
Paul Eggert 9a86cdb99b * tests/glr-regr1.at (Badly Collapsed GLR States): Avoid //
comments, since they're not portable.  Use GNU coding style.
2002-11-14 00:04:57 +00:00
Paul Eggert c240826c06 (Badly Collapsed GLR States): Avoid //
comments, since they're not portable.  Use GNU coding style.
2002-11-13 23:20:52 +00:00
Akim Demaille caf52fdfab Bump to 1.75c. 2002-11-13 15:17:35 +00:00
Akim Demaille 9c1e26bd3b * data/yacc.c: Leave bigger chunks of quoted text.
(YYDSYMPRINTF): New.
Use it to report symbol activities.
* data/glr.c (YYDSYMPRINTF): New.
Use it.
2002-11-13 09:49:49 +00:00
Paul Eggert f7e096fee3 (AC_INIT): Bump version to 1.75c. 2002-11-13 09:06:47 +00:00
Paul Eggert 73dbb6420e Regenerate. 2002-11-13 08:34:23 +00:00
Paul Eggert 87f721cc87 Version 1.75b. 2002-11-13 08:32:08 +00:00
Paul Eggert ff03259279 (yydoAction): Return YYRESULTTAG, not int.
(yyglrReduce): Return yyok, not 0.
This should avoid the enumerated-type warnings reported
by Nelson H. F. Beebe in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001872.html>.
2002-11-13 07:46:19 +00:00
Paul Eggert dbba6a3be7 [! BITSET_INLINE]: Remove.
(bitset_set, bitset_reset, bitset_test): Rename local vars
to avoid shadowing warnings by GCC.
2002-11-13 07:02:51 +00:00
Paul Eggert e84e65da40 (BITSET_INLINE): Remove. 2002-11-13 07:02:13 +00:00
Paul Eggert 53b7799056 (inline): Remove #define. It's the user's responsibility to #define
it away, just like 'const'.  This fixes one of the bugs reported by
Nelson H.F. Beebe in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001873.html>.
2002-11-13 06:48:18 +00:00
Paul Eggert 412f8a5975 Revamp regular expressions so that " and '
do not confuse xgettext.
2002-11-13 06:40:35 +00:00
Paul Eggert 322c501d89 Remove src/parse-gram.c, src/scan-gram.c,
src/system.h.  Add src/parsegram.y, src/scan-gram.l.
2002-11-13 06:40:06 +00:00
Paul Eggert 8a1dd2fe05 (po-check): Scan .l and .y files instead
of the .c and the .h files that they generate.  Look for N_
as well as for _.  Try to avoid matching #define for N_ and _.
2002-11-13 06:39:26 +00:00
Paul Eggert 0eae1c91c8 (struniq_new): Do not declare the return type
to be 'const'; this violates the C standard.
2002-11-13 06:27:18 +00:00
Akim Demaille be14ade55e * src/Makefile.am (LDADD): Link $(LIBINTL) last to avoid the
duplicate definition of optind on Tru64 UNIX 4.0D with the Compaq
linker.
2002-11-12 17:51:38 +00:00
Akim Demaille cc13ba4dc0 * Makefile.maint: Sync with Autoconf:
(local_updates): New.
2002-11-12 17:50:21 +00:00
Akim Demaille 05291fbc74 * Makefile.maint: Sync with Autoconf:
(local_updates): New.
2002-11-12 16:11:49 +00:00
Akim Demaille 1f5fd52e9b * po/POTFILES.in (src/lalr.c, src/state.c): Remove 2002-11-12 16:09:38 +00:00
Akim Demaille 43a91d61eb com.compilers. 2002-11-12 15:15:21 +00:00
Akim Demaille 283f1e6482 * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Display the
locations.
2002-11-12 10:18:05 +00:00
Akim Demaille 886b69d197 * data/c.m4 (b4_yysymprint_generate): Pass *yyvaluep to YYPRINT,
not yyvalue.
2002-11-12 09:44:41 +00:00
Akim Demaille 3df374151b * tests/actions.at (AT_CHECK_PRINTER_AND_DESTRUCTOR): New.
Use it to test the GLR parser.
2002-11-12 09:07:38 +00:00
Akim Demaille 7bd6c77e5e * tests/regression.at (input.y): s/YYEOF/MYEOF/, as the skeleton
defines it.
* data/glr.c (yystos): New.
(b4_yysymprint_generate, b4_yydestruct_generate): Invoke.
(YYDSYMPRINT): New.
(yyval): Don't define it, it is handled via M4.
(yyrecoverParseError): Free verbosely the discarded symbols.
* data/yacc.c (yysymprint): Remove, rather...
(b4_yysymprint_generate): invoke.
* data/c.m4 (b4_yysymprint_generate): New.
Accept pointers as arguments, as opposed to the version from
yacc.c.
(b4_yydestruct_generate): Likewise.
* tests/cations.at (Printers and Destructors): Use Bison directives
instead of CPP macros.
Don't rely on internal details.
2002-11-12 09:03:13 +00:00
Akim Demaille b0400cc6ef * data/c.m4 (b4_yydestruct_generate, b4_symbol_actions): New.
* data/yacc.c: Rename yychar1 as yytoken, as in glr.c.
Don't work on yychar (i.e., do set it to YYEMPTY, don't match
it against YYEMPTY and so forth), work on yytoken (i.e., set
it to YYEMPTY etc.).
(yydestruct): Replace with a b4_yydestruct_generate invocation.
(b4_symbol_actions): Remove.
* data/glr.c (YYTRANSLATE): As for yacc.c, if negative, it stands
for 0, end-of-input.
2002-11-12 08:45:40 +00:00
Akim Demaille 72f889cca3 * doc/bison.texinfo (Destructor Decl): New. 2002-11-12 08:35:00 +00:00
Akim Demaille b1ae9233bc * src/tables.c (tables_generate): Use free for pointers that
cannot be NULL, not XFREE.
(pack_vector): Use assert, not fatal, for bound violations.
* src/state.c (state_new): Likewise.
* src/reader.c (reader): Likewise.
* src/lalr.c (set_goto_map): Likewise.
* src/location.h (LOCATION_PRINT): If first_line is 0, just issue
the file name.
2002-11-12 08:30:47 +00:00
Akim Demaille 7ec2d4cd39 * src/scan-gram.l, src/reader.h (scanner_last_string_free):
Restore.
* src/scan-gram.l (last_string): Is global to the file, not to
yylex.
* src/parse-gram.y (input): Don't append the epilogue here,
(epilogue.opt): do it here, and free the scanner's obstack.
* src/reader.c (epilogue_set): Rename as...
(epilogue_augment): this.
* data/c.m4 (b4_epilogue): Defaults to empty.
2002-11-12 08:26:38 +00:00
Akim Demaille 573a6cd356 * src/getargs.c (long_options): Remove duplicates.
* src/vmsgetargs.c, src/build.com, src/bison.cld, src/vmshlp.mar:
Remove.
* doc/bison.rnh: Remove.
* doc/bison.texinfo (VMS Invocation): Remove.
2002-11-12 08:13:10 +00:00
Akim Demaille 95612cfa60 * src/struniq.h, src/struniq.c (struniq_t): Is const.
(STRUNIQ_EQ, struniq_assert, struniq_assert_p): New.
Use struniq for symbols.
* src/symtab.h (symbol_t): The tag member is a struniq.
(symbol_type_set): Adjust.
* src/symtab.c (symbol_new): Takes a struniq.
(symbol_free): Don't free the tag member.
(hash_compare_symbol_t, hash_symbol_t): Rename as...
(hash_compare_symbol, hash_symbol): these.
Use the fact that tags as struniqs.
(symbol_get): Use struniq_new.
* src/symlist.h, src/symlist.c (symbol_list_n_type_name_get):
Returns a strniq.
* src/reader.h (merger_list, grammar_currentmerge_set): The name
and type members are struniqs.
* src/reader.c (get_merge_function)
(grammar_current_rule_merge_set): Adjust.
(TYPE, current_type): Are struniq.
Use struniq for file names.
* src/files.h, src/files.c (infile): Split into...
(grammar_file, current_file): these.
* src/scan-gram.c (YY_USER_INIT, handle_syncline): Adjust.
* src/reduce.c (reduce_print): Likewise.
* src/getargs.c (getargs): Likewise.
* src/complain.h, src/complain.c: Likewise.
* src/main.c (main): Call struniqs_new early enough to use it for
file names.
Don't free the input file name.
2002-11-12 08:05:59 +00:00
Akim Demaille 3e6656f9ab * src/symtab.c (symbol_free): Remove dead deactivated code:
type_name are properly removed.
Don't use XFREE to free items that cannot be NULL.
* src/struniq.h, src/struniq.c: New.
* src/main.c (main): Initialize/free struniqs.
* src/parse-gram.y (%union): Add astruniq member.
(yyprint): Adjust.
* src/scan-gram.l (<{tag}>): Return a struniq.
Free the obstack bit that used to store it.
* src/symtab.h (symbol_t): The 'type_name' member is a struniq.
2002-11-12 07:55:55 +00:00
Paul Eggert ccdb39e0a6 Add src/system.h; this isn't really needed, but it keeps "make update"
happy.
2002-11-12 07:51:44 +00:00
Paul Eggert 62ddaef6a7 Regenerate. 2002-11-12 07:44:22 +00:00
Paul Eggert ea44c25efc No need to keep this file in CVS, since it's automatically generated. 2002-11-12 07:40:11 +00:00
Paul Eggert 7672019c42 Revamp to fix many (but not all) of the C- and M4-related quoting
problems.  Among other things, this fixes the Bison bug reported
by Jan Hubicka when processing the Bash grammar.
2002-11-12 07:33:36 +00:00
Paul Eggert 5b7f88c7f2 (Torturing the Scanner): Add tests that @oline@,
__oline__, #output, $@, and @{ do not have unintended meanings.
2002-11-12 07:28:25 +00:00
Paul Eggert e9683cfd3d (yylineno, yyoutname): Remove static vars, replacing
them with auto vars.
Switch to new escape scheme, where @ is the escape character uniformly.
Abort if a stray escape character is found.  Avoid unbounded input
buffer when parsing non-escaped text.
2002-11-12 07:27:51 +00:00
Paul Eggert ac060e78a3 (<SC_CHARACTER>): Don't worry about any backslash
escapes other than \\ and \'; this simplifies the code.
(<SC_STRING>): Likewise, for \\ and \".
(<SC_COMMENT,SC_LINE_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,
SC_PROLOGUE,SC_EPILOGUE>): Escape $ and @, too.
Use new escapes @{ and @} for [ and ].
2002-11-12 07:27:04 +00:00
Paul Eggert 6c239755dc (prologue_augment, epilogue_set):
Quote filenames for C and M4.
2002-11-12 07:26:27 +00:00
Paul Eggert 3813e141f8 (escaped_file_name_output): New function.
(prepare_symbols): Quote tokens for M4.
(prepare): Don't insert output_infix, output_prefix,
output_parser_name, output_header_name; this is now down by scan-skel.
Insert skeleton as a C string.
(user_actions_output, symbol_destructors_output,
symbol_printers_output): Quote filenames for C and M4.
2002-11-12 07:25:36 +00:00
Paul Eggert a027c30d42 (MUSCLE_GROW_STRING_PAIR): Remove; unused.
(MUSCLE_OBSTACK_SGROW, MUSCLE_INSERT_C_STRING): New macros.
2002-11-12 07:24:33 +00:00
Paul Eggert 4e956a7d9e Include quotearg.h, since we need to quote C strings now.
(muscle_init): Quote filename as a C string.
2002-11-12 07:23:52 +00:00
Paul Eggert 42481a1fd1 (output_infix): Remove; all uses removed. 2002-11-12 07:23:13 +00:00
Paul Eggert 947427ae83 Use new @ escapes consistently.
(b4_input_suffix, b4_output_parser_suffix, b4_output_parser_name,
b4_output_header_suffix, b4_output_header_name, b4_header_guard):
Remove, since they couldn't handle arbitrary characters in file
names.

Remove use of "#ifdef b4_header_guard", since it
mishandled funny characters in file names, and anyway it isn't
needed any more.

(YYSTYPE_IS_TRIVIAL): Define when the .h file would.
2002-11-12 07:22:01 +00:00
Paul Eggert 6ad762a8c0 Use new @ escapes consistently.
(b4_input_suffix, b4_output_parser_suffix, b4_output_parser_name,
b4_output_header_suffix, b4_output_header_name, b4_header_guard):
Remove, since they couldn't handle arbitrary characters in file
names.
Use YYSLP_NEEDED instead of b4_header_guard.
2002-11-12 07:21:01 +00:00
Paul Eggert fa3f2a885a (b4_copyright): Omit file name from comment, since
the file name could contain "*/".
(b4_synclines_flag): Don't quote the 2nd argument; it should already
be quoted.  All uses changed.
2002-11-12 07:15:59 +00:00
Paul Eggert acea4f3bb6 Fix the test failure due to GCC warnings described in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001815.html>.
* data/glr.c (yyis_pact_ninf, yyis_table_ninf): New macros, which
evaluate to 0 if it's impossible for NINF to be in the respective
table.
(yygetLRActions, yyrecoverParseError): Use them.

* src/scan-gram.l (unexpected_end_of_file): Fix bug: columns were
counted in the token inserted at end of file.  Now takes
location_t *, not location_t, so that the location can be
adjusted.  All uses changed.

* tests/regression.at (Invalid inputs): Adjust wording in
diagnostic to match the new behavior.

* tests/torture.at (AT_DATA_TRIANGULAR_GRAMMAR,
AT_DATA_HORIZONTAL_GRAMMAR, AT_DATA_LOOKAHEADS_GRAMMAR,
AT_DATA_STACK_TORTURE): Replace `assert (x);' with `if (! (x))
abort ();'.  This reduces the runtime of the "Many lookaheads"
test from 27.6 to 2.7 minutes on a 440 MHz Ultrasparc III running
GCC 3.2.
2002-11-10 07:10:08 +00:00
Paul Eggert 66871a8103 (AT_DATA_TRIANGULAR_GRAMMAR, AT_DATA_HORIZONTAL_GRAMMAR,
AT_DATA_LOOKAHEADS_GRAMMAR, AT_DATA_STACK_TORTURE): Replace `assert
(x);' with `if (! (x)) abort ();'.  This reduces the runtime of the
"Many lookaheads" test from 27.6 to 2.7 minutes on a 440 MHz
Ultrasparc III.
2002-11-10 07:04:07 +00:00
Paul Eggert 2115939b03 (Invalid inputs): Adjust wording in diagnostic to match the new behavior. 2002-11-10 05:27:18 +00:00
Paul Eggert 345532d70b (unexpected_end_of_file): Fix bug: columns were counted in the token
inserted at end of file.  Now takes location_t *, not location_t, so
that the location can be adjusted.  All uses changed.
2002-11-10 05:17:56 +00:00
Paul Eggert 944ed9f4e9 Fix the test failure due to GCC warnings described in
<http://mail.gnu.org/pipermail/bug-bison/2002-November/001815.html>.

* data/glr.c (yyis_pact_ninf, yyis_table_ninf): New macros, which
evalutate to 0 if it's impossible for NINF to be in the respective
table.
(yygetLRActions, yyrecoverParseError): Use them.
2002-11-10 04:31:38 +00:00
Paul Eggert 09d353a08f (scanner_last_string_free): Remove decl. 2002-11-08 06:14:29 +00:00
Paul Eggert 20ef1ad524 * src/parse-gram.y (CHARACTER): Remove unused token.
All uses removed.

* src/scan-gram.l: Remove stack option.  We no longer use the
stack, since the stack was never deeper than 1; instead, use the
new auto var c_context to record the stacked value.

Remove nounput option.  At an unexpected end of file, we now unput
the minimal input necessary to end cleanly; this simplifies the
code.

Avoid unbounded token sizes where this is easy.

(unexpected_end_of_file): New function.
Use it to systematize the error message on unexpected EOF.
(last-string): Now auto, not static.
(YY_OBS_FREE): Remove unnecessary do while (0) wrapper.
(scanner_last_string_free): Remove; not used.
(percent_percent_count): Move decl to just before use.
(SC_ESCAPED_CHARACTER): Return ID at unexpected end of file,
not the (never otherwised-used) CHARACTER.
2002-11-08 05:22:51 +00:00
Paul Eggert a706a1cc03 Remove stack option. We no longer use the stack, since the stack was
never deeper than 1; instead, use the new auto var c_context to record
the stacked value.

Remove nounput option.  At an unexpected end of file, we now unput
the minimal input necessary to end cleanly; this simplifies the
code.

Avoid unbounded token sizes where this is easy.

(unexpected_end_of_file): New function.
Use it to systematize the error message on unexpected EOF.
(last-string): Now auto, not static.
(YY_OBS_FREE): Remove unnecessary do while (0) wrapper.
(scanner_last_string_free): Remove; not used.
(percent_percent_count): Move decl to just before use.
(SC_ESCAPED_CHARACTER): Return ID at unexpected end of file,
not the (never otherwised-used) CHARACTER.
2002-11-08 05:20:20 +00:00
Paul Eggert 87fbb0bffc (CHARACTER): Remove unused token. All uses removed. 2002-11-08 05:19:30 +00:00
Akim Demaille 959e5f515a Update. 2002-11-07 14:28:40 +00:00
Akim Demaille 1c0c3e955d Typo. 2002-11-07 12:54:51 +00:00
Akim Demaille 93724f139a Let yyerror always receive the msg as last argument, so that
yyerror can be variadic.
* data/yacc.c (b4_yyerror_args): New.
Use it when calling yyerror.
* data/glr.c (b4_yyerror_args, b4_lyyerror_args): New.
Use it when calling yyerror.
* doc/bison.texinfo (Error Reporting): Adjust.
* tests/calc.at (_AT_DATA_CALC_Y): Adjust.
* tests/cxx-type.at (_AT_TEST_GLR_CALC): Adjust.
2002-11-07 12:52:19 +00:00
Akim Demaille 0e25cad542 Regen. 2002-11-07 12:50:34 +00:00
Paul Eggert 58918640ad * src/scan-gram.l (unexpected_end_of_file): New function.
Use it to systematize the error message on unexpected EOF.
2002-11-07 08:15:28 +00:00
Paul Eggert 8e6ef48342 (unexpected_end_of_file): New function.
Use it to systematize the error message on unexpected EOF.
2002-11-07 08:15:11 +00:00
Paul Eggert fdac0091ce Minor spelling and punctuation fix. 2002-11-07 07:07:25 +00:00
Paul Eggert 4e0813a6cf Fix minor troff and spelling glitches. 2002-11-07 07:06:29 +00:00
Akim Demaille 6e40b4ebd4 #line should have quoted strings.
Ideally, this should be done by m4_quotearg.
* src/scan-skel.l: Include quotearg.h.
Quote __ofile__.
* src/output.c (symbol_printers_output)
(symbol_destructors_output): Quote the file name.
2002-11-06 16:22:04 +00:00
Akim Demaille 3d9a71d28a Typo. 2002-11-06 15:35:03 +00:00
Akim Demaille 2dfbfc122c * tests/regression.at (Invalid inputs): Adjust to the recent
messages.
2002-11-06 14:14:48 +00:00
Akim Demaille 437c2d8000 Restore --no-lines.
Reported by Jim Kent.
* data/c.m4 (b4_syncline): New.
* data/glr.c, data/yacc.c, data/lalr1.cc: Use it.
* src/reader.c (prologue_augment, epilogue_set): Use b4_syncline.
* src/output.c (user_actions_output): Likewise.
(prepare): Define 'b4_synclines_flag'.
2002-11-06 14:11:47 +00:00
Akim Demaille 900c5db537 * src/main.c (main): Free `infile'.
* src/scan-gram.l (handle_syncline): New.
Recognize `#line'.
* src/output.c (user_actions_output, symbol_destructors_output)
(symbol_printers_output): Use the location's file name, not
infile.
* src/reader.c (prologue_augment, epilogue_set): Likewise.
2002-11-06 08:08:46 +00:00
Paul Eggert e183b12388 * src/scan-gram.l: Use more accurate diagnostics, e.g.
"integer out of range" rather than "invalid value".
* tests/input.at (Invalid $n, Invalid @n): Change expected wording
accordingly.
2002-11-06 07:04:24 +00:00
Paul Eggert 9906579faa (Invalid $n, Invalid @n): Change expected wording accordingly. 2002-11-06 07:01:55 +00:00
Paul Eggert 98f2caaa5f Use more accurate diagnostics, e.g.
"integer out of range" rather than "invalid value".
2002-11-06 07:01:06 +00:00
Paul Eggert 886a425c6f Bison now parses C99 lexical constructs like digraphs, UCNs, and
backslash-newline within C escape sequences, as POSIX now requires.
2002-11-06 06:56:35 +00:00
Paul Hilfinger 51b4a04cd0 src/tables.c (matching_state): Don't allow states to match if
either has GLR conflict entries.
ChangeLog: update for this and Hilfinger's preceding test-suite	addition.
2002-11-06 02:46:08 +00:00
Paul Eggert d04946c717 Regenerate. 2002-11-06 00:06:50 +00:00
Paul Eggert 193eb6b7ef Scan <% and %> digraphs in C code as POSIX 1003.1-2001 requires.
Also, remove one static variable in the scanner.
2002-11-05 23:52:28 +00:00
Paul Eggert 1a9e39f116 (braces_level): Now auto, not static.
Initialize to zero if the compiler is being picky.
(INITIAL): Clear braces_level instead of incrementing it.
(SC_BRACED_CODE): Treat <% and %> as { and } when inside C code,
as POSIX 1003.1-2001 requires.
2002-11-05 23:50:11 +00:00
Paul Eggert 48e28efa9e (IF_LINT): New macro, taken from coreutils. 2002-11-05 23:42:51 +00:00
Paul Eggert bcb3effb3c Define "lint" if --enable-gcc-warnings. 2002-11-05 23:42:10 +00:00
Akim Demaille 29c017256a * src/scan-gram.l: When it starts with `%', complain about the
whole directive, not just that `invalid character: %'.
2002-11-05 21:20:14 +00:00
Akim Demaille 8aeac3ca0c * Makefile.maint: Update from Autoconf.
(update, cvs-update, po-update, do-po-update): New.
2002-11-04 08:45:16 +00:00
Akim Demaille 793a58bb66 * tests/glr-regr1.at (Badly Collapsed GLR States): Prototype yylex
and yyerror.
Have yyerror `use' its arguments.
* tests/calc.at (AT_CHECK_PUSHDEFS): AT_YYERROR_SEES_LOC_IF
returns true when location & yacc & pure & parse-param.
(_AT_DATA_CALC_Y): Let yyerror ``use'' its arguments.
2002-11-04 08:30:18 +00:00
Akim Demaille c4d720cdbb * src/location.h (LOCATION_PRINT): Use quotearg slot 3 to avoid
clashes.
* src/scan-gram.l: Use ['] instead of ['] to pacify
font-lock-mode.
Use complain_at.
Use quote, not quote_n since LOCATION_PRINT no longer uses the
slot 0.
2002-11-04 08:28:01 +00:00
Akim Demaille 386642761d Update. 2002-11-04 07:30:28 +00:00
Paul Eggert 613a0dc5b5 * src/reader.c (get_merge_function, grammar_current_rule_check):
Use consistent diagnostics for reporting type name clashes.
Quote the types with <>, for consistency with Yacc.
* tests/input.at (Type Clashes): Adjust to diagnostic changes.
2002-11-04 07:29:57 +00:00
Paul Eggert baa00b7f43 (Type Clashes): Adjust to diagnostic changes. 2002-11-04 06:07:09 +00:00
Paul Eggert 45a8a65dee (get_merge_function, grammar_current_rule_check):
Use consistent diagnostics for reporting type name clashes.
Quote the types with <>, for consistency with Yacc.
2002-11-04 06:06:44 +00:00
Akim Demaille 2a8d363aab * data/c.m4 (b4_identification, b4_user_args, b4_parse_param):
New.
* data/yacc.m4 (b4_pure_args, b4_Pure_args): New.
(b4_parse_param): Remove.
Use b4_identification.
Propagate b4_pure_args where needed to pass them to yyerror.
* data/glr.m4 (b4_parse_param): Remove.
(b4_user_formals, b4_pure_args, b4_pure_formals, b4_lpure_args)
(b4_lpure_formals): New.
Use b4_identification.
(YY_USER_FORMALS, YY_USER_ARGS): Remove, replaced by
b4_user_formals and b4_user_args.
(yyexpandGLRStack, yyFail, yyaddDeferredAction, yyglrShiftDefer)
(yyreportAmbiguity): When using a pure parser, also need
the location, and the parse-params.
Adjust callers.
(yyuserAction, yyglrShift, yyreportParseError, yyrecoverParseError):
When using a pure parser, also need the parse-params.
Adjust callers.
* tests/calc.at: Test pure (%pure-parser) and absolutely pure
(%pure-parser + %parse-param) LALR and GLR parsers.
(AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): New, define AT_PARAM_IF,
AT_LOCATION_IF, AT_PURE_IF, AT_GLR_IF, AAT_PURE_AND_LOC_IF,
AT_GLR_OR_PARAM_IF, AT_YYERROR_ARG_LOC_IF, AT_YYERROR_SEES_LOC_IF.
(_AT_DATA_CALC_Y): Equip for purity of yyerror.
(_AT_CHECK_CALC_ERROR): Use AT_YYERROR_SEES_LOC_IF.
* tests/cxx-type.at (_AT_TEST_GLR_CALC): Equip for yyerror purity.
* doc/bison.texinfo: Untabify the whole file.
(Parser Function): Document %parse-param, deprecate YYPARSE_PARAM.
(Pure Calling): Document %lex-param, deprecate YYLEX_PARAM.
(Error Reporting): Adjust to these new directives.
Document %error-verbose, deprecate YYERROR_VERBOSE.
2002-11-03 16:41:57 +00:00
Akim Demaille 9e32add8e6 * tests/calc.at: Change all the AT_CHECK_CALC_LALR and
AT_CHECK_CALC_GLR invocations to use % directives, instead of
command line options.
* tests/cxx-type.at: Formatting changes.
2002-11-03 12:16:25 +00:00
Akim Demaille 1a43c452ea Regen. 2002-11-03 12:14:47 +00:00
Paul Eggert 03cae905c6 Regen. 2002-11-03 08:53:56 +00:00
Paul Eggert b02d90a5e6 Revamp Bison scanner to fix POSIX incompatibilities,
to count columns correctly, and to check for invalid inputs.
2002-11-03 08:49:58 +00:00
Paul Eggert 206fe6a5ec Add tests for backslash-newline, m4 quotes
in symbols, long literals, and funny escapes in strings.
2002-11-03 08:42:56 +00:00
Paul Eggert d8d3f94a99 Revamp to fix POSIX incompatibilities, to count columns correctly, and
to check for invalid inputs.

Use mbsnwidth to count columns correctly.  Account for tabs, too.
Include mbswidth.h.
(YY_USER_ACTION): Invoke extend_location rather than LOCATION_COLUMNS.
(extend_location): New function.
(YY_LINES): Remove.

Handle CRLF in C code rather than in Lex code.
(YY_INPUT): New macro.
(no_cr_read): New function.

Scan UCNs, even though we don't fully handle them yet.
(convert_ucn_to_byte): New function.

Handle backslash-newline correctly in C code.
(SC_LINE_COMMENT, SC_YACC_COMMENT): New states.
(eols, blanks): Remove.  YY_USER_ACTION now counts newlines etc.;
all uses changed.
(tag, splice): New EREs.  Do not allow NUL or newline in tags.
Use {splice} wherever C allows backslash-newline.
YY_STEP after space, newline, vertical-tab.
("/*"): BEGIN SC_YACC_COMMENT, not yy_push_state (SC_COMMENT).

(letter, id): Don't assume ASCII; e.g., spell out a-z.

({int}, handle_action_dollar, handle_action_at): Check for integer
overflow.

(YY_STEP): Omit trailing semicolon, so that it's more like C.

(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>): Allow \0 and \00
as well as \000.  Check for UCHAR_MAX, not 255.
Allow \x with an arbitrary positive number of digits, as in C.
Check for overflow here.
Allow \? and UCNs, for compatibility with C.

(handle_symbol_code_dollar): Use quote_n slot 1 to avoid collision
with quote slot used by complain_at.
2002-11-03 08:42:32 +00:00
Paul Eggert 565a33db8f (LOCATION_COLUMNS, LOCATION_LINES): Remove; no longer used. 2002-11-03 08:41:08 +00:00
Paul Eggert 2bfc2e2a7d (Grammar Outline): Document // comments.
(Symbols): Document that trigraphs have no special meaning in Bison,
nor is backslash-newline allowed.
(Actions): Document that trigraphs have no special meaning.
2002-11-03 08:40:39 +00:00
Paul Eggert 5389a5bff4 (EXTRA_DIST): Add mbswidth.m4. 2002-11-03 08:40:08 +00:00
Paul Eggert aad8382e8d (libbison_a_SOURCES): Add mbswidth.h, mbswidth.c. 2002-11-03 08:39:43 +00:00
Paul Eggert 1d9f7cd4f8 (jm_PREREQ_MBSWIDTH): Add. 2002-11-03 08:39:16 +00:00
Paul Eggert c0acc0f522 New files, from GNU gettext and GNU coreutils. 2002-11-03 08:38:43 +00:00
Paul Eggert b9e0056255 Fix misspellings in comments. 2002-11-03 07:56:25 +00:00
Paul Eggert 397477b4e9 Don't include quote.h; not needed.
(get_merge_function): Reword warning to be consistent with type clash
diagnostic in grammar_current_rule_check.
2002-11-03 07:49:40 +00:00
Paul Eggert 9e4c5cb833 (quotearg_buffer_restyled): Fix off-by-two bug in trigraph handling. 2002-11-03 07:03:53 +00:00
Paul Eggert 01cfa69791 (prepare_symbols): When printing token names, escape "[" as "@<:@" and
likewise for "]".
2002-11-03 06:41:59 +00:00
Paul Eggert 3fbf949b82 (errno): Remove declaration, as we are now assuming C89 or better, and
C89 guarantees errno.
2002-11-03 06:16:55 +00:00
Paul Eggert 762b212bdf * lib/bitset_stats.c (bitset_stats_read, bitset_stats_write):
Check for close failures.
* src/files.h (xfclose): Return void, not int, since it always
returned zero.
* src/files.c (xfclose): Likewise.  Report I/O error if ferror
indicates one.
* src/output.c (output_skeleton): Use xfclose rather than fclose
and ferror.  xfclose now checks ferror.

* data/glr.c (YYLEFTMOST_STATE): Remove.
(yyreportTree): Use a stack-based leftmost state.  This avoids
our continuing battles with bogus warnings about initializers.
2002-10-30 09:45:46 +00:00
Akim Demaille 56100c60da * src/system.h: Don't use #ifdef/#ifndef on HAVE_ values, only
#if.
2002-10-30 08:31:24 +00:00
Paul Eggert 30ba05f239 (output_skeleton): Use xfclose rather than fclose and ferror. xfclose
now checks ferror.
2002-10-30 06:20:02 +00:00
Paul Eggert e63ee1f16c (xfclose): Return void, not int, since it always returned zero.
Report I/O error if ferror indicates one.
2002-10-30 06:19:00 +00:00
Paul Eggert 760d7aa8fa (xfclose): Return void, not int, since it always returned zero. 2002-10-30 06:18:19 +00:00
Paul Eggert 11a712626c (bitset_stats_read, bitset_stats_write): Check for close failures. 2002-10-30 06:17:52 +00:00
Paul Eggert 782a05f9de (YYLEFTMOST_STATE): Remove.
(yyreportTree): Use a stack-based leftmost state.  This avoids
our continuing battles with bogus warnings about initializers.
2002-10-30 05:38:30 +00:00
Paul Hilfinger 09903f303a Add test glr-regr1.at to check for incorrect collapsing of states during
table compression in GLR parser.
2002-10-30 02:03:14 +00:00
Paul Eggert 413fcf3a20 (AC_INIT): Bump version to 1.75b. 2002-10-25 06:56:26 +00:00
Paul Eggert 5c16c6b13a Version 1.75a. 2002-10-25 06:05:50 +00:00
Paul Eggert 1f1b791bf0 Fix misspelling of "Valgrind". 2002-10-25 05:37:58 +00:00
Paul Eggert bf1ebda27b * tests/calc.at (_AT_DATA_CALC_Y): Remove unused strcat declaration.
* tests/cxx-type.at (_AT_TEST_GLR_CALC): Include stdlib.h, since
we use malloc.  Don't assume 'A' through 'Z' are contiguous.
Don't assume strdup exists; POSIX says its an XSI extension.
Check for buffer overflow on input.
2002-10-25 05:14:04 +00:00
Paul Eggert 2946869a28 (_AT_DATA_CALC_Y): Remove unused strcat declaration. 2002-10-25 05:13:44 +00:00
Paul Eggert c469accea7 (_AT_TEST_GLR_CALC): Include stdlib.h, since
we use malloc.  Don't assume 'A' through 'Z' are contiguous.
Don't assume strdup exists; POSIX says its an XSI extension.
Check for buffer overflow on input.
2002-10-25 05:13:24 +00:00
Akim Demaille b526ee6116 * src/output.c (output_skeleton): Don't disable M4sugar comments
too soon: it results in comments being expanded.
* data/yacc.c, data/glr.c, data/lalr1.cc: Do it right before the
first output.
2002-10-24 11:40:27 +00:00
Akim Demaille f1886bb280 * data/yacc.c (m4_int_type): New.
* data/c.m4 (m4_int_type): Don't use yysigned_char, but `signed
char' as only yacc.c wants K&R portability.
* data/glr.c (yysigned_char): Remove.
* data/lalr1.cc: Rename the trailing b4_name as b4_parser_class_name.
Reported by Quoc Peyrot.
2002-10-24 10:01:52 +00:00
Akim Demaille 48461d4b28 Regen. 2002-10-24 09:58:55 +00:00
Paul Eggert c55762568f * src/main.c (main): With --trace=time, report times even if a
non-fatal error occurs.  Formerly, the times were reported in some
such cases but not in others.
* src/reader.c (reader): Just return if a complaint has been issued,
instead of exiting, so that 'main' can report times.
2002-10-23 18:42:04 +00:00
Paul Eggert f6d0c2394c (main): With --trace=time, report times even if a non-fatal error
occurs.  Formerly, the times were reported in some such cases but not
in others.
2002-10-23 18:41:43 +00:00
Paul Eggert f956c304c5 (reader): Just return if a complaint has been issued,
instead of exiting, so that 'main' can report times.
2002-10-23 18:41:04 +00:00
Akim Demaille 27b0ffea3e * src/system.h: Include sys/types.
Reported by Bert Deknuydt.
2002-10-23 16:30:50 +00:00
Paul Eggert 223a78837b AM_PROG_LEX -> AC_PROG_LEX.
Go back to returning (not exiting) from main.
Work around empty struct in glr.c.
Typo fixes for doc.
2002-10-23 08:09:43 +00:00
Paul Eggert 41cce2f604 (AC_PROG_LEX): Use instead of AM_PROG_LEX.
Suggested by Art Haas.
2002-10-23 08:07:13 +00:00
Paul Eggert e0c74f0d34 (exit) [! (STDC_HEADERS || _LIBC)]: Remove exit decl; not needed any more. 2002-10-23 07:35:48 +00:00
Paul Eggert e95aed631d (main): Use return to exit, undoing yesterday's change.
The last OS that we could find where this wouldn't work is
SunOS 3.5, and that's too old to worry about now.
2002-10-23 07:00:19 +00:00
Paul Eggert ffa4c58acb (struct yyltype): Define members even when not
doing locations.  This is more consistent with yacc.c, and it
works around the following bug reports:
http://mail.gnu.org/pipermail/bug-bison/2002-October/001748.html
http://mail.gnu.org/pipermail/bug-bison/2002-October/001764.html
http://mail.gnu.org/pipermail/bug-bison/2002-October/001769.html
2002-10-23 06:30:49 +00:00
Paul Eggert c827f760f6 Minor spelling and typographical fixes. Use @acronym consistently.
Standardize on "Yacc" instead of "YACC", "Algol" instead of "ALGOL".
Give a bit more history about BNF.
2002-10-23 05:26:32 +00:00
Paul Eggert 6db10d14be Be consistent about 'bool'.
* src/complain.c (warning_issued): Renamed from warn_message_count; now bool.
(complaint_issued): Renamed from complain_message_count; likewise.

* src/main.c (main): Use exit to exit with failure.

* src/complain.c (fatal_at, fatal): Use EXIT_FAILURE and EXIT_SUCCESS
rather than 1 and 0.
* src/main.c (main): Likewise.
* src/getargs.c (getargs): Likewise.
* src/reader.c (reader): Likewise.

* src/getarg.c (getargs): Remove duplicate code for
"Try `bison --help'".

* src/files.c (xfopen, xfclose): Use EXIT_FAILURE rather than 2.
What was that "2" for?

* src/complain.h (fatal, fatal_at): Add __attribute__((__noreturn__)).
* src/getargs.c (usage): Likewise.

* src/getargs.c (getargs): When there are too few operands, report
the last one.  When there are too many, report the first extra
one.  This is how diffutils does it.
2002-10-23 03:59:56 +00:00
Akim Demaille 8b76775adb * data/README: New. 2002-10-22 11:32:38 +00:00
Akim Demaille f0e48240c9 Update. 2002-10-22 11:19:45 +00:00
Akim Demaille 78bcec17c8 Regen. 2002-10-22 07:47:55 +00:00
Paul Eggert ec88357a8c (fatal, fatal_at): Add __attribute__((__noreturn__)).
(warning_issued): Renamed from warn_message_count.  Now bool.
(complaint_issued): Renamed from complain_message_count.  Now bool.
2002-10-22 05:12:08 +00:00
Paul Eggert 5ca3209b44 (main): Use exit to exit with failure.
Use EXIT_FAILURE and EXIT_SUCCESS rather than 1 and 0.
2002-10-22 05:07:12 +00:00
Paul Eggert 0df27e8b2d (getargs): Use EXIT_FAILURE and EXIT_SUCCESS rather than 1 and 0.
Remove duplicate code for "Try `bison --help'".
(usage):  Add __attribute__((__noreturn__)).
2002-10-22 05:06:21 +00:00
Paul Eggert 901ec1537a (xfopen, xfclose): Use EXIT_FAILURE rathern than 2.
What was that "2" for?
2002-10-22 05:01:46 +00:00
Paul Eggert 0ae6073a18 (warning_issued): Renamed from warn_message_count,
so that we needn't worry about integer overflow (!).
Now of type bool.  All uses changed.
(complaint_issued): Renamed from complain_message_count; likewise.
(fatal_at, fatal): Use EXIT_FAILURE and EXIT_SUCCESS rather than 1 and 0.
2002-10-22 04:53:49 +00:00
Paul Eggert 8307162d58 Use C99-style bool instead of our own style. 2002-10-22 04:46:28 +00:00
Paul Eggert 738c69de37 Use C99-style bool instead of our own style.
(comment change only)
2002-10-22 04:45:51 +00:00
Paul Eggert b4afb6bbe5 Use C99-style bool instead of our own style.
(reader): Use EXIT_FAILURE and EXIT_SUCCESS rather than 1 and 0.
2002-10-22 04:43:50 +00:00
Paul Eggert 637c4b283c se C99-style bool instead of our own style. 2002-10-22 04:41:25 +00:00
Paul Eggert 78b8881659 (bool, false, true): Use a definition consistent with ../lib/hash.c. 2002-10-22 04:40:09 +00:00
Paul Eggert a3714bcedf (hash_compare_symbol_t): (a ? FALSE : TRUE) -> (! a) 2002-10-22 04:39:44 +00:00
Paul Eggert 5dd5fd4a56 (hash_compare_muscles): (a ? FALSE : TRUE) -> (! a) 2002-10-22 04:39:05 +00:00
Paul Eggert fece5986bf (EXTRA_DIST): Add stdbool.m4. 2002-10-22 04:38:11 +00:00
Paul Eggert 8d60a570d5 (AC_HEADER_STDBOOL): Add. 2002-10-22 04:37:50 +00:00
Paul Eggert a7e92301ef New file, from coreutils 4.5.3. 2002-10-22 04:36:31 +00:00
Paul Eggert a4b6efd473 (getargs): When there are too few operands, report the last one. When
there are too many, report the first extra one.  This is how diffutils
does it.
2002-10-21 18:15:13 +00:00
Paul Eggert 92a060fd6a Remove K&R vestiges.
* configure.ac (AC_C_CONST, AM_C_PROTOTYPES): Remove.
* src/complain.c (VA_START): Remove.  Assume prototypes.
(vfprintf) [! (HAVE_VPRINTF || defined vfprintf)]: New macro.
(private_strerror, warn_at, warn, complain_at, complain, fatal_at,
fatal): Assume prototypes.
* src/complain.h: Assume prototypes.
* src/system.h (PARAMS): Remove.
Include <limits.h> unconditionally, since it's guaranteeed even
for a freestanding C89 compiler.
(SHRT_MIN, SHRT_MAX): Remove, since C89 guarantees them.
* src/vmsgetargs.c (getargs, cli_present, cli_get_value): Prototype.
2002-10-21 05:31:34 +00:00
Paul Eggert d33cb3ae09 Remove all uses of PARAMS, since we now assume C89 or better. 2002-10-21 05:30:50 +00:00
Paul Eggert b8452344de (getargs, cli_present, cli_get_value): Prototype. 2002-10-21 05:29:50 +00:00
Paul Eggert 930393cf02 (PARAMS): Remove.
Include <limits.h> unconditionally, since it's guaranteeed even
for a freestanding C89 compiler.
(SHRT_MIN, SHRT_MAX): Remove, since C89 guarantees them.
2002-10-21 05:29:07 +00:00
Paul Eggert 49f801e6fe Assume prototypes. 2002-10-21 05:28:34 +00:00
Paul Eggert 2118414023 (VA_START): Remove. Assume prototypes.
(vfprintf) [! (HAVE_VPRINTF || defined vfprintf)]: New macro.
(private_strerror, warn_at, warn, complain_at, complain, fatal_at,
fatal): Assume prototypes.
2002-10-21 05:28:16 +00:00
Paul Eggert 87004b05f7 (AC_C_CONST, AM_C_PROTOTYPES): Remove. 2002-10-21 05:27:45 +00:00
Akim Demaille e7cb57c0b8 * src/muscle_tab.c (muscle_grow): Remove trailing debugging code.
* data/glr.c (YY_USER_FORMALS, YY_USER_ARGS): New.
(yyuserAction, yydoAction, yyglrReduce, yyresolveValue)
(yyresolveStates, yyresolveAction, yyresolveStack)
(yyprocessOneStack): Use them.
(yy_reduce_print): New.
* tests/calc.at (_AT_DATA_CALC_Y): Exercise %parse-param.
2002-10-20 16:09:47 +00:00
Akim Demaille 0245f82d31 * data/c.m4 (b4_c_ansi_args): Recognize functions with no
arguments and output `void'.
(b4_c_function): Rename as...
(b4_c_function_def): this.
(b4_c_function_decl, b4_c_ansi_function_def)
(b4_c_ansi_function_decl): New.
Change the interpretation of the arguments: before `int, foo', now
`int foo, foo'.
* data/yacc.c (yyparse): Prototype and define thanks to these.
Adjust b4_c_function_def uses.
* data/glr.c (yyparse): Likewise, but ANSI only.
2002-10-20 12:51:10 +00:00
Akim Demaille 39912f5263 * src/output.c (prepare): Move the definition of `tokens_number',
`nterms_number', `undef_token_number', `user_token_number_max'
to...
(prepare_tokens): Here.
(prepare_tokens): Rename as...
(prepare_symbols): this.
(prepare): Move the definition of `rules_number' to...
(prepare_rules): here.
(prepare): Move the definition of `last', `final_state_number',
`states_number' to...
(prepare_states): here.
* data/yacc.c, data/lalr1.cc, data/glr.c: Normalize `>' into `<'.
2002-10-20 11:20:15 +00:00
Akim Demaille 20c1e2ad98 * src/tables.h, src/tables.c, src/output.c: Comment changes. 2002-10-20 11:18:14 +00:00
Akim Demaille 21964f4394 * data/yacc.c, data/yacc.c (b4_location_if, b4_pure_if): Move to...
* data/c.m4: here.
2002-10-20 11:17:20 +00:00
Akim Demaille 66d30cd4eb * src/output.c (prepare): Use MUSCLE_INSERT_STRING.
* src/muscle_tab.c (muscle_pair_list_grow): Rename `val as
`pair'.
(muscle_init): Move the `b4_ltype', `b4_maxdepth', `b4_initdepth',
`name' to...
* data/glr.c, data/lalr1.cc, data/yacc.c (b4_location_type)
(b4_stack_depth_init, b4_stack_depth_max, b4_parser_class_name):
These.
2002-10-20 11:16:01 +00:00
Paul Eggert 95f2c9fe7d Do not create a temporary file, as that involves security and
cleanup headaches.  Instead, use a pair of pipes.
Derived from a suggestion by Florian Krohm.

Also, some other minor changes to avoid GCC warnings.
2002-10-20 06:37:08 +00:00
Paul Eggert 975553805c Do not create a temporary file, as that involves security and
cleanup headaches.  Instead, use a pair of pipes.  Derived from
a suggestion by Florian Krohm.
2002-10-20 06:35:41 +00:00
Paul Eggert 2cdb2a7b05 (readpipe): Remove decl.
(scan_skel): New function, to be used in place of m4_invoke.
Read from stream rather than file.
2002-10-20 06:32:04 +00:00
Paul Eggert 573312acb6 Include "subpipe.h".
(m4_invoke): Remove decl.
(scan_skel): New decl.
(output_skeleton): Use pipe rather than temporary file for m4 input.
Check that m4sugar.m4 is readable, to avoid deadlock.
Check for pipe I/O error.
2002-10-20 06:31:23 +00:00
Paul Eggert f7aed66054 Add lib/subpipe.c. 2002-10-20 06:30:43 +00:00
Paul Eggert 82f9f11f39 (EXTRA_DIST): Remove mkstemp.m4. Add subpipe.m4. 2002-10-20 06:30:15 +00:00
Paul Eggert 6d55632cb7 (libbison_a_SOURCES): Remove readpipe.c.
Add subpipe.h, subpipe.c.
2002-10-20 06:29:41 +00:00
Paul Eggert 2593afab81 (UTILS_FUNC_MKSTEMP, jm_PREREQ_TEMPNAME): Remove.
(BISON_PREREQ_SUBPIPE): Add.
2002-10-20 06:29:09 +00:00
Paul Eggert 5b2d69cc5b Initial version. 2002-10-20 06:28:23 +00:00
Paul Eggert bb33f19a4b (prepare): Use xstrdup to convert char const * to char *, to avoid GCC
warning.
2002-10-20 06:01:07 +00:00
Paul Eggert d9d363b172 (muscle_pair_list_grow): Rename local to avoid confusion with
similarly-named more-global.
2002-10-20 05:47:09 +00:00
Paul Eggert 9e2c5ef112 (TICKS_TO_MSEC, CLOCKS_TO_MSEC): Do not cast to
float, as this generates a warning on Solaris 8 + GCC 3.2 with
--enable-gcc-warnings.  Instead, divide into 1.0 rather than 1;
this generates a more-accurate value anyway.
(timervar_accumulate): Rename local variables to avoid confusion
with similarly-named global 'start_time'.
2002-10-20 05:34:55 +00:00
Paul Eggert 55b929cab2 Spell -*- Autoconf -*-' properly; the leading -' was missing. 2002-10-20 05:23:11 +00:00
Akim Demaille c19988b766 * tests/calc.at (_AT_DATA_CALC_Y): Define VAL, LOC, LEX_FORMALS,
LEX_PRE_FORMALS, LEX_ARGS, LEX_PRE_ARGS, USE_LEX_ARGS.
Use them to have `calc.y' ready for %pure-parser.
* data/yacc.c (YYLEX): Pass a yylex return type to
b4_c_function_call.
2002-10-19 14:39:07 +00:00
Akim Demaille ae7453f2ba Prototype support of %lex-param and %parse-param.
* src/parse-gram.y: Add the definition of the %lex-param and
%parse-param tokens, plus their rules.
Drop the `_' version of %glr-parser.
Add the "," token.
* src/scan-gram.l (INITIAL): Scan them.
* src/muscle_tab.c: Comment changes.
(muscle_insert, muscle_find): Rename `pair' as `probe'.
* src/muscle_tab.h (MUSCLE_INSERT_PREFIX): Remove unused.
(muscle_entry_s): The `value' member is no longer const.
Adjust all dependencies.
* src/muscle_tab.c (muscle_init): Adjust: use
MUSCLE_INSERT_STRING.
Initialize the obstack earlier.
* src/muscle_tab.h, src/muscle_tab.c (muscle_grow)
(muscle_pair_list_grow): New.
* data/c.m4 (b4_c_function_call, b4_c_args): New.
* data/yacc.c (YYLEX): Use b4_c_function_call to honor %lex-param.
* tests/calc.at: Use %locations, not --locations.
(AT_CHECK_CALC_GLR): Use %glr-parser, not %glr_parser.
2002-10-19 14:38:06 +00:00
Akim Demaille 0e57572183 * src/getargs.c (usage): Take status as argument and exit
accordingly.
Report the traditional `Try ... --help' message when status != 0.
(usage, version): Don't take a FILE * as arg, it is pointless.
(getargs): When there is an incorrect number of arguments, make it
an error, and report it GNUlically thanks to `usage ()'.
2002-10-19 14:36:40 +00:00
Paul Eggert 3a781eb26b * data/glr.c (yyreportParseError): Don't assume that sprintf
yields the length of the printed string, as this is not true
on SunOS 4.1.4.  Reported by Peter Klein.
2002-10-19 01:33:39 +00:00
Paul Eggert 3eb4916379 (yyreportParseError): Don't assume that sprintf
yields the length of the printed string, as this is not true
on SunOS 4.1.4.  Reported by Peter Klein.
2002-10-19 01:33:20 +00:00
Paul Eggert 724ce7f524 * tests/calc.at (_AT_DATA_CALC_Y): #undef memcmp and realloc.
* tests/conflicts.at (%nonassoc and eof): Likewise.
Fixes SunOS 4.1.4 test failure reported by Peter Klein.
2002-10-19 01:10:26 +00:00
Paul Eggert ac5dd84c25 (%nonassoc and eof): #undef memcmp and realloc. 2002-10-19 01:09:36 +00:00
Paul Eggert d968424300 (_AT_DATA_CALC_Y): #undef memcmp and realloc. 2002-10-19 01:09:13 +00:00
Akim Demaille 473d0a7567 * src/getargs.h (trace_e): Add trace_scan, and trace_parse.
* src/getargs.c (trace_types, trace_args): Adjust.
* src/reader.c (grammar_current_rule_prec_set)
(grammar_current_rule_dprec_set, grammar_current_rule_merge_set):
Standardize error messages.
And s/@prec/%prec/!
(reader): Use trace_flag to enable scanner/parser debugging,
instead of an adhoc scheme.
* src/scan-gram.l: Remove trailing debugging code.
2002-10-17 17:47:33 +00:00
Paul Eggert 93e2236a6d * src/muscle_tab.h (MUSCLE_TAB_H_): Was misspelled as MUSCLE_TAB_H. 2002-10-17 06:31:51 +00:00
Paul Eggert f7737e2e16 (MUSCLE_TAB_H_): Was misspelled as MUSCLE_TAB_H_. 2002-10-17 06:27:41 +00:00
Paul Eggert e76d2469e5 * NEWS: Officially drop support for building Bison with K&R C,
since it didn't work anyway and it's not worth worrying about.
* Makefile.maint (wget_files): Remove ansi2knr.c.
(ansi2knr.c-url_prefix): Remove.
* lib/.cvsignore: Remove ansi2knr, ansi2knr.*.
* lib/Makefile.am (AUTOMAKE_OPTIONS): Remove.
* src/Makefile.am (AUTOMAKE_OPTIONS): Remove.
2002-10-17 01:29:58 +00:00
Paul Eggert 24c7b92b25 (AUTOMAKE_OPTIONS): Remove. 2002-10-17 01:29:01 +00:00
Paul Eggert dddb8b6121 Remove ansi2knr, ansi2knr.*. 2002-10-17 01:26:33 +00:00
Paul Eggert 71d1d25c7a Officially drop support for building Bison with K&R C,
since it didn't work anyway and it's not worth worrying about.
2002-10-17 01:24:46 +00:00
Paul Eggert da2292e5c7 (wget_files): Remove ansi2knr.c.
(ansi2knr.c-url_prefix): Remove.
2002-10-17 00:14:32 +00:00
Akim Demaille b37e55423b Bump to 1.75a. 2002-10-16 06:32:07 +00:00
Paul Eggert 5bd1c41900 Stop using the "enum_" trick for K&R-style function definitions;
it confused me, and I was the author!  Instead, assume that people
who want to use K&R C compilers (when using these modules in GCC,
perhaps?) will run ansi2knr.
2002-10-16 06:29:12 +00:00
Paul Eggert 829f74d293 (enum_lbitset_find_mode): Remove. All uses of "enum_" changed to "enum ".
(debug_lbitset, lbitset_and, lbitset_and_cmp, lbitset_andn,
lbitset_andn_cmp, lbitset_bytes, lbitset_copy, lbitset_copy_cmp,
lbitset_disjoint_p, lbitset_elt_alloc, lbitset_elt_calloc,
lbitset_elt_find, lbitset_elt_free, lbitset_elt_link,
lbitset_elt_unlink, lbitset_elt_zero_p, lbitset_empty_p,
lbitset_equal_p, lbitset_free, lbitset_init, lbitset_list,
lbitset_list_reverse, lbitset_not, lbitset_ones, lbitset_op3_cmp,
lbitset_or, lbitset_or_cmp, lbitset_prune, lbitset_release_memory,
lbitset_reset, lbitset_set, lbitset_size, lbitset_subset_p,
lbitset_test, lbitset_weed, lbitset_xor, lbitset_xor_cmp,
lbitset_zero): Use function prototypes; this removes the need for
declaring static functions simply to provide their prototypes.
2002-10-16 06:27:59 +00:00
Paul Eggert 75f10004fe (enum_ebitset_find_mode): Remove. All uses of "enum_" changed to "enum ".
(ebitset_and, ebitset_and_cmp, ebitset_andn, ebitset_andn_cmp,
ebitset_bytes, ebitset_copy, ebitset_copy_, ebitset_copy_cmp,
ebitset_disjoint_p, ebitset_elt_add, ebitset_elt_alloc,
ebitset_elt_calloc, ebitset_elt_find, ebitset_elt_free,
ebitset_elt_last, ebitset_elt_remove, ebitset_elt_zero_p,
ebitset_elts_grow, ebitset_empty_p, ebitset_equal_p, ebitset_free,
ebitset_init, ebitset_list, ebitset_list_reverse, ebitset_not,
ebitset_ones, ebitset_op3_cmp, ebitset_or, ebitset_or_cmp,
ebitset_release_memory, ebitset_reset, ebitset_set, ebitset_size,
ebitset_subset_p, ebitset_test, ebitset_weed, ebitset_xor,
ebitset_xor_cmp, ebitset_zero): Use function prototypes; this removes
the need for declaring static functions simply to provide their
prototypes.
2002-10-16 06:26:31 +00:00
Paul Eggert 24f4e18b77 (bitsetv_alloc): enum_bitset_type -> enum bitset_type 2002-10-16 06:24:26 +00:00
Paul Eggert a182371d69 (bitsetv_alloc, bitsetv_create, bitsetv_free, bitsetv_zero,
bitsetv_ones, bitsetv_transitive_closure, bitsetv_dump,
debug_bitsetv): Use function prototypes; this removes the need for
declaring static functions simply to provide their prototypes.
2002-10-16 06:23:21 +00:00
Paul Eggert bba392ec8a (bitset_stats_init): enum_bitset_type -> enum bitset_type. 2002-10-16 06:22:04 +00:00
Paul Eggert d65ec44e3b (bitset_log_histogram_print, bitset_percent_histogram_print,
bitset_stats_and, bitset_stats_and_cmp, bitset_stats_and_or,
bitset_stats_and_or_cmp, bitset_stats_andn, bitset_stats_andn_cmp,
bitset_stats_andn_or, bitset_stats_andn_or_cmp, bitset_stats_copy,
bitset_stats_count, bitset_stats_disable, bitset_stats_disjoint_p,
bitset_stats_dump, bitset_stats_empty_p, bitset_stats_enable,
bitset_stats_equal_p, bitset_stats_free, bitset_stats_init,
bitset_stats_list, bitset_stats_list_reverse, bitset_stats_not,
bitset_stats_ones, bitset_stats_or, bitset_stats_or_and,
bitset_stats_or_and_cmp, bitset_stats_or_cmp, bitset_stats_print,
bitset_stats_print_1, bitset_stats_read, bitset_stats_reset,
bitset_stats_set, bitset_stats_size, bitset_stats_subset_p,
bitset_stats_test, bitset_stats_toggle, bitset_stats_type_get,
bitset_stats_write, bitset_stats_xor, bitset_stats_xor_cmp,
bitset_stats_zero): Use function prototypes; this removes the need for
declaring static functions simply to provide their prototypes.
2002-10-16 06:20:44 +00:00
Paul Eggert 04af9e5267 (bitset_set, bitset_reset, bitset_test): Use function prototypes; this
removes the need for declaring static functions simply to provide
their prototypes.
2002-10-16 06:19:22 +00:00
Paul Eggert 447e90bcef (bitset_alloc, bitset_and_or_, bitset_and_or_cmp_, bitset_andn_or_,
bitset_andn_or_cmp_, bitset_bytes, bitset_copy_, bitset_count_,
bitset_create, bitset_dump, bitset_first, bitset_free, bitset_init,
bitset_last, bitset_next, bitset_obstack_alloc, bitset_obstack_free,
bitset_only_set_p, bitset_op4_cmp, bitset_or_and_, bitset_or_and_cmp_,
bitset_prev, bitset_print, bitset_release_memory, bitset_toggle_,
bitset_type_choose, bitset_type_get, bitset_type_name_get,
debug_bitset): Use function prototypes; this removes the need for
declaring static functions simply to provide their prototypes.
2002-10-16 06:18:00 +00:00
Paul Eggert 59fc3dcdf4 (enum_bitset_ops, enum_bitset_type): Remove.
All uses of "enum_" changed to "enum ".
2002-10-16 06:16:29 +00:00
Paul Eggert a911db9cba (abitset_and, abitset_and_cmp, abitset_and_or,
abitset_and_or_cmp, abitset_andn, abitset_andn_cmp,
abitset_andn_or, abitset_andn_or_cmp, abitset_bytes, abitset_copy,
abitset_copy1, abitset_disjoint_p, abitset_empty_p,
abitset_equal_p, abitset_init, abitset_list, abitset_list_reverse,
abitset_not, abitset_ones, abitset_or, abitset_or_and,
abitset_or_and_cmp, abitset_or_cmp, abitset_reset, abitset_set,
abitset_size, abitset_small_list, abitset_subset_p, abitset_test,
abitset_unused_clear, abitset_xor, abitset_xor_cmp, abitset_zero):
Use function prototypes; this removes the need for declaring
static functions simply to provide their prototypes.
2002-10-16 06:15:02 +00:00
Akim Demaille 1a9bf9b959 . 2002-10-14 18:15:05 +00:00
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
183 changed files with 19727 additions and 17082 deletions
+2291 -5
View File
File diff suppressed because it is too large Load Diff
+8 -7
View File
@@ -52,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 Valgrind.
- 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
@@ -64,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
@@ -113,6 +110,10 @@ Complete/fix the announcement file, and send it at least to
[email protected] (if a real release, or a ``serious beta''),
[email protected], and [email protected].
Send the same announcement on the comp.compilers newsgroup. Do not
make any Cc as the moderator will throw away anything cross-posted or
Cc'ed. It really needs to be a separate message.
-----
+5 -3
View File
@@ -22,6 +22,9 @@ 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. ##
@@ -32,9 +35,8 @@ prev_version_file = $(srcdir)/config/prev-version.txt
release_archive_dir = releases
# Uploading betas.
hosts = alpha
alpha_host = alpha.gnu.org
alpha_url_dir = gnu/bison
url_dir_list = \
ftp://alpha.gnu.org/gnu/bison
# Files to update automatically.
wget_files = $(srcdir)/config/config.guess $(srcdir)/config/config.sub \
+264 -226
View File
@@ -2,7 +2,7 @@
# This Makefile fragment is shared between fileutils, sh-utils, textutils,
# CPPI, Bison, and Autoconf.
## Copyright 2001 Free Software Foundation, Inc.
## Copyright (C) 2001, 2002 Free Software Foundation, Inc.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
@@ -43,6 +43,237 @@ release_archive_dir ?= ../release
## --------------- ##
## Sanity checks. ##
## --------------- ##
# Checks that don't require cvs.
# Run `changelog-check' last, as previous test may reveal problems requiring
# new ChangeLog entries.
local-check = \
po-check copyright-check writable-files m4-check author_mark_check \
changelog-check strftime-check header-check
.PHONY: $(local-check)
# Make sure C source files in src/ don't include xalloc.h directly,
# since they all already include it via sys2.h.
# It's not a big deal -- just aesthetics.
header-check:
if test -f $(srcdir)/src/sys2.h; then \
if grep 'xalloc\.h' $(srcdir)/src/*.c; then \
exit 1; \
fi; \
fi
# Ensure that date's --help output stays in sync with the info
# documentation for GNU strftime. The only exception is %N,
# which date accepts but GNU strftime does not.
extract_char = sed 's/^[^%][^%]*%\(.\).*/\1/'
strftime-check:
if test -f $(srcdir)/src/date.c; then \
grep '^ %. ' $(srcdir)/src/date.c | sort \
| $(extract_char) > $@-src; \
{ echo N; \
info libc date calendar format | grep '^ `%.'\' \
| $(extract_char); } | sort > $@-info; \
diff -u $@-src $@-info || exit 1; \
rm -f $@-src $@-info; \
fi
changelog-check:
if head ChangeLog | grep 'Version $(VERSION)' >/dev/null; then \
:; \
else \
echo "$(VERSION) not in ChangeLog" 1>&2; \
exit 1; \
fi
m4-check:
@grep 'AC_DEFUN([^[]' m4/*.m4 \
&& { echo 'Makefile.maint: quote the first arg to AC_DEFUN' 1>&2; \
exit 1; } || :
# Verify that all source files using _() are listed in po/POTFILES.in.
po-check:
if test -f po/POTFILES.in; then \
grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1; \
files=; \
for file in lib/*.[chly] src/*.[chly]; do \
case $$file in \
*.[ch]) \
base=`expr " $$file" : ' \(.*\)\..'`; \
{ test -f $$base.l || test -f $$base.y; } && continue;; \
esac; \
files="$$files $$file"; \
done; \
grep -E -l '\bN?_\([^)"]*("|$$)' $$files | sort > $@-2; \
diff -u $@-1 $@-2 || exit 1; \
rm -f $@-1 $@-2; \
fi
# In a definition of #define AUTHORS "... and ..." where the RHS contains
# the English word `and', the string must be marked with `N_ (...)' so that
# gettext recognizes it as a string requiring translation.
author_mark_check:
@grep '^# *define AUTHORS "[^"]* and ' src/*.c |grep -v ' N_ (' && \
{ echo 'Makefile.maint: enclose the above strings in N_ (...)' 1>&2; \
exit 1; } || :
# Check that `make alpha' will not fail at the end of the process.
writable-files:
if test -d $(release_archive_dir); then :; else \
mkdir $(release_archive_dir); \
fi
for file in $(distdir).tar.gz $(xd-delta) \
$(release_archive_dir)/$(distdir).tar.gz \
$(release_archive_dir)/$(xd-delta); do \
test -e $$file || continue; \
test -w $$file \
|| { echo ERROR: $$file is not writable; fail=1; }; \
done; \
test "$$fail" && exit 1 || :
v_etc_file = lib/version-etc.c
# Make sure that the copyright date in $(v_etc_file) is up to date.
copyright-check:
@if test -f $(v_etc_file); then \
grep '"Copyright (C) $(shell date +%Y) Free' $(v_etc_file) \
>/dev/null \
|| { echo 'out of date copyright in $(v_etc_file); update it' 1>&2; \
exit 1; }; \
fi
# Sanity checks with the CVS repository.
cvs-tag-check:
echo $(this-cvs-tag); \
if $(CVS) -n log -h README | grep -e $(this-cvs-tag): >/dev/null; then \
echo "$(this-cvs-tag) as already been used; not tagging" 1>&2; \
exit 1; \
else :; fi
cvs-diff-check:
if $(CVS) diff >cvs-diffs; then \
rm cvs-diffs; \
else \
echo "Some files are locally modified:" 1>&2; \
cat cvs-diffs; \
exit 1; \
fi
cvs-check: cvs-diff-check cvs-tag-check
maintainer-distcheck: changelog-check
$(MAKE) distcheck
$(MAKE) my-distcheck
# Tag before making distribution. Also, don't make a distribution if
# checks fail. Also, make sure the NEWS file is up-to-date.
# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
cvs-dist: $(local-check) cvs-check maintainer-distcheck
$(CVS) update po
$(CVS) tag -c $(this-cvs-tag)
$(MAKE) dist
# Use this to make sure we don't run these programs when building
# from a virgin tgz file, below.
null_AM_MAKEFLAGS = \
ACLOCAL=false \
AUTOCONF=false \
AUTOMAKE=false \
AUTOHEADER=false \
MAKEINFO=false
# Detect format-string/arg-list mismatches that would normally be obscured
# by the use of _(). The --disable-nls effectively defines away that macro,
# and building with CFLAGS='-Wformat -Werror' causes any format warning to be
# treated as a failure.
t=./=test
my-distcheck: $(local-check)
-rm -rf $(t)
mkdir $(t)
GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
cd $(t)/$(distdir) \
&& ./configure --disable-nls \
&& $(MAKE) CFLAGS='-Wformat -Werror' \
AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
&& $(MAKE) dvi \
&& $(MAKE) check \
&& $(MAKE) distclean
cd $(t) && mv $(distdir) $(distdir).old \
&& $(AMTAR) -zxf ../$(distdir).tar.gz
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
-rm -rf $(t)
@echo "========================"; \
echo "$(distdir).tar.gz is ready for distribution"; \
echo "========================"
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/ -//')
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-$$$$; \
md5_tmp=/tmp/rel-check-md5-$$$$; \
set -e; \
trap 'status=$$?; rm -f $$tarz $$md5_tmp; exit $$status' 0 1 2 3 15; \
wget -q --output-document=$$tarz $(url); \
echo "$(md5) -" > $$md5_tmp; \
md5sum -c $$md5_tmp < $$tarz
prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
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)
@( \
echo Subject: $(my_distdir) released; \
echo; \
echo FIXME: put comments here; \
echo; \
for url in $(url_dir_list); do \
echo " $$url/$(my_distdir).tar.gz ($(tgz-size))"; \
echo " $$url/$(my_distdir).tar.bz2 ($(bz2-size))"; \
done; \
echo; \
echo And here are xdelta-style diffs; \
echo; \
for url in $(url_dir_list); do \
echo " $$url/$(xd-delta) ($(xd-size))"; \
done; \
echo; \
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 "$(news-r1),$(news-r2)p" NEWS \
| grep -v '^\['; \
echo; \
echo ChangeLog entries:; \
find . -name ChangeLog -maxdepth 2 \
| xargs $(CVS) diff -up -r$(prev-cvs-tag) -rHEAD \
| sed -n 's/^+//p' \
| perl -ne 'm!^\+\+ (\./)?! or print,next;' \
-e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
)
## ---------------- ##
## Updating files. ##
## ---------------- ##
@@ -53,6 +284,16 @@ ftp-gnu = ftp://ftp.gnu.org/gnu
# Use mv, if you don't have/want move-if-change.
move_if_change ?= move-if-change
# --------------------- #
# Updating everything. #
# --------------------- #
.PHONY: update
local_updates ?= wget-update cvs-update po-update
update: $(local_updates)
# ------------------- #
# Updating PO files. #
# ------------------- #
@@ -80,10 +321,11 @@ po-update:
# The following pseudo table associates a local directory and a URL
# with each of the files that belongs to some other package and is
# regularly updated from the specified URL.
wget_files ?= $(srcdir)/config.guess $(srcdir)/config.sub \
wget_files ?= $(srcdir)/config/config.guess \
$(srcdir)/config/config.sub \
$(srcdir)/src/ansi2knr.c \
$(srcdir)/doc/texinfo.tex
wget-targets = $(patsubst %, get-%, $(wget_files))
$(srcdir)/config/texinfo.tex
get-targets = $(patsubst %, get-%, $(wget_files))
config.guess-url_prefix = $(ftp-gnu)/config/
config.sub-url_prefix = $(ftp-gnu)/config/
@@ -98,235 +340,31 @@ make-stds.texi-url_prefix = $(ftp-gnu)/GNUinfo/
target = $(patsubst get-%, %, $@)
url = $($(notdir $(target))-url_prefix)$(notdir $(target))
.PHONY: $(wget-targets)
$(wget-targets):
.PHONY: $(get-targets)
$(get-targets):
$(WGET) $(url) -O $(target).t \
&& $(move_if_change) $(target).t $(target)
cvs_files ?= $(srcdir)/config/depcomp $(srcdir)/config/missing $(srcdir)/config/mkinstalldirs \
$(srcdir)/config/install-sh $(srcdir)/src/ansi2knr.c
automake_repo=:pserver:anoncvs:[email protected]:/cvs/automake
.PHONY: wget-update
wget-update: $(wget-targets)
# Updating tools via CVS.
cvs_files ?= depcomp missing
cvs-targets = $(patsubst %, get-%, $(cvs_files))
automake_repo = :pserver:[email protected]:/cvs/automake
.PHONY: $(cvs-targets)
$(cvs-targets):
$(CVS) -d $(automake_repo) co -p automake/lib/$(notdir $(target)) \
>$(target).t \
&& $(move_if_change) $(target).t $(target);
wget-update: $(get-targets)
.PHONY: cvs-update
cvs-update: $(cvs-targets)
cvs-update:
for f in $(cvs_files); do \
test -f $$f || { echo "*** skipping $$f" 1>&2; continue; }; \
file=`basename $$f`; \
echo checking out $$file...; \
$(CVS) -d $(automake_repo) co -p automake/lib/$$file> $$f.t \
&& $(move_if_change) $$f.t $$f; \
done
# --------------------- #
# Updating everything. #
# --------------------- #
.PHONY: update
update: wget-update cvs-update po-update
## --------------- ##
## Sanity checks. ##
## --------------- ##
# Checks that don't require cvs. Run `changelog-check' last as
# previous test may reveal problems requiring new ChangeLog entries.
local-check: po-check copyright-check writable-files changelog-check
changelog-check:
if head ChangeLog | grep 'Version $(VERSION)' >/dev/null; then \
:; \
else \
echo "$(VERSION) not in ChangeLog" 1>&2; \
exit 1; \
fi
# Verify that all source files using _() are listed in po/POTFILES.in.
po-check:
if test -f po/POTFILES.in; then \
grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1; \
grep -E -l '\b_\(' lib/*.c src/*.c | sort > $@-2; \
diff -u $@-1 $@-2 || exit 1; \
rm -f $@-1 $@-2; \
fi
# Check that `make alpha' will not fail at the end of the process.
writable-files:
if test -d $(release_archive_dir); then :; else \
mkdir $(release_archive_dir); \
fi
for file in $(distdir).tar.gz $(xd-delta) \
$(release_archive_dir)/$(distdir).tar.gz \
$(release_archive_dir)/$(xd-delta); do \
test -e $$file || continue; \
test -w $$file \
|| { echo ERROR: $$file is not writable; fail=1; }; \
done; \
test "$$fail" && exit 1 || :
# Make sure that the copyright date in lib/version-etc.c is up to date.
copyright-check:
@if test -f lib/version-etc.c; then \
grep 'N_("Copyright (C) $(shell date +%Y) Free' lib/version-etc.c \
>/dev/null \
|| { echo 'out of date copyright in $<; update it' 1>&2; exit 1; }; \
fi
# Sanity checks with the CVS repository.
cvs-tag-check:
echo $(this-cvs-tag); \
if $(CVS) -n log -h README | grep -e $(this-cvs-tag): >/dev/null; then \
echo "$(this-cvs-tag) as already been used; not tagging" 1>&2; \
exit 1; \
else :; fi
cvs-diff-check:
if $(CVS) diff >cvs-diffs; then \
rm cvs-diffs; \
else \
echo "Some files are locally modified:" 1>&2; \
cat cvs-diffs; \
exit 1; \
fi
cvs-check: cvs-diff-check cvs-tag-check
maintainer-distcheck: changelog-check
$(MAKE) distcheck
$(MAKE) my-distcheck
## -------------- ##
## Making dists. ##
## -------------- ##
# Tag before making distribution. Also, don't make a distribution if
# checks fail. Also, make sure the NEWS file is up-to-date.
# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
cvs-dist: local-check cvs-check maintainer-distcheck
$(CVS) update po
$(CVS) tag -c $(this-cvs-tag)
$(MAKE) dist
# Use this to make sure we don't run these programs when building
# from a virgin tgz file, below.
null_AM_MAKEFLAGS = \
ACLOCAL=false \
AUTOCONF=false \
AUTOM4TE=false \
AUTOMAKE=false \
AUTOHEADER=false \
MAKEINFO=false
# Detect format-string/arg-list mismatches that would normally be obscured
# by the use of _(). The --disable-nls effectively defines away that macro,
# and building with CFLAGS='-Wformat -Werror' causes any format warning to be
# treated as a failure.
t=./=test
my-distcheck: writable-files po-check
-rm -rf $(t)
mkdir $(t)
GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
cd $(t)/$(distdir) \
&& ./configure --disable-nls \
&& $(MAKE) CFLAGS='-Wformat -Werror' \
AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
&& $(MAKE) dvi \
&& $(MAKE) check \
&& $(MAKE) distclean
cd $(t) && mv $(distdir) $(distdir).old \
&& $(AMTAR) -zxf ../$(distdir).tar.gz
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
-rm -rf $(t)
@echo "========================"; \
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/')
rel-check:
tarz=/tmp/rel-check-tarz-$$$$; \
md5_tmp=/tmp/rel-check-md5-$$$$; \
set -e; \
trap 'status=$$?; rm -f $$tarz $$md5_tmp; exit $$status' 0 1 2 3 15; \
$(WGET) -q --output-document=$$tarz $(url); \
echo "$(md5) -" > $$md5_tmp; \
md5sum -c $$md5_tmp < $$tarz
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
rel-files = $(xd-delta) $(distdir).tar.bz2 $(distdir).tar.gz
announcement: NEWS ChangeLog $(rel-files)
@( \
echo Subject: $(my_distdir) released; \
echo; \
echo FIXME: put comments here; \
echo; \
for url in $(url_dir_list); do \
echo " $$url/$(my_distdir).tar.gz ($(tgz-size))"; \
echo " $$url/$(my_distdir).tar.bz2 ($(bz2-size))"; \
done; \
echo; \
echo And here are xdelta-style diffs; \
echo; \
for url in $(url_dir_list); do \
echo " $$url/$(xd-delta) ($(xd-size))"; \
done; \
echo; \
echo "Here are the MD5 and SHA1 signatures for the compressed tar files:"; \
echo; \
echo "$(tgz-md5) $(my_distdir).tar.gz"; \
echo "$(bz2-md5) $(my_distdir).tar.bz2"; \
echo "$(tgz-sha1) $(my_distdir).tar.gz"; \
echo "$(bz2-sha1) $(my_distdir).tar.bz2"; \
echo; \
echo NEWS:; \
sed -n "/$(THIS_VERSION_REGEXP)[]:]/,/$(PREV_VERSION_REGEXP)[]:]/p" NEWS \
| grep -v '^\['; \
echo; \
echo ChangeLog entries:; \
find . -name ChangeLog -maxdepth 2 \
| xargs $(CVS) diff -up -r$(prev-cvs-tag) -rHEAD \
| sed -n 's/^+//p' \
| perl -ne 'm!^\+\+ (\./)?! or print,next;' \
-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 =====================================
@@ -335,7 +373,7 @@ endef
$(xd-delta): $(release_archive_dir)/$(prev-tgz) $(distdir).tar.gz
xdelta delta -9 $^ $@ || :
alpha:
alpha: $(local-check)
$(MAKE) cvs-dist
$(MAKE) $(xd-delta)
$(MAKE) -s announcement > /tmp/announce-$(my_distdir)
@@ -343,4 +381,4 @@ alpha:
chmod a-w $(rel-files)
echo $(VERSION) > $(prev_version_file)
$(CVS) ci -m. $(prev_version_file)
@$(emit-rsync-commands)
@$(emit-upload-commands)
+142 -18
View File
@@ -1,10 +1,131 @@
Bison News
----------
Changes in version 1.49c:
Changes in version 1.875, 2003-01-01:
* The documentation license has been upgraded to version 1.2
of the GNU Free Documentation License.
Changes in version 1.49b, 2002-08-12:
* syntax error processing
- In Yacc-style parsers YYLLOC_DEFAULT is now used to compute error
locations too. This fixes bugs in error-location computation.
- %destructor
It is now possible to reclaim the memory associated to symbols
discarded during error recovery. This feature is still experimental.
- %error-verbose
This new directive is preferred over YYERROR_VERBOSE.
- #defining yyerror to steal internal variables is discouraged.
It is not guaranteed to work forever.
* POSIX conformance
- Semicolons are once again optional at the end of grammar rules.
This reverts to the behavior of Bison 1.33 and earlier, and improves
compatibility with Yacc.
- `parse error' -> `syntax error'
Bison now uniformly uses the term `syntax error'; formerly, the code
and manual sometimes used the term `parse error' instead. POSIX
requires `syntax error' in diagnostics, and it was thought better to
be consistent.
- The documentation now emphasizes that yylex and yyerror must be
declared before use. C99 requires this.
- Bison now parses C99 lexical constructs like UCNs and
backslash-newline within C escape sequences, as POSIX 1003.1-2001 requires.
- File names are properly escaped in C output. E.g., foo\bar.y is
output as "foo\\bar.y".
- Yacc command and library now available
The Bison distribution now installs a `yacc' command, as POSIX requires.
Also, Bison now installs a small library liby.a containing
implementations of Yacc-compatible yyerror and main functions.
This library is normally not useful, but POSIX requires it.
- Type clashes now generate warnings, not errors.
- If the user does not define YYSTYPE as a macro, Bison now declares it
using typedef instead of defining it as a macro.
For consistency, YYLTYPE is also declared instead of defined.
* Other compatibility issues
- %union directives can now have a tag before the `{', e.g., the
directive `%union foo {...}' now generates the C code
`typedef union foo { ... } YYSTYPE;'; this is for Yacc compatibility.
The default union tag is `YYSTYPE', for compatibility with Solaris 9 Yacc.
For consistency, YYLTYPE's struct tag is now `YYLTYPE' not `yyltype'.
This is for compatibility with both Yacc and Bison 1.35.
- `;' is output before the terminating `}' of an action, for
compatibility with Bison 1.35.
- Bison now uses a Yacc-style format for conflict reports, e.g.,
`conflicts: 2 shift/reduce, 1 reduce/reduce'.
- `yystype' and `yyltype' are now obsolescent macros instead of being
typedefs or tags; they are no longer documented and are planned to be
withdrawn in a future release.
* GLR parser notes
- GLR and inline
Users of Bison have to decide how they handle the portability of the
C keyword `inline'.
- `parsing stack overflow...' -> `parser stack overflow'
GLR parsers now report `parser stack overflow' as per the Bison manual.
* Bison now warns if it detects conflicting outputs to the same file,
e.g., it generates a warning for `bison -d -o foo.h foo.y' since
that command outputs both code and header to foo.h.
* #line in output files
- --no-line works properly.
* Bison can no longer be built by a K&R C compiler; it requires C89 or
later to be built. This change originally took place a few versions
ago, but nobody noticed until we recently asked someone to try
building Bison with a K&R C compiler.
Changes in version 1.75, 2002-10-14:
* 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
@@ -14,27 +135,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
@@ -98,9 +222,9 @@ Changes in version 1.49b, 2002-08-12:
the user symbol is used in the reports, the graphs, and the verbose
error messages instead of `$end', which remains being the default.
For instance
%token YYEOF 0
%token MYEOF 0
or
%token YYEOF 0 "end of file"
%token MYEOF 0 "end of file"
* Semantic parser
This old option, which has been broken for ages, is removed.
@@ -110,12 +234,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
@@ -155,7 +279,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:
@@ -281,8 +404,8 @@ Changes in version 1.31, 2002-01-14:
Changes in version 1.30, 2001-10-26:
* `--defines' and `--graph' have now an optionnal argument which is the
output file name. `-d' and `-g' do not change, they do not take any
* `--defines' and `--graph' have now an optional argument which is the
output file name. `-d' and `-g' do not change; they do not take any
argument.
* `%source_extension' and `%header_extension' are removed, failed
@@ -405,16 +528,17 @@ End:
-----
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
This file is part of GNU Autoconf.
This file is part of Bison, the GNU Compiler Compiler.
GNU Autoconf 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.
GNU Autoconf 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.
+21
View File
@@ -15,3 +15,24 @@ not ready for full scale use. Because it is not fully functional, if
you distribute this package, we will be buried under bug reports from
panicked users. We don't have time to spend on this, and nor do the
users.
-----
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of GNU Bison.
GNU 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.
GNU 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.
+62 -54
View File
@@ -1,60 +1,68 @@
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 [email protected]
Cris van Pelt [email protected]
Daniel Hagerty [email protected]
David J. MacKenzie [email protected]
Dick Streefland dick.streefland@altium.nl
Enrico Scholz [email protected]
Evgeny Stambulchik [email protected]
Fabrice Bauzac [email protected]
Florian Krohm [email protected]
H. Merijn Brand [email protected]l
Hans Aberg [email protected]
Jesse Thilo [email protected]
Jim Meyering [email protected]
Juan Manuel Guerrero [email protected]e
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]
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 [email protected]
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 tromey@cygnus.com
Wayne Green [email protected]
Wolfram Wagner [email protected]
Wwp subscript@free.fr
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]
Bert Deknuydt [email protected]
Bruce Lilly [email protected]
Charles-Henri de Boysson [email protected]
Cris Bailiff [email protected]
Cris van Pelt [email protected].nl
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]e
Jan Nieuwenhuizen [email protected]
Jesse Thilo [email protected]
Jim Kent [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]
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 [email protected]
Paul Hilfinger [email protected]
Per Allansson [email protected]
Peter Hámorský [email protected]
Piotr Gackiewicz [email protected]
Quoc Peyrot [email protected]
R Blake blakers@mac.com
Raja R Harinath [email protected]
Richard Stallman [email protected]
Robert Anisko anisko_r@epita.fr
Shura [email protected]
Tim Josling [email protected]
Tim Van Holder [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.
+58 -91
View File
@@ -2,62 +2,14 @@
* Header guards
En rentrant chez moi, je relance un `make' sur un projet que j'ai avancé
ailleurs durant la semaine. Le système que j'utilise ici est un peu plus
à jour que l'autre, et le Bison est probablement plus récent itou. Ici,
c'est la version 1.33. J'obtiens, en montrant un peu plus que nécessaire:
From Franc,ois: should we keep the directory part in the CPP guard?
---------------------------------------------------------------------->
cd ~/fpub/pyrexpp/Pyrexpp/
LANGUAGE= /usr/bin/make MAKEFLAGS='-k -j2'
/usr/bin/make -C .. install
make[1]: Entre dans le répertoire `/bpi/titan/home/pinard/fpub/pyrexpp'
install -g bpi -m 2775 -d Prépare-titan
chmod g+sw Prépare-titan
touch Prépare-titan/.estampille
/usr/bin/gcc -fPIC -I/usr/include/python2.2 -IPrépare-titan -g -c -o Prépare-titan/ctools.o ctools.c
bison -d -o Prépare-titan/c-parser.c c-parser.y
/usr/bin/gcc -fPIC -I/usr/include/python2.2 -IPrépare-titan -g -c -o Prépare-titan/c-parser.o Prépare-titan/c-parser.c
flex -t c-scanner.l | grep -v '^#line' > Prépare-titan/c-scanner.c
/usr/bin/gcc -fPIC -I/usr/include/python2.2 -IPrépare-titan -g -c -o Prépare-titan/c-scanner.o Prépare-titan/c-scanner.c
In file included from Prépare-titan/c-scanner.c:547:
Prépare-titan/c-parser.h:1: warning: garbage at end of `#ifndef' argument
Prépare-titan/c-parser.h:2: warning: missing white space after `#define BISON_PR'
/usr/bin/gcc -o Prépare-titan/ctools.so Prépare-titan/ctools.o Prépare-titan/c-scanner.o -shared -lm
python setup.py --quiet build
install -g bpi -m 664 Prépare-titan/ctools.so /bpi/titan/local/lib/python2.2/site-packages/Pyrexpp
python setup.py --quiet install
make[1]: Quitte le répertoire `/bpi/titan/home/pinard/fpub/pyrexpp'
[...]
----------------------------------------------------------------------<
Diagnostics que je n'avais sûrement pas, plus tôt en journée, sur l'autre
système. En allant voir, je trouve:
* Yacc.c: CPP Macros
---------------------------------------------------------------------->
#ifndef BISON_PRÉPARE_TITAN_C_PARSER_H
# define BISON_PRÉPARE_TITAN_C_PARSER_H
# ifndef YYSTYPE
# define YYSTYPE int
# endif
# define IDENTIFIER 257
[...]
extern YYSTYPE yylval;
#endif /* not BISON_PRÉPARE_TITAN_C_PARSER_H */
----------------------------------------------------------------------<
Le pré-processeur de C n'est pas à l'aise avec les caractères accentués
dans les identificateurs.
Bon, de mon expérience, il n'a jamais été nécessaire de protéger un fichier
`.h' de Bison ou Yacc contre de multiples inclusions, mais si ça été
fait, je présume qu'il y avait un problème réel et convaincant à régler,
et qu'il ne s'agit pas d'une simple fantaisie: je ne mettrai donc pas
ça en doute. Mais le choix du nom de l'identificateur laisse à désirer,
tu en conviendras :-). Et faut-il vraiment y inclure le répertoire?
Do some people use YYPURE, YYLSP_NEEDED like we do in the test suite?
They should not: it is not documented. But if they need to, let's
find something clean (not like YYLSP_NEEDED...).
* URGENT: Documenting C++ output
@@ -65,27 +17,12 @@ Write a first documentation for C++ output.
* Documentation
Before releasing, make sure the documentation refers to the current
`output' format.
Before releasing, make sure the documentation ("Understanding your
parser") refers to the current `output' format.
* Error messages
Some are really funky. For instance
type clash (`%s' `%s') on default action
is really weird. Revisit them all.
* read_pipe.c
This is not portable to DOS for instance. Implement a more portable
scheme. Sources of inspiration include GNU diff, and Free Recode.
* value_components_used
Was defined but not used: where was it coming from? It can't be to
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
@@ -115,10 +52,40 @@ DeRemer and Penello: they already provide the algorithm.
* Extensions
** yyerror, yysymprint interface
** %destructor
I think we should document it as experimental, and allow its use in
the next releases. But we also need to port it to GLR. What about
lalr1.cc? Well, read what Hans reported, maybe we don't want
%detructor. On the other hand, there is no reason not to provide it:
users can avoid its use.
** $foo
Have a look at the Lemon parser generator: instead of $1, $2 etc. they
can name the values. This is much more pleasant. For instance:
exp (res): exp (a) '+' exp (b) { $res = $a + $b; };
I love this. I have been bitten too often by the removal of the
symbol, and forgetting to shift all the $n to $n-1. If you are
unlucky, it compiles...
** $-1
We should find a means to provide an access to values deep in the
stack. For instance, instead of
baz: qux { $$ = $<foo>-1 + $<bar>0 + $1; }
we should be able to have:
foo($foo) bar($bar) baz($bar): qux($qux) { $baz = $foo + $bar + $qux; }
Or something like this.
** yysymprint interface
It should be improved, in particular when using Bison features such as
locations, and YYPARSE_PARAMS. For the time being, it is recommended
to #define yyerror and yyprint to steal internal variables...
locations, and YYPARSE_PARAMS. For the time being, it is almost
recommended to yyprint to steal internal variables...
** Several %unions
I think this is a pleasant (but useless currently) feature, but in the
@@ -141,6 +108,17 @@ When implementing multiple-%union support, bare the following in mind:
char *sval;
}
** %if and the like
It should be possible to have %if/%else/%endif. The implementation is
not clear: should it be lexical or syntactic. Vadim Maslow thinks it
must be in the scanner: we must not parse what is in a switched off
part of %if. Akim Demaille thinks it should be in the parser, so as
to avoid falling into another CPP mistake.
** -D, --define-muscle NAME=VALUE
To define muscles via cli. Or maybe support directly NAME=VALUE?
* Unit rules
Maybe we could expand unit rules, i.e., transform
@@ -207,21 +185,11 @@ Paul notes:
Show reductions. []
* Broken options ?
** %no-lines [ok]
** %no-parser []
** %pure-parser []
** %token-table []
** Options which could use parse_dquoted_param ().
Maybe transferred in lex.c.
*** %skeleton [ok]
*** %output []
*** %file-prefix []
*** %name-prefix []
** Skeleton strategy. []
Must we keep %no-parser?
%token-table?
*** New skeletons. []
* src/print_graph.c
Find the best graph parameters. []
@@ -237,13 +205,12 @@ skeleton muscles. []
** tests/pure-parser.at []
New tests.
* input synclines
Some users create their foo.y files, and equip them with #line. Bison
should recognize these, and preserve them.
* BTYacc
See if we can integrate backtracking in Bison. Contact the BTYacc
maintainers.
See if we can integrate backtracking in Bison. Charles-Henri de
Boysson <[email protected]> is working on this, and already has some
results. Vadim Maslow, the maintainer of BTYacc was contacted, and we
stay in touch with him. Adjusting the Bison grammar parser will be
needed to support some extra BTYacc features. This is less urgent.
** Keeping the conflicted actions
First, analyze the differences between byacc and btyacc (I'm referring
+2
View File
@@ -7,3 +7,5 @@ config.sub
config.guess
mdate-sh
texinfo.tex
config.rpath
ylwrap
+66 -41
View File
@@ -56,7 +56,7 @@ dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
-c) instcmd=$cpprog
shift
continue;;
@@ -79,7 +79,7 @@ while [ x"$1" != x ]; do
shift
continue;;
-s) stripcmd="$stripprog"
-s) stripcmd=$stripprog
shift
continue;;
@@ -106,7 +106,7 @@ done
if [ x"$src" = x ]
then
echo "install: no input file specified"
echo "$0: no input file specified" >&2
exit 1
else
:
@@ -115,8 +115,8 @@ fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
if [ -d "$dst" ]; then
instcmd=:
chmodcmd=""
else
@@ -125,20 +125,20 @@ if [ x"$dir_arg" != x ]; then
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f "$src" ] || [ -d "$src" ]
then
:
else
echo "install: $src does not exist"
echo "$0: $src does not exist" >&2
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
echo "$0: no destination specified" >&2
exit 1
else
:
@@ -147,16 +147,16 @@ else
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
if [ -d "$dst" ]
then
dst="$dst"/`basename $src`
dst=$dst/`basename "$src"`
else
:
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
@@ -165,69 +165,73 @@ dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
IFS="${IFS-$defaultIFS}"
oIFS="${IFS}"
oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS=$oIFS
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
pathcomp=$pathcomp$1
shift
if [ ! -d "${pathcomp}" ] ;
if [ ! -d "$pathcomp" ] ;
then
$mkdirprog "${pathcomp}"
$mkdirprog "$pathcomp"
else
:
fi
pathcomp="${pathcomp}/"
pathcomp=$pathcomp/
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
$doit $instcmd "$dst" &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi
if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
dstfile=`basename "$dst"`
else
dstfile=`basename $dst $transformbasename |
dstfile=`basename "$dst" $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
dstfile=`basename "$dst"`
else
:
fi
# Make a temp file name in the proper directory.
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/#inst.$$#
rmtmp=$dstdir/#rm.$$#
# Trap to clean up temp files at exit.
trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
trap '(exit $?); exit' 1 2 13 15
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
$doit $instcmd "$src" "$dsttmp" &&
# and set any options; do chmod last to preserve setuid bits
@@ -235,17 +239,38 @@ else
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
# Now remove or move aside any old file at destination location. We try this
# two ways since rm can't unlink itself on some systems and the destination
# file might be busy for other reasons. In this case, the final cleanup
# might fail but the new file should still install successfully.
{
if [ -f "$dstdir/$dstfile" ]
then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
$doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
{
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
(exit 1); exit
}
else
:
fi
} &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
fi &&
# The final little trick to "correctly" pass the exit status to the exit trap.
exit 0
{
(exit 0); exit
}
+1 -1
View File
@@ -1 +1 @@
1.49a
1.75
+43 -35
View File
@@ -1,6 +1,6 @@
# Configure template for GNU Bison. -*-Autoconf-*-
#
# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
# Copyright (C) 2001, 2002, 2003 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
@@ -20,34 +20,19 @@
# We need a recent Autoconf to run a recent Autotest.
AC_PREREQ(2.54)
AC_INIT([GNU Bison], [1.49c], [[email protected]])
AC_INIT([GNU Bison], [1.875], [[email protected]])
AC_CONFIG_AUX_DIR(config)
AM_INIT_AUTOMAKE([1.7 check-news readme-alpha dist-bzip2])
AM_CONFIG_HEADER(config.h:config.hin)
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
@@ -71,48 +56,71 @@ if test "${enableval}" = yes; then
BISON_WARNING(-Wshadow)
BISON_WARNING(-Wstrict-prototypes)
BISON_WARNING(-Wwrite-strings)
AC_DEFINE([lint], 1, [Define to 1 if the compiler is checking for lint.])
fi
# Checks for libraries.
AC_DEFINE([_GNU_SOURCE],1,[Define to 1 for GNU C library extensions.])
# Checks for programs.
AC_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
AC_CHECK_HEADERS([ctype.h locale.h memory.h stdlib.h string.h unistd.h])
AC_HEADER_STDBOOL
# Checks for compiler characteristics.
AC_C_CONST
AC_C_INLINE
AM_C_PROTOTYPES
# Checks for types.
AC_CHECK_TYPES([uintptr_t])
# Checks for library functions.
AC_FUNC_ALLOCA
AC_FUNC_OBSTACK
AC_FUNC_ERROR_AT_LINE
AC_FUNC_STRNLEN
UTILS_FUNC_MKSTEMP
AC_CHECK_FUNCS(setlocale)
AC_CHECK_DECLS([free, getenv, getopt,
stpcpy, strchr, strspn, strnlen,
malloc, memchr, memrchr])
AC_REPLACE_FUNCS(memchr memrchr \
strchr stpcpy strrchr strspn strtol)
strchr stpcpy strrchr strspn strtol strtoul)
AC_FUNC_MALLOC
AC_FUNC_REALLOC
jm_PREREQ_MBSWIDTH
jm_PREREQ_QUOTEARG
jm_FUNC_ARGMATCH
jm_PREREQ_ERROR
jm_PREREQ_TEMPNAME
AM_WITH_DMALLOC
BISON_PREREQ_SUBPIPE
BISON_PREREQ_TIMEVAR
# Gettext.
AM_GNU_GETTEXT(external, need-ngettext)
AM_GNU_GETTEXT_VERSION(0.11.5)
AC_OUTPUT([Makefile
config/Makefile
po/Makefile.in
data/Makefile
lib/Makefile src/Makefile doc/Makefile
m4/Makefile])
# 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_CONFIG_FILES([Makefile
config/Makefile
po/Makefile.in
data/Makefile
lib/Makefile src/Makefile doc/Makefile
m4/Makefile])
AC_OUTPUT
+2 -2
View File
@@ -15,7 +15,7 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
## 02111-1307 USA
dist_pkgdata_DATA = c.m4 yacc.c lalr1.cc glr.c
dist_pkgdata_DATA = README c.m4 yacc.c lalr1.cc glr.c
m4sugardir = $(pkgdatadir)/m4sugar
dist_m4sugar_DATA = m4sugar/m4sugar.m4 m4sugar/version.m4
dist_m4sugar_DATA = m4sugar/m4sugar.m4
+45
View File
@@ -0,0 +1,45 @@
-*- outline -*-
This directory contains Bison skeletons: the general shapes of the
different parser kinds, that are specialized for specific grammars by
the bison program.
Currently, there are only three supported skeletons:
- yacc.c
It used to be named bison.simple: it corresponds to C Yacc
compatible LALR(1) parsers.
- lalr1.cc
Produces a C++ parser class. It is still very experimental, and not
yet supported. Please, subscribe to [email protected].
- glr.c
A Generalized LR C parser based on Bison's LALR(1) tables.
These skeletons are the only ones supported by the Bison team.
Because the interface between skeletons and the bison program is not
finished, *we are not bound to it*. In particular, Bison is not
mature enough for us to consider that ``foreign skeletons'' are
supported.
-----
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of GNU Bison.
GNU 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.
GNU 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.
+274 -39
View File
@@ -1,4 +1,4 @@
m4_divert(-1) -*- C -*-
m4_divert(-1) -*- Autoconf -*-
# C M4 Macros for Bison.
# Copyright (C) 2002 Free Software Foundation, Inc.
@@ -19,14 +19,14 @@ m4_divert(-1) -*- C -*-
# 02111-1307 USA
## ----------- ##
## Copuright. ##
## ----------- ##
## ---------------- ##
## Identification. ##
## ---------------- ##
# b4_copyright(TITLE, YEARS)
# --------------------------
m4_define([b4_copyright],
[/* A Bison parser, made from b4_filename, by GNU bison b4_version. */
[/* A Bison parser, made by GNU Bison b4_version. */
/* $1,
Copyright (C) $2 Free Software Foundation, Inc.
@@ -47,6 +47,53 @@ m4_define([b4_copyright],
Boston, MA 02111-1307, USA. */])
# b4_identification
# -----------------
m4_define([b4_identification],
[/* Identify Bison output. */
[#]define YYBISON 1
/* Skeleton name. */
[#]define YYSKELETON_NAME b4_skeleton
/* Pure parsers. */
[#]define YYPURE b4_pure
/* Using locations. */
[#]define YYLSP_NEEDED b4_locations_flag
])
## ---------------- ##
## Default values. ##
## ---------------- ##
m4_define_default([b4_epilogue], [])
## ------------------------ ##
## Pure/impure interfaces. ##
## ------------------------ ##
# b4_user_args
# ------------
m4_define([b4_user_args],
[m4_ifset([b4_parse_param], [, b4_c_args(b4_parse_param)])])
# b4_parse_param
# --------------
# If defined, b4_parse_param arrives double quoted, but below we prefer
# it to be single quoted.
m4_define_default([b4_parse_param])
m4_define([b4_parse_param],
b4_parse_param))
## ------------ ##
## Data Types. ##
## ------------ ##
@@ -65,7 +112,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], [signed char],
b4_ints_in($@, [0], [65535]), [1], [unsigned short],
b4_ints_in($@, [-32768], [32767]), [1], [short],
@@ -74,6 +121,7 @@ m4_define([b4_int_type],
[int])])
# b4_int_type_for(NAME)
# ---------------------
# Return the smallest int type able to handle numbers ranging from
@@ -82,6 +130,30 @@ m4_define([b4_int_type_for],
[b4_int_type($1_min, $1_max)])
## ------------------ ##
## Decoding options. ##
## ------------------ ##
# b4_location_if(IF-TRUE, IF-FALSE)
# ---------------------------------
# Expand IF-TRUE, if locations are used, IF-FALSE otherwise.
m4_define([b4_location_if],
[m4_if(b4_locations_flag, [1],
[$1],
[$2])])
# b4_pure_if(IF-TRUE, IF-FALSE)
# -----------------------------
# Expand IF-TRUE, if %pure-parser, IF-FALSE otherwise.
m4_define([b4_pure_if],
[m4_if(b4_pure, [1],
[$1],
[$2])])
## ------------------------- ##
## Assigning token numbers. ##
## ------------------------- ##
@@ -108,7 +180,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 {
@@ -116,62 +188,225 @@ 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], [$@])
])
])
## ---------------------------------------------- ##
## Declaring C functions in both K&R and ANSI-C. ##
## ---------------------------------------------- ##
## --------------------------------------------- ##
## Defining C functions in both K&R and ANSI-C. ##
## --------------------------------------------- ##
# b4_c_function(NAME, RETURN-VALUE, [TYPE1, NAME1], ...)
# ------------------------------------------------
# b4_c_function_def(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
# ----------------------------------------------------------
# Declare the function NAME.
m4_define([b4_c_function],
[$2
#if defined (__STDC__) || defined (__cplusplus)
$1 (b4_c_ansi_args(m4_shiftn(2, $@)))
m4_define([b4_c_function_def],
[#if defined (__STDC__) || defined (__cplusplus)
b4_c_ansi_function_def($@)
#else
$1 (b4_c_knr_arg_names(m4_shiftn(2, $@)))
b4_c_knr_arg_decls(m4_shiftn(2, $@))
$2
$1 (b4_c_knr_formal_names(m4_shiftn(2, $@)))
b4_c_knr_formal_decls(m4_shiftn(2, $@))
#endif[]dnl
])
# b4_c_ansi_args([TYPE1, NAME1], ...)
# -----------------------------------
# b4_c_ansi_function_def(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
# ---------------------------------------------------------------
# Declare the function NAME in ANSI.
m4_define([b4_c_ansi_function_def],
[$2
$1 (b4_c_ansi_formals(m4_shiftn(2, $@)))[]dnl
])
# b4_c_ansi_formals([DECL1, NAME1], ...)
# --------------------------------------
# Output the arguments ANSI-C definition.
m4_define([b4_c_ansi_args],
[m4_map_sep([b4_c_ansi_arg], [, ], [$@])])
m4_define([b4_c_ansi_formals],
[m4_case([$@],
[], [void],
[[]], [void],
[m4_map_sep([b4_c_ansi_formal], [, ], [$@])])])
m4_define([b4_c_ansi_arg],
[$1 $2])
m4_define([b4_c_ansi_formal],
[$1])
# b4_c_knr_args([TYPE1, NAME1], ...)
# ----------------------------------
# b4_c_knr_formal_names([DECL1, NAME1], ...)
# ------------------------------------------
# Output the argument names.
m4_define([b4_c_knr_arg_names],
[m4_map_sep([b4_c_knr_arg_name], [, ], [$@])])
m4_define([b4_c_knr_formal_names],
[m4_map_sep([b4_c_knr_formal_name], [, ], [$@])])
m4_define([b4_c_knr_arg_name],
m4_define([b4_c_knr_formal_name],
[$2])
# b4_c_knr_args([TYPE1, NAME1], ...)
# ----------------------------------
# b4_c_knr_formal_decls([DECL1, NAME1], ...)
# ------------------------------------------
# Output the K&R argument declarations.
m4_define([b4_c_knr_arg_decls],
[m4_map_sep([b4_c_knr_arg_decl],
m4_define([b4_c_knr_formal_decls],
[m4_map_sep([b4_c_knr_formal_decl],
[
],
[$@])])
m4_define([b4_c_knr_arg_decl],
[ $1 $2;])
m4_define([b4_c_knr_formal_decl],
[ $1;])
## ------------------------------------------------------------ ##
## Declaring (prototyping) C functions in both K&R and ANSI-C. ##
## ------------------------------------------------------------ ##
# b4_c_function_decl(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
# -----------------------------------------------------------
# Declare the function NAME.
m4_define([b4_c_function_decl],
[#if defined (__STDC__) || defined (__cplusplus)
b4_c_ansi_function_decl($@)
#else
$2 $1 ();
#endif[]dnl
])
# b4_c_ansi_function_decl(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
# ----------------------------------------------------------------
# Declare the function NAME.
m4_define([b4_c_ansi_function_decl],
[$2 $1 (b4_c_ansi_formals(m4_shiftn(2, $@)));[]dnl
])
## --------------------- ##
## Calling C functions. ##
## --------------------- ##
# b4_c_function_call(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
# -----------------------------------------------------------
# Call the function NAME with arguments NAME1, NAME2 etc.
m4_define([b4_c_function_call],
[$1 (b4_c_args(m4_shiftn(2, $@)))[]dnl
])
# b4_c_args([DECL1, NAME1], ...)
# ------------------------------
# Output the arguments NAME1, NAME2...
m4_define([b4_c_args],
[m4_map_sep([b4_c_arg], [, ], [$@])])
m4_define([b4_c_arg],
[$2])
## ----------- ##
## Synclines. ##
## ----------- ##
# b4_syncline(LINE, FILE)
# -----------------------
m4_define([b4_syncline],
[m4_if(b4_synclines_flag, 1,
[[#]line $1 $2])])
# b4_symbol_actions(FILENAME, LINENO,
# SYMBOL-TAG, SYMBOL-NUM,
# SYMBOL-ACTION, SYMBOL-TYPENAME)
# -------------------------------------------------
m4_define([b4_symbol_actions],
[m4_pushdef([b4_dollar_dollar], [yyvaluep->$6])dnl
m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl
case $4: /* $3 */
b4_syncline([$2], [$1])
$5;
b4_syncline([@oline@], [@ofile@])
break;
m4_popdef([b4_at_dollar])dnl
m4_popdef([b4_dollar_dollar])dnl
])
# b4_yydestruct_generate(FUNCTION-DECLARATOR)
# -------------------------------------------
# Generate the "yydestruct" function, which declaration is issued using
# FUNCTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C
# or "b4_c_function_def" for K&R.
m4_define([b4_yydestruct_generate],
[[/*-----------------------------------------------.
| Release the memory associated to this symbol. |
`-----------------------------------------------*/
]$1([yydestruct],
[static void],
[[int yytype], [yytype]],
[[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([,
[[YYLTYPE *yylocationp], [yylocationp]]]))[
{
/* Pacify ``unused variable'' warnings. */
(void) yyvaluep;
]b4_location_if([ (void) yylocationp;
])[
switch (yytype)
{
]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[
default:
break;
}
}]dnl
])
# b4_yysymprint_generate(FUNCTION-DECLARATOR)
# -------------------------------------------
# Generate the "yysymprint" function, which declaration is issued using
# FUNCTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C
# or "b4_c_function_def" for K&R.
m4_define([b4_yysymprint_generate],
[[/*--------------------------------.
| Print this symbol on YYOUTPUT. |
`--------------------------------*/
]$1([yysymprint],
[static void],
[[FILE *yyoutput], [yyoutput]],
[[int yytype], [yytype]],
[[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([,
[[YYLTYPE *yylocationp], [yylocationp]]]))
{
/* Pacify ``unused variable'' warnings. */
(void) yyvaluep;
b4_location_if([ (void) yylocationp;
])dnl
if (yytype < YYNTOKENS)
{
YYFPRINTF (yyoutput, "token %s (", yytname[[yytype]]);
# ifdef YYPRINT
YYPRINT (yyoutput, yytoknum[[yytype]], *yyvaluep);
# endif
}
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[[yytype]]);
switch (yytype)
{
m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
default:
break;
}
YYFPRINTF (yyoutput, ")");
}
])
+446 -331
View File
File diff suppressed because it is too large Load Diff
+211 -211
View File
@@ -17,7 +17,22 @@ m4_divert(-1)
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA
m4_include([c.m4])
## ---------------- ##
## Default values. ##
## ---------------- ##
# Stack parameters.
m4_define_default([b4_stack_depth_init], [200])
# Default Parser class name.
m4_define_default([b4_parser_class_name], [Parser])
## ----------------- ##
## Semantic Values. ##
## ----------------- ##
# b4_lhs_value([TYPE])
# --------------------
@@ -31,9 +46,9 @@ m4_define([b4_lhs_value],
# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
# symbols on RHS.
m4_define([b4_rhs_value],
[semantic_stack_@<:@m4_eval([$1 - $2])@:>@m4_ifval([$3], [.$3])])
[semantic_stack_@{m4_eval([$1 - $2])@}m4_ifval([$3], [.$3])])
m4_define_default([b4_ltype], [Location])
m4_define_default([b4_location_type], [Location])
# b4_lhs_location()
# -----------------
@@ -47,28 +62,9 @@ m4_define([b4_lhs_location],
# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
# on RHS.
m4_define([b4_rhs_location],
[location_stack_@<:@m4_eval([$1 - $2])@:>@])
[location_stack_@{m4_eval([$1 - $2])@}])
m4_define_default([b4_input_suffix], [.y])
m4_define_default([b4_output_parser_suffix],
[m4_translit(b4_input_suffix, [yY], [cC])])
m4_define_default([b4_output_parser_name],
[b4_output_prefix[]b4_output_infix[]b4_output_parser_suffix[]])
m4_define_default([b4_output_header_suffix],
[m4_translit(b4_input_suffix, [yY], [hH])])
m4_define_default([b4_output_header_name],
[b4_output_prefix[]b4_output_infix[]b4_output_header_suffix[]])
m4_define_default([b4_header_guard],
[m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name),
[[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])])
m4_define([b4_inherit],
[m4_ifdef([b4_root],
[: public b4_root
@@ -88,12 +84,16 @@ m4_define([b4_constructor],
[])])
# We do want M4 expansion after # for CPP macros.
m4_changecom()
m4_divert(0)dnl
#output "b4_output_header_name"
@output @output_header_name@
b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
[2002])
#ifndef b4_header_guard
# define b4_header_guard
[2002])[
/* FIXME: This is wrong, we want computed header guards.
I don't know why the macros are missing now. :( */
#ifndef PARSER_HEADER_H
# define PARSER_HEADER_H
#include "stack.hh"
#include "location.hh"
@@ -102,51 +102,50 @@ b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
#include <iostream>
/* Using locations. */
#define YYLSP_NEEDED b4_locations_flag
#define YYLSP_NEEDED ]b4_locations_flag[
]b4_token_defines(b4_tokens)[
/* Copy the first part of user declarations. */
b4_pre_prologue
]b4_pre_prologue[
/* Line __line__ of __file__. */
#line __oline__ "__ofile__"
/* Tokens. */
b4_token_defines(b4_tokens)
]/* Line __line__ of lalr1.cc. */
b4_syncline([@oline@], [@ofile@])[
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG b4_debug
# define YYDEBUG ]b4_debug[
#endif
/* Enabling verbose error message. */
#ifndef YYERROR_VERBOSE
# define YYERROR_VERBOSE b4_error_verbose
# define YYERROR_VERBOSE ]b4_error_verbose[
#endif
#ifndef YYSTYPE
m4_ifdef([b4_stype],
[#line b4_stype_line "b4_filename"
]m4_ifdef([b4_stype],
[b4_syncline([b4_stype_line], [b4_filename])
typedef union b4_stype yystype;
/* Line __line__ of __file__. */
#line __oline__ "__ofile__"],
[typedef int yystype;])
/* Line __line__ of lalr1.cc. */
b4_syncline([@oline@], [@ofile@])],
[typedef int yystype;])[
# define YYSTYPE yystype
#endif
/* Copy the second part of user declarations. */
b4_post_prologue
]b4_post_prologue[
/* Line __line__ of __file__. */
#line __oline__ "__ofile__"
]/* Line __line__ of lalr1.cc. */
b4_syncline([@oline@], [@ofile@])[
#ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(Current, Rhs, N) \
Current.last_line = Rhs[[N]].last_line; \
Current.last_column = Rhs[[N]].last_column;
Current.last_line = Rhs[N].last_line; \
Current.last_column = Rhs[N].last_column;
#endif
namespace yy
{
class b4_name;
class ]b4_parser_class_name[;
template < typename P >
struct Traits
@@ -154,47 +153,47 @@ namespace yy
};
template < >
struct Traits< b4_name >
struct Traits< ]b4_parser_class_name[ >
{
typedef b4_int_type_for([b4_translate]) TokenNumberType;
typedef b4_int_type_for([b4_rhs]) RhsNumberType;
typedef ]b4_int_type_for([b4_translate])[ TokenNumberType;
typedef ]b4_int_type_for([b4_rhs])[ RhsNumberType;
typedef int StateType;
typedef yystype SemanticType;
typedef b4_ltype LocationType;
typedef ]b4_location_type[ LocationType;
};
}
namespace yy
{
class b4_name b4_inherit
class ]b4_parser_class_name b4_inherit[
{
public:
typedef Traits< b4_name >::TokenNumberType TokenNumberType;
typedef Traits< b4_name >::RhsNumberType RhsNumberType;
typedef Traits< b4_name >::StateType StateType;
typedef Traits< b4_name >::SemanticType SemanticType;
typedef Traits< b4_name >::LocationType LocationType;
typedef Traits< ]b4_parser_class_name[ >::TokenNumberType TokenNumberType;
typedef Traits< ]b4_parser_class_name[ >::RhsNumberType RhsNumberType;
typedef Traits< ]b4_parser_class_name[ >::StateType StateType;
typedef Traits< ]b4_parser_class_name[ >::SemanticType SemanticType;
typedef Traits< ]b4_parser_class_name[ >::LocationType LocationType;
typedef Stack< StateType > StateStack;
typedef Stack< SemanticType > SemanticStack;
typedef Stack< LocationType > LocationStack;
#if YYLSP_NEEDED
b4_name (bool debug,
LocationType initlocation[]b4_param) :
b4_constructor[]debug_ (debug),
]b4_parser_class_name[ (bool debug,
LocationType initlocation][]b4_param[) :
]b4_constructor[][debug_ (debug),
cdebug_ (std::cerr),
initlocation_ (initlocation)
#else
b4_name (bool debug[]b4_param) :
b4_constructor[]debug_ (debug),
]b4_parser_class_name[ (bool debug][]b4_param[) :
]b4_constructor[][debug_ (debug),
cdebug_ (std::cerr)
#endif
{
}
virtual ~b4_name ()
virtual ~]b4_parser_class_name[ ()
{
}
@@ -212,28 +211,28 @@ namespace yy
LocationStack location_stack_;
/* Tables. */
static const b4_int_type_for([b4_pact]) pact_[[]];
static const b4_int_type_for([b4_pact]) pact_ninf_;
static const b4_int_type_for([b4_defact]) defact_[[]];
static const b4_int_type_for([b4_pgoto]) pgoto_[[]];
static const b4_int_type_for([b4_defgoto]) defgoto_[[]];
static const b4_int_type_for([b4_table]) table_[[]];
static const b4_int_type_for([b4_table]) table_ninf_;
static const b4_int_type_for([b4_check]) check_[[]];
static const b4_int_type_for([b4_r1]) r1_[[]];
static const b4_int_type_for([b4_r2]) r2_[[]];
static const ]b4_int_type_for([b4_pact])[ pact_[];
static const ]b4_int_type_for([b4_pact])[ pact_ninf_;
static const ]b4_int_type_for([b4_defact])[ defact_[];
static const ]b4_int_type_for([b4_pgoto])[ pgoto_[];
static const ]b4_int_type_for([b4_defgoto])[ defgoto_[];
static const ]b4_int_type_for([b4_table])[ table_[];
static const ]b4_int_type_for([b4_table])[ table_ninf_;
static const ]b4_int_type_for([b4_check])[ check_[];
static const ]b4_int_type_for([b4_r1])[ r1_[];
static const ]b4_int_type_for([b4_r2])[ r2_[];
#if YYDEBUG || YYERROR_VERBOSE
static const char* const name_[[]];
static const char* const name_[];
#endif
/* More tables, for debugging. */
#if YYDEBUG
static const RhsNumberType rhs_[[]];
static const b4_int_type_for([b4_prhs]) prhs_[[]];
static const b4_int_type_for([b4_rline]) rline_[[]];
static const b4_int_type_for([b4_stos]) stos_[[]];
static const b4_int_type_for([b4_toknum]) token_number_[[]];
static const RhsNumberType rhs_[];
static const ]b4_int_type_for([b4_prhs])[ prhs_[];
static const ]b4_int_type_for([b4_rline])[ rline_[];
static const ]b4_int_type_for([b4_stos])[ stos_[];
static const ]b4_int_type_for([b4_toknum])[ token_number_[];
#endif
/* Even more tables. */
@@ -241,6 +240,7 @@ namespace yy
/* Constants. */
static const int eof_;
/* LAST_ -- Last index in TABLE_. */
static const int last_;
static const int nnts_;
static const int empty_;
@@ -272,7 +272,7 @@ namespace yy
SemanticType value;
LocationType location;
/* @$ and $$. */
/* @@$ and $$. */
SemanticType yyval;
LocationType yyloc;
@@ -281,13 +281,13 @@ namespace yy
};
}
#endif /* not b4_header_guard */
#endif /* ! defined PARSER_HEADER_H */]
dnl
#output "b4_output_prefix[]b4_output_infix[].cc"
@output @output_parser_name@
b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
[2002])
[2002])[
#include "b4_output_header_name"
#include @output_header_name@
/* Enable debugging if requested. */
#if YYDEBUG
@@ -297,7 +297,7 @@ b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
#endif /* !YYDEBUG */
int
yy::b4_name::parse ()
yy::]b4_parser_class_name[::parse ()
{
int nerrs = 0;
int errstatus = 0;
@@ -325,7 +325,7 @@ yy::b4_name::parse ()
yybackup:
/* Try to take a decision without lookahead. */
n_ = pact_[[state_]];
n_ = pact_[state_];
if (n_ == pact_ninf_)
goto yydefault;
@@ -350,7 +350,7 @@ yy::b4_name::parse ()
if (debug_)
{
YYCDEBUG << "Next token is " << looka_
<< " (" << name_[[ilooka_]];
<< " (" << name_[ilooka_];
print_ ();
YYCDEBUG << ')' << std::endl;
}
@@ -358,11 +358,11 @@ yy::b4_name::parse ()
}
n_ += ilooka_;
if (n_ < 0 || n_ > last_ || check_[[n_]] != ilooka_)
if (n_ < 0 || last_ < n_ || check_[n_] != ilooka_)
goto yydefault;
/* Reduce or error. */
n_ = table_[[n_]];
n_ = table_[n_];
if (n_ < 0)
{
if (n_ == table_ninf_)
@@ -382,7 +382,7 @@ yy::b4_name::parse ()
/* Shift the lookahead token. */
YYCDEBUG << "Shifting token " << looka_
<< " (" << name_[[ilooka_]] << "), ";
<< " (" << name_[ilooka_] << "), ";
/* Discard the token being shifted unless it is eof. */
if (looka_ != eof_)
@@ -401,34 +401,34 @@ yy::b4_name::parse ()
/* Default action. */
yydefault:
n_ = defact_[[state_]];
n_ = defact_[state_];
if (n_ == 0)
goto yyerrlab;
goto yyreduce;
/* Reduce. */
yyreduce:
len_ = r2_[[n_]];
len_ = r2_[n_];
if (len_)
{
yyval = semantic_stack_[[len_ - 1]];
yyloc = location_stack_[[len_ - 1]];
yyval = semantic_stack_[len_ - 1];
yyloc = location_stack_[len_ - 1];
}
else
{
yyval = semantic_stack_[[0]];
yyloc = location_stack_[[0]];
yyval = semantic_stack_[0];
yyloc = location_stack_[0];
}
#if YYDEBUG
if (debug_)
{
YYCDEBUG << "Reducing via rule " << n_ - 1
<< " (line " << rline_[[n_]] << "), ";
for (b4_int_type_for([b4_prhs]) i = prhs_[[n_]];
rhs_[[i]] >= 0; ++i)
YYCDEBUG << name_[[rhs_[i]]] << ' ';
YYCDEBUG << "-> " << name_[[r1_[n_]]] << std::endl;
<< " (line " << rline_[n_] << "), ";
for (]b4_int_type_for([b4_prhs])[ i = prhs_[n_];
0 <= rhs_[i]; ++i)
YYCDEBUG << name_[rhs_[i]] << ' ';
YYCDEBUG << "-> " << name_[r1_[n_]] << std::endl;
}
#endif
@@ -440,11 +440,11 @@ yy::b4_name::parse ()
switch (n_)
{
b4_actions
]b4_actions[
}
/* Line __line__ of __file__. */
#line __oline__ "__ofile__"
]/* Line __line__ of lalr1.cc. */
b4_syncline([@oline@], [@ofile@])[
state_stack_.pop (len_);
semantic_stack_.pop (len_);
@@ -465,12 +465,12 @@ yy::b4_name::parse ()
location_stack_.push (yyloc);
/* Shift the result of the reduction. */
n_ = r1_[[n_]];
state_ = pgoto_[[n_ - ntokens_]] + state_stack_[[0]];
if (state_ >= 0 && state_ <= last_ && check_[[state_]] == state_stack_[[0]])
state_ = table_[[state_]];
n_ = r1_[n_];
state_ = pgoto_[n_ - ntokens_] + state_stack_[0];
if (0 <= state_ && state_ <= last_ && check_[state_] == state_stack_[0])
state_ = table_[state_];
else
state_ = defgoto_[[n_ - ntokens_]];
state_ = defgoto_[n_ - ntokens_];
goto yynewstate;
/* Report and recover from errors. This is very incomplete. */
@@ -481,31 +481,31 @@ yy::b4_name::parse ()
++nerrs;
#if YYERROR_VERBOSE
n_ = pact_[[state_]];
n_ = pact_[state_];
if (pact_ninf_ < n_ && n_ < last_)
{
message = "parse error, unexpected ";
message += name_[[ilooka_]];
message = "syntax error, unexpected ";
message += name_[ilooka_];
{
int count = 0;
for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
if (check_[[x + n_]] == x && x != terror_)
if (check_[x + n_] == x && x != terror_)
++count;
if (count < 5)
{
count = 0;
for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
if (check_[[x + n_]] == x && x != terror_)
if (check_[x + n_] == x && x != terror_)
{
message += (!count++) ? ", expecting " : " or ";
message += name_[[x]];
message += name_[x];
}
}
}
}
else
#endif
message = "parse error";
message = "syntax error";
error_ ();
}
goto yyerrlab1;
@@ -521,7 +521,7 @@ yy::b4_name::parse ()
if (looka_ == eof_)
goto yyabortlab;
YYCDEBUG << "Discarding token " << looka_
<< " (" << name_[[ilooka_]] << ")." << std::endl;
<< " (" << name_[ilooka_] << ")." << std::endl;
looka_ = empty_;
}
@@ -532,13 +532,13 @@ yy::b4_name::parse ()
for (;;)
{
n_ = pact_[[state_]];
n_ = pact_[state_];
if (n_ != pact_ninf_)
{
n_ += terror_;
if (0 <= n_ && n_ <= last_ && check_[[n_]] == terror_)
if (0 <= n_ && n_ <= last_ && check_[n_] == terror_)
{
n_ = table_[[n_]];
n_ = table_[n_];
if (0 < n_)
break;
}
@@ -551,13 +551,13 @@ yy::b4_name::parse ()
#if YYDEBUG
if (debug_)
{
if (stos_[[state_]] < ntokens_)
if (stos_[state_] < ntokens_)
{
YYCDEBUG << "Error: popping token "
<< token_number_[[stos_[state_]]]
<< " (" << name_[[stos_[state_]]];
<< token_number_[stos_[state_]]
<< " (" << name_[stos_[state_]];
# ifdef YYPRINT
YYPRINT (stderr, token_number_[[stos_[state_]]],
YYPRINT (stderr, token_number_[stos_[state_]],
semantic_stack_.top ());
# endif
YYCDEBUG << ')' << std::endl;
@@ -565,12 +565,12 @@ yy::b4_name::parse ()
else
{
YYCDEBUG << "Error: popping nonterminal ("
<< name_[[stos_[state_]]] << ')' << std::endl;
<< name_[stos_[state_]] << ')' << std::endl;
}
}
#endif
state_ = (state_stack_.pop (), state_stack_[[0]]);
state_ = (state_stack_.pop (), state_stack_[0]);
semantic_stack_.pop ();
location_stack_.pop ();;
@@ -607,7 +607,7 @@ yy::b4_name::parse ()
}
void
yy::b4_name::lex_ ()
yy::]b4_parser_class_name[::lex_ ()
{
#if YYLSP_NEEDED
looka_ = yylex (&value, &location);
@@ -616,154 +616,154 @@ yy::b4_name::lex_ ()
#endif
}
/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
const b4_int_type_for([b4_pact]) yy::b4_name::pact_ninf_ = b4_pact_ninf;
const b4_int_type_for([b4_pact])
yy::b4_name::pact_[[]] =
const ]b4_int_type_for([b4_pact]) yy::b4_parser_class_name::pact_ninf_ = b4_pact_ninf[;
const ]b4_int_type_for([b4_pact])[
yy::]b4_parser_class_name[::pact_[] =
{
b4_pact
]b4_pact[
};
/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE
/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
doesn't specify something else to do. Zero means the default is an
error. */
const b4_int_type_for([b4_defact])
yy::b4_name::defact_[[]] =
const ]b4_int_type_for([b4_defact])[
yy::]b4_parser_class_name[::defact_[] =
{
b4_defact
]b4_defact[
};
/* YYPGOTO[[NTERM-NUM]]. */
const b4_int_type_for([b4_pgoto])
yy::b4_name::pgoto_[[]] =
/* YYPGOTO[NTERM-NUM]. */
const ]b4_int_type_for([b4_pgoto])[
yy::]b4_parser_class_name[::pgoto_[] =
{
b4_pgoto
]b4_pgoto[
};
/* YYDEFGOTO[[NTERM-NUM]]. */
const b4_int_type_for([b4_defgoto])
yy::b4_name::defgoto_[[]] =
/* YYDEFGOTO[NTERM-NUM]. */
const ]b4_int_type_for([b4_defgoto])[
yy::]b4_parser_class_name[::defgoto_[] =
{
b4_defgoto
]b4_defgoto[
};
/* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If
/* 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. */
const b4_int_type_for([b4_table]) yy::b4_name::table_ninf_ = b4_table_ninf;
const b4_int_type_for([b4_table])
yy::b4_name::table_[[]] =
const ]b4_int_type_for([b4_table]) yy::b4_parser_class_name::table_ninf_ = b4_table_ninf[;
const ]b4_int_type_for([b4_table])[
yy::]b4_parser_class_name[::table_[] =
{
b4_table
]b4_table[
};
/* YYCHECK. */
const b4_int_type_for([b4_check])
yy::b4_name::check_[[]] =
const ]b4_int_type_for([b4_check])[
yy::]b4_parser_class_name[::check_[] =
{
b4_check
]b4_check[
};
#if YYDEBUG
/* STOS_[[STATE-NUM]] -- The (internal number of the) accessing
/* STOS_[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
const b4_int_type_for([b4_stos])
yy::b4_name::stos_[[]] =
const ]b4_int_type_for([b4_stos])[
yy::]b4_parser_class_name[::stos_[] =
{
b4_stos
]b4_stos[
};
/* TOKEN_NUMBER_[[YYLEX-NUM]] -- Internal token number corresponding
/* TOKEN_NUMBER_[YYLEX-NUM] -- Internal token number corresponding
to YYLEX-NUM. */
const b4_int_type_for([b4_toknum])
yy::b4_name::token_number_[[]] =
const ]b4_int_type_for([b4_toknum])[
yy::]b4_parser_class_name[::token_number_[] =
{
b4_toknum
]b4_toknum[
};
#endif
/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */
const b4_int_type_for([b4_r1])
yy::b4_name::r1_[[]] =
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
const ]b4_int_type_for([b4_r1])[
yy::]b4_parser_class_name[::r1_[] =
{
b4_r1
]b4_r1[
};
/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */
const b4_int_type_for([b4_r2])
yy::b4_name::r2_[[]] =
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
const ]b4_int_type_for([b4_r2])[
yy::]b4_parser_class_name[::r2_[] =
{
b4_r2
]b4_r2[
};
#if YYDEBUG || YYERROR_VERBOSE
/* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
const char*
const yy::b4_name::name_[[]] =
const yy::]b4_parser_class_name[::name_[] =
{
b4_tname
]b4_tname[
};
#endif
#if YYDEBUG
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
const yy::b4_name::RhsNumberType
yy::b4_name::rhs_[[]] =
const yy::]b4_parser_class_name[::RhsNumberType
yy::]b4_parser_class_name[::rhs_[] =
{
b4_rhs
]b4_rhs[
};
/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
const b4_int_type_for([b4_prhs])
yy::b4_name::prhs_[[]] =
const ]b4_int_type_for([b4_prhs])[
yy::]b4_parser_class_name[::prhs_[] =
{
b4_prhs
]b4_prhs[
};
/* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */
const b4_int_type_for([b4_rline])
yy::b4_name::rline_[[]] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
const ]b4_int_type_for([b4_rline])[
yy::]b4_parser_class_name[::rline_[] =
{
b4_rline
]b4_rline[
};
#endif
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
yy::b4_name::TokenNumberType
yy::b4_name::translate_ (int token)
yy::]b4_parser_class_name[::TokenNumberType
yy::]b4_parser_class_name[::translate_ (int token)
{
static
const TokenNumberType
translate_[[]] =
translate_[] =
{
b4_translate
]b4_translate[
};
if ((unsigned) token <= user_token_number_max_)
return translate_[[token]];
return translate_[token];
else
return undef_token_;
}
const int yy::b4_name::eof_ = 0;
const int yy::b4_name::last_ = b4_last;
const int yy::b4_name::nnts_ = b4_nterms_number;
const int yy::b4_name::empty_ = -2;
const int yy::b4_name::final_ = b4_final_state_number;
const int yy::b4_name::terror_ = 1;
const int yy::b4_name::errcode_ = 256;
const int yy::b4_name::ntokens_ = b4_tokens_number;
const int yy::b4_name::initdepth_ = b4_initdepth;
const int yy::]b4_parser_class_name[::eof_ = 0;
const int yy::]b4_parser_class_name[::last_ = ]b4_last[;
const int yy::]b4_parser_class_name[::nnts_ = ]b4_nterms_number[;
const int yy::]b4_parser_class_name[::empty_ = -2;
const int yy::]b4_parser_class_name[::final_ = ]b4_final_state_number[;
const int yy::]b4_parser_class_name[::terror_ = 1;
const int yy::]b4_parser_class_name[::errcode_ = 256;
const int yy::]b4_parser_class_name[::ntokens_ = ]b4_tokens_number[;
const int yy::]b4_parser_class_name[::initdepth_ = ]b4_stack_depth_init[;
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;
const unsigned yy::]b4_parser_class_name[::user_token_number_max_ = ]b4_user_token_number_max[;
const yy::]b4_parser_class_name[::TokenNumberType yy::]b4_parser_class_name[::undef_token_ = ]b4_undef_token_number[;
b4_epilogue
]b4_epilogue
dnl
#output "stack.hh"
b4_copyright([2002])
@output stack.hh
b4_copyright([2002])[
#ifndef BISON_STACK_HH
# define BISON_STACK_HH
@@ -790,16 +790,16 @@ namespace yy
inline
T&
operator [[]] (unsigned index)
operator [] (unsigned index)
{
return seq_[[index]];
return seq_[index];
}
inline
const T&
operator [[]] (unsigned index) const
operator [] (unsigned index) const
{
return seq_[[index]];
return seq_[index];
}
inline
@@ -845,9 +845,9 @@ namespace yy
inline
const T&
operator [[]] (unsigned index) const
operator [] (unsigned index) const
{
return stack_[[range_ - index]];
return stack_[range_ - index];
}
private:
@@ -857,10 +857,10 @@ namespace yy
};
}
#endif // not BISON_STACK_HH
#endif // not BISON_STACK_HH]
dnl
#output "location.hh"
b4_copyright([2002])
@output location.hh
b4_copyright([2002])[
#ifndef BISON_LOCATION_HH
# define BISON_LOCATION_HH
@@ -880,4 +880,4 @@ namespace yy
};
}
#endif // not BISON_LOCATION_HH
#endif // not BISON_LOCATION_HH]
-9
View File
@@ -1746,15 +1746,6 @@ m4_define([m4_version_compare],
(m4_split(m4_version_unletter([$2]), [\.])))])
# m4_PACKAGE_NAME
# m4_PACKAGE_TARNAME
# m4_PACKAGE_VERSION
# m4_PACKAGE_STRING
# m4_PACKAGE_BUGREPORT
# --------------------
m4_include([m4sugar/version.m4])
# m4_version_prereq(VERSION, [IF-OK], [IF-NOT = FAIL])
# ----------------------------------------------------
# Check this Autoconf version against VERSION.
-9
View File
@@ -1,9 +0,0 @@
# This file is part of -*- Autoconf -*-.
# Version of Autoconf.
# Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
m4_define([m4_PACKAGE_NAME], [GNU Autoconf])
m4_define([m4_PACKAGE_TARNAME], [autoconf])
m4_define([m4_PACKAGE_VERSION], [2.52h])
m4_define([m4_PACKAGE_STRING], [GNU Autoconf 2.52h])
m4_define([m4_PACKAGE_BUGREPORT], [[email protected]])
+398 -454
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -13,7 +13,7 @@ A1. If you're looking for a guarantee or certification, I can't
----------------------------------------------------------------------
Q2. I can't build Bison because "make" complains that "msgfmt" is not
fund. What should I do?
found. What should I do?
A2. Like most GNU packages with internationalization support, that
feature is turned on by default. If you have problems building
+1 -1
View File
@@ -4,7 +4,7 @@ info_TEXINFOS = bison.texinfo
man_MANS = bison.1
bison_TEXINFOS = gpl.texi fdl.texi
EXTRA_DIST = FAQ bison.1 bison.rnh refcard.tex
EXTRA_DIST = FAQ bison.1 refcard.tex
CLEANFILES = refcard.dvi refcard.log refcard.ps
+39 -41
View File
@@ -59,6 +59,11 @@ bison \- GNU Project parser generator (yacc replacement)
.B \-\-fixed-output-files
]
file
.br
.B yacc
[
.I "similar options and operands"
]
.SH DESCRIPTION
.I Bison
is a parser generator in the style of
@@ -75,10 +80,10 @@ Unlike
.IR yacc ,
the generated files do not have fixed names, but instead use the prefix
of the input file.
Moreover, if you need to put
.IR C++
Moreover, if you need to put
.I C++
code in the input file, you can end his name by a C++-like extension
(.ypp or .y++), then bison will follow your extension to name the
(.ypp or .y++), then bison will follow your extension to name the
output file (.cpp or .c++).
For instance, a grammar description file named
.B parse.yxx
@@ -86,10 +91,10 @@ would produce the generated parser in a file named
.BR parse.tab.cxx ,
instead of
.IR yacc 's
.BR y.tab.c
or old
.IR Bison
versions
.B y.tab.c
or old
.I Bison
version's
.BR parse.tab.c .
.PP
This description of the options that can be given to
@@ -122,7 +127,7 @@ Specify a prefix to use for all
.I bison
output file names. The names are
chosen as if the input file were named
\fIfile-prefix\fB.c\fR.
\fIfile-prefix\fP\fB.c\fP.
.TP
.B \-d
.br
@@ -135,10 +140,10 @@ as well as a few
variable declarations.
.sp
If the parser output file is named
\fIname\fB.c\fR
.IB name .c
then this file
is named
\fIname\fB.h\fR.
\fIname\fP\fB.h\fP.
.sp
This output file is essential if you wish to put the definition of
.B yylex
@@ -148,29 +153,29 @@ needs to be able to refer to token type codes and the variable
.BR yylval .
.TP
.BI \-\-defines= defines-file
The behaviour of
.BI \-\-defines
is the same than
.BI \-d
option.
The only difference is that it has an optionnal argument which is
The behavior of
.B \-\-defines
is the same than
.B \-d
option.
The only difference is that it has an optional argument which is
the name of the output filename.
.TP
.BI \-g
.br
.ns
Output a VCG definition of the LALR(1) grammar automaton computed by
Bison. If the grammar file is
Bison. If the grammar file is
.BR foo.y
, the VCG output file will be
.BR foo.vcg .
.TP
.BI \-\-graph= graph-file
The behaviour of
.BI \-\-graph
The behavior of
.BI \-\-graph
is the same than
.BI \-g
option. The only difference is that it has an optionnal argument which
option. The only difference is that it has an optional argument which
is the name of the output graph filename.
.TP
.B \-k
@@ -178,8 +183,10 @@ is the name of the output graph filename.
.ns
.TP
.B \-\-token-table
This switch causes the \fIname\fB.tab.c\fR output to include a list of
token names in order by their token numbers; this is defined in the array
This switch causes the
.IB name .tab.c
output to include a list of
token names in order by their token numbers; this is defined in the array
.IR yytname .
Also generated
are #defines for
@@ -209,9 +216,13 @@ parser file, treating it an independent source file in its own right.
.ns
.TP
.B \-\-no-parser
Do not generate the parser code into the output; generate only
declarations. The generated \fIname\fB.tab.c\fR file will have only
constant declarations. In addition, a \fIname\fB.act\fR file is
Do not generate the parser code into the output; generate only
declarations. The generated
.IB name .tab.c
file will have only
constant declarations. In addition, a
.IB name .act
file is
generated containing a switch statement body containing all the
translated actions.
.TP
@@ -334,29 +345,16 @@ The purpose of this switch is to imitate
.IR yacc 's
output file name conventions.
Thus, the following shell script can substitute for
.I yacc
and is often installed as
.IR yacc :
.sp
.RS
.ft B
bison \-y $*
bison \-y "$@"
.ft R
.sp
.RE
.SH FILES
/usr/local/share/bison/bison.simple simple parser
.br
/usr/local/share/bison/bison.hairy complicated parser
.SH "ENVIRONMENT VARIABLES"
.TP
.SM BISON_SIMPLE
If this is set, it specifies the location in which the
.B bison.simple
parser can be found.
.TP
.SM BISON_HAIRY
If this is set, it specifies the location in which the
.B bison.hairy
parser can be found.
.SH SEE ALSO
.IR yacc (1)
.br
-192
View File
@@ -1,192 +0,0 @@
.!
.! RUNOFF source file for BISON.HLP
.!
.! This is a RUNOFF input file which will produce a VMS help file
.! for the VMS HELP library.
.!
.! Eric Youngdale and Wilfred J. Hansen ([email protected]).
.!
.literal
.end literal
.no paging
.no flags all
.right margin 70
.left margin 1
.indent -1
1 BISON
.skip
The BISON command invokes the GNU BISON parser generator.
.skip
.literal
BISON file-spec
.end literal
.skip
.indent -1
2 Parameters
.skip
file-spec
.skip
Here file-spec is the grammar file name, which usually ends in
.y. The parser file's name is made by replacing the .y
with _tab.c. Thus, the command bison foo.y yields
foo_tab.c.
.skip
.indent -1
2 Qualifiers
.skip
The following is the list of available qualifiers for BISON:
.literal
/DEBUG
/DEFINES
/FILE_PREFIX=prefix
/FIXED_OUTFILES
/NAME_PREFIX=prefix
/NOLINES
/NOPARSER
/OUTPUT=outfilefile
/RAW
/TOKEN_TABLE
/VERBOSE
/VERSION
/YACC
.end literal
.skip
.indent -1
2 /DEBUG
.skip
In the parser file,
define the macro YYDEBUG to 1 if it is not already defined,
so that the debugging facilities are compiled.
.skip
.indent -1
2 /DEFINES
.skip
Write an extra output file containing macro definitions for the token
type names defined in the grammar and the semantic value type
YYSTYPE, as well as a extern variable declarations.
.skip
If the parser output file is named "name.c" then this file
is named "name.h".
.skip
This output file is essential if you wish to put the definition of
yylex in a separate source file, because yylex needs to
be able to refer to token type codes and the variable
yylval.
.skip
.indent -1
2 /FILE_PREFIX
.skip
.literal
/FILIE_PREFIX=prefix
.end literal
.skip
Specify a prefix to use for all Bison output file names. The names are
chosen as if the input file were named prefix.c
.skip
.indent -1
2 /FIXED_OUTFILES
.skip
Equivalent to /OUTPUT=y_tab.c; the parser output file is called
y_tab.c, and the other outputs are called y.output and
y_tab.h. The purpose of this switch is to imitate Yacc's output
file name conventions. The /YACC qualifier is functionally equivalent
to /FIXED_OUTFILES. The following command definition will
work as a substitute for Yacc:
.literal
$YACC:==BISON/FIXED_OUTFILES
.end literal
.skip
.indent -1
2 /NAME_PREFIX
.skip
.literal
/NAME_PREFIX=prefix
.end literal
.skip
Rename the external symbols used in the parser so that they start with
"prefix" instead of "yy". The precise list of symbols renamed
is yyparse, yylex, yyerror, yylval, yychar and yydebug.
For example, if you use /NAME_PREFIX="c", the names become cparse,
clex, and so on.
.skip
.indent -1
2 /NOLINES
.skip
Don't put any "#line" preprocessor commands in the parser file.
Ordinarily Bison puts them in the parser file so that the C compiler
and debuggers will associate errors with your source file, the
grammar file. This option causes them to associate errors with the
parser file, treating it an independent source file in its own right.
.skip
.indent -1
2 /NOPARSER
.skip
Do not generate the parser code into the output; generate only
declarations. The generated name_tab.c file will have only
constant declarations. In addition, a name.act file is
generated containing a switch statement body containing all the
translated actions.
.skip
.indent -1
2 /OUTPUT
.skip
.literal
/OUTPUT=outfile
.end literal
.skip
Specify the name "outfile" for the parser file.
.skip
.indent -1
2 /RAW
.skip
When this switch is specified, the .tab.h file defines the tokens to
have the bison token numbers rather than the yacc compatible numbers.
To employ this switch you would have to have your own parser.
.skip
.indent -1
2 /TOKEN_TABLE
.skip
This switch causes the name_tab.c output to include a list of
token names in order by their token numbers; this is defined in the array
yytname. Also generated are #defines for YYNTOKENS, YYNNTS, YYNRULES,
and YYNSTATES.
.skip
.indent -1
2 /VERBOSE
.skip
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.
.skip
This file also describes all the conflicts, both those resolved by
operator precedence and the unresolved ones.
.skip
The file's name is made by removing _tab.c or .c from
the parser output file name, and adding .output instead.
.skip
Therefore, if the input file is foo.y, then the parser file is
called foo_tab.c by default. As a consequence, the verbose
output file is called foo.output.
.skip
.indent -1
2 /VERSION
.skip
Print the version number of Bison.
.skip
.indent -1
2 /YACC
.skip
See /FIXED_OUTFILES.
.skip
.indent -1
+1073 -678
View File
File diff suppressed because it is too large Load Diff
+138 -87
View File
@@ -1,11 +1,12 @@
@node GNU Free Documentation License
@appendixsec GNU Free Documentation License
@cindex FDL, GNU Free Documentation License
@center Version 1.1, March 2000
@center Version 1.2, November 2002
@display
Copyright @copyright{} 2000 Free Software Foundation, Inc.
Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
@@ -17,12 +18,12 @@ of this license document, but changing it is not allowed.
PREAMBLE
The purpose of this License is to make a manual, textbook, or other
written document @dfn{free} in the sense of freedom: to assure everyone
the effective freedom to copy and redistribute it, with or without
modifying it, either commercially or noncommercially. Secondarily,
this License preserves for the author and publisher a way to get
credit for their work, while not being considered responsible for
modifications made by others.
functional and useful document @dfn{free} in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of ``copyleft'', which means that derivative
works of the document must themselves be free in the same sense. It
@@ -40,57 +41,69 @@ principally for works whose purpose is instruction or reference.
@item
APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work that contains a
notice placed by the copyright holder saying it can be distributed
under the terms of this License. The ``Document'', below, refers to any
such manual or work. Any member of the public is a licensee, and is
addressed as ``you''.
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The ``Document'', below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as ``you''. You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
A ``Modified Version'' of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A ``Secondary Section'' is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
within that overall subject. (For example, if the Document is in part a
textbook of mathematics, a Secondary Section may not explain any
mathematics.) The relationship could be a matter of historical
A ``Secondary Section'' is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject. (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The ``Invariant Sections'' are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License.
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The ``Cover Texts'' are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License.
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
A ``Transparent'' copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, whose contents can be viewed and edited directly and
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup has been designed to thwart or discourage
subsequent modification by readers is not Transparent. A copy that is
not ``Transparent'' is called ``Opaque''.
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not ``Transparent'' is called ``Opaque''.
Examples of suitable formats for Transparent copies include plain
@sc{ascii} without markup, Texinfo input format, La@TeX{} input format,
@acronym{SGML} or @acronym{XML} using a publicly available
@acronym{DTD}, and standard-conforming simple @acronym{HTML} designed
for human modification. Opaque formats include PostScript,
@acronym{PDF}, proprietary formats that can be read and edited only by
proprietary word processors, @acronym{SGML} or @acronym{XML} for which
the @acronym{DTD} and/or processing tools are not generally available,
and the machine-generated @acronym{HTML} produced by some word
processors for output purposes only.
@sc{ascii} without markup, Texinfo input format, La@TeX{} input
format, @acronym{SGML} or @acronym{XML} using a publicly available
@acronym{DTD}, and standard-conforming simple @acronym{HTML},
PostScript or @acronym{PDF} designed for human modification. Examples
of transparent image formats include @acronym{PNG}, @acronym{XCF} and
@acronym{JPG}. Opaque formats include proprietary formats that can be
read and edited only by proprietary word processors, @acronym{SGML} or
@acronym{XML} for which the @acronym{DTD} and/or processing tools are
not generally available, and the machine-generated @acronym{HTML},
PostScript or @acronym{PDF} produced by some word processors for
output purposes only.
The ``Title Page'' means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
@@ -99,6 +112,21 @@ formats which do not have any title page as such, ``Title Page'' means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
A section ``Entitled XYZ'' means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as ``Acknowledgements'',
``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
of such a section when you modify the Document means that it remains a
section ``Entitled XYZ'' according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
@item
VERBATIM COPYING
@@ -118,9 +146,10 @@ you may publicly display copies.
@item
COPYING IN QUANTITY
If you publish printed copies of the Document numbering more than 100,
and the Document's license notice requires Cover Texts, you must enclose
the copies in covers that carry, clearly and legibly, all these Cover
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
@@ -138,16 +167,15 @@ pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a publicly-accessible computer-network location containing a complete
Transparent copy of the Document, free of added material, which the
general network-using public has access to download anonymously at no
charge using public-standard network protocols. If you use the latter
option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this
Transparent copy will remain thus accessible at the stated location
until at least one year after the last time you distribute an Opaque
copy (directly or through your agents or retailers) of that edition to
the public.
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
@@ -175,7 +203,8 @@ if the original publisher of that version gives permission.
List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has less than five).
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
@item
State on the Title page the name of the publisher of the
@@ -201,10 +230,10 @@ and required Cover Texts given in the Document's license notice.
Include an unaltered copy of this License.
@item
Preserve the section entitled ``History'', and its title, and add to
it an item stating at least the title, year, new authors, and
Preserve the section Entitled ``History'', Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section entitled ``History'' in the Document, create one
there is no section Entitled ``History'' in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
@@ -219,10 +248,10 @@ least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
@item
In any section entitled ``Acknowledgments'' or ``Dedications'',
preserve the section's title, and preserve in the section all the
substance and tone of each of the contributor acknowledgments
and/or dedications given therein.
For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
the Title of the section, and preserve in the section all the
substance and tone of each of the contributor acknowledgements and/or
dedications given therein.
@item
Preserve all the Invariant Sections of the Document,
@@ -230,12 +259,15 @@ unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
@item
Delete any section entitled ``Endorsements''. Such a section
Delete any section Entitled ``Endorsements''. Such a section
may not be included in the Modified Version.
@item
Do not retitle any existing section as ``Endorsements''
or to conflict in title with any Invariant Section.
Do not retitle any existing section to be Entitled ``Endorsements'' or
to conflict in title with any Invariant Section.
@item
Preserve any Warranty Disclaimers.
@end enumerate
If the Modified Version includes new front-matter sections or
@@ -245,7 +277,7 @@ of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section entitled ``Endorsements'', provided it contains
You may add a section Entitled ``Endorsements'', provided it contains
nothing but endorsements of your Modified Version by various
parties---for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
@@ -273,7 +305,7 @@ License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice.
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
@@ -284,11 +316,11 @@ author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections entitled ``History''
in the various original documents, forming one section entitled
``History''; likewise combine any sections entitled ``Acknowledgments'',
and any sections entitled ``Dedications''. You must delete all sections
entitled ``Endorsements.''
In the combination, you must combine any sections Entitled ``History''
in the various original documents, forming one section Entitled
``History''; likewise combine any sections Entitled ``Acknowledgements'',
and any sections Entitled ``Dedications''. You must delete all
sections Entitled ``Endorsements.''
@item
COLLECTIONS OF DOCUMENTS
@@ -309,18 +341,20 @@ AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, does not as a whole count as a Modified Version
of the Document, provided no compilation copyright is claimed for the
compilation. Such a compilation is called an ``aggregate'', and this
License does not apply to the other self-contained works thus compiled
with the Document, on account of their being thus compiled, if they
are not themselves derivative works of the Document.
distribution medium, is called an ``aggregate'' if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one quarter
of the entire aggregate, the Document's Cover Texts may be placed on
covers that surround only the Document within the aggregate.
Otherwise they must appear on covers around the whole aggregate.
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
@item
TRANSLATION
@@ -331,10 +365,17 @@ Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License provided that you also include the
original English version of this License. In case of a disagreement
between the translation and the original English version of this
License, the original English version will prevail.
translation of this License, and all the license notices in the
Document, and any Warrany Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled ``Acknowledgements'',
``Dedications'', or ``History'', the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
@item
TERMINATION
@@ -377,19 +418,28 @@ license notices just after the title page:
@group
Copyright (C) @var{year} @var{your name}.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with the Invariant Sections being @var{list their titles}, with the
Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}.
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled ``GNU
Free Documentation License''.
@end group
@end smallexample
If you have no Invariant Sections, write ``with no Invariant Sections''
instead of saying which ones are invariant. If you have no
Front-Cover Texts, write ``no Front-Cover Texts'' instead of
``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the ``with...Texts.'' line with this:
@smallexample
@group
with the Invariant Sections being @var{list their titles}, with
the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
being @var{list}.
@end group
@end smallexample
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
@@ -399,3 +449,4 @@ to permit their use in free software.
@c Local Variables:
@c ispell-local-pdict: "ispell-dict"
@c End:
-1
View File
@@ -1,5 +1,4 @@
*_.c
.deps
Makefile
ansi2knr ansi2knr.*
Makefile.in
+7 -4
View File
@@ -15,10 +15,9 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
## 02111-1307 USA
AUTOMAKE_OPTIONS = ansi2knr
CFLAGS = @CFLAGS@ $(WARNING_CFLAGS)
AM_CFLAGS = $(WARNING_CFLAGS)
lib_LIBRARIES = liby.a
noinst_LIBRARIES = libbison.a
# config.h is in build/., and system.h is in src/src/.
@@ -26,6 +25,8 @@ INCLUDES = -I$(top_builddir) \
-I$(top_srcdir)/src \
-I$(top_srcdir)/lib
liby_a_SOURCES = main.c yyerror.c
# Heck, we are still using an old version of Automake which does not
# understand inner AC_LIBOBJ (i.e., from Autoconf itself, not from
# configure.in).
@@ -34,10 +35,12 @@ EXTRA_DIST = malloc.c realloc.c strnlen.c
libbison_a_SOURCES = \
gettext.h \
basename.c dirname.h dirname.c \
get-errno.h get-errno.c \
getopt.h getopt.c getopt1.c \
hash.h hash.c \
mbswidth.h mbswidth.c \
quote.h quote.c quotearg.h quotearg.c \
readpipe.c unlocked-io.h \
subpipe.h subpipe.c unlocked-io.h \
xalloc.h xmalloc.c xstrdup.c xstrndup.c \
$(bitsets_sources) $(additional_bitsets_sources) $(timevars_sources)
+437 -264
View File
@@ -14,7 +14,7 @@
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.
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
@@ -22,54 +22,21 @@
#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 int 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
PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
#define ABITSET_N_WORDS(N) (((N) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS)
#define ABITSET_WORDS(X) ((X)->a.words)
#define ABITSET_N_BITS(X) ((X)->a.n_bits)
/* Return size in bits of bitset SRC. */
static int
abitset_size (src)
bitset src;
static bitset_bindex
abitset_size (bitset src)
{
return ABITSET_N_BITS (src);
}
@@ -78,12 +45,9 @@ 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
abitset_small_list (src, list, num, next)
bitset src;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
static bitset_bindex
abitset_small_list (bitset src, bitset_bindex *list,
bitset_bindex num, bitset_bindex *next)
{
bitset_bindex bitno;
bitset_bindex count;
@@ -139,33 +103,32 @@ abitset_small_list (src, list, num, next)
/* Set bit BITNO in bitset DST. */
static void
abitset_set (dst, bitno)
bitset dst ATTRIBUTE_UNUSED;
bitset_bindex bitno ATTRIBUTE_UNUSED;
abitset_set (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 ();
}
/* Reset bit BITNO in bitset DST. */
static void
abitset_reset (dst, bitno)
bitset dst ATTRIBUTE_UNUSED;
bitset_bindex bitno ATTRIBUTE_UNUSED;
abitset_reset (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 ();
}
/* Test bit BITNO in bitset SRC. */
static int
abitset_test (src, bitno)
bitset src ATTRIBUTE_UNUSED;
bitset_bindex bitno ATTRIBUTE_UNUSED;
abitset_test (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,12 +138,9 @@ 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)
bitset src;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
static bitset_bindex
abitset_list_reverse (bitset src, bitset_bindex *list,
bitset_bindex num, bitset_bindex *next)
{
bitset_bindex bitno;
bitset_bindex rbitno;
@@ -188,7 +148,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 +169,8 @@ abitset_reverse_list (src, list, num, next)
do
{
bitset_word word;
word = srcp[windex] << (BITSET_WORD_BITS - 1 - bitcnt);
for (; word; bitcnt--)
{
@@ -237,12 +198,9 @@ 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
abitset_list (src, list, num, next)
bitset src;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
static bitset_bindex
abitset_list (bitset src, bitset_bindex *list,
bitset_bindex num, bitset_bindex *next)
{
bitset_bindex bitno;
bitset_bindex count;
@@ -342,8 +300,7 @@ abitset_list (src, list, num, next)
/* Ensure that any unused bits within the last word are clear. */
static inline void
abitset_unused_clear (dst)
bitset dst;
abitset_unused_clear (bitset dst)
{
unsigned int last_bit;
@@ -354,178 +311,289 @@ abitset_unused_clear (dst)
}
static int
abitset_op1 (dst, op)
bitset dst;
enum bitset_ops op;
static void
abitset_ones (bitset dst)
{
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 (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 (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)
bitset dst;
bitset src;
enum bitset_ops op;
static void
abitset_copy1 (bitset dst, bitset src)
{
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 (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 (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)
bitset dst;
bitset src1;
bitset src2;
enum bitset_ops op;
abitset_subset_p (bitset dst, bitset src)
{
unsigned int i;
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 (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 (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_and_cmp (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 int
abitset_op4 (dst, src1, src2, src3, op)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
enum bitset_ops op;
static void
abitset_andn (bitset dst, bitset src1, bitset src2)
{
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_andn_cmp (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 (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 (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 (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 (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 (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_and_or_cmp (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);
@@ -533,105 +601,210 @@ abitset_op4 (dst, src1, src2, src3, op)
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 (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 (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 (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 (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 (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
abitset_bytes (n_bits)
bitset_bindex n_bits;
size_t
abitset_bytes (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;
}
bitset
abitset_init (bset, n_bits)
bitset bset;
bitset_bindex n_bits;
abitset_init (bitset bset, bitset_bindex n_bits)
{
bitset_windex size;
@@ -642,9 +815,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));
+26 -22
View File
@@ -33,7 +33,15 @@
#endif
#ifdef emacs
# include "lisp.h"
# include "blockinput.h"
# define xalloc_die() memory_full ()
# ifdef EMACS_FREE
# undef free
# define free EMACS_FREE
# endif
#else
# include <xalloc.h>
#endif
/* If compiling with GCC 2, this file's not needed. */
@@ -53,6 +61,8 @@
you
lose
-- must know STACK_DIRECTION at compile-time
/* Using #error here is not wise since this file should work for
old and obscure compilers. */
# endif /* STACK_DIRECTION undefined */
# endif /* static */
# endif /* emacs */
@@ -67,32 +77,19 @@ long i00afunc ();
# define ADDRESS_FUNCTION(arg) &(arg)
# endif
# if __STDC__
typedef void *pointer;
# else
typedef char *pointer;
# ifndef POINTER_TYPE
# ifdef __STDC__
# define POINTER_TYPE void
# else
# define POINTER_TYPE char
# endif
# endif
typedef POINTER_TYPE *pointer;
# ifndef NULL
# define NULL 0
# endif
/* Different portions of Emacs need to call different versions of
malloc. The Emacs executable needs alloca to call xmalloc, because
ordinary malloc isn't protected from input signals. On the other
hand, the utilities in lib-src need alloca to call malloc; some of
them are very simple, and don't have an xmalloc routine.
Non-Emacs programs expect this to call xmalloc.
Callers below should use malloc. */
# ifndef emacs
# undef malloc
# define malloc xmalloc
# endif
extern pointer malloc ();
/* Define STACK_DIRECTION if you know the direction of stack
growth for your system; otherwise it will be automatically
deduced at run-time.
@@ -169,7 +166,8 @@ static header *last_alloca_header = NULL; /* -> last alloca header. */
implementations of C, for example under Gould's UTX/32. */
pointer
alloca (size_t size)
alloca (size)
size_t size;
{
auto char probe; /* Probes stack depth: */
register char *depth = ADDRESS_FUNCTION (probe);
@@ -215,8 +213,14 @@ alloca (size_t size)
/* Allocate combined header + user data storage. */
{
register pointer new = malloc (sizeof (header) + size);
/* Address of header. */
register pointer new;
size_t combined_size = sizeof (header) + size;
if (combined_size < sizeof (header))
xalloc_die ();
new = xmalloc (combined_size);
if (new == 0)
abort();
+20 -55
View File
@@ -1,5 +1,5 @@
/* argmatch.c -- find a match for a string in an array
Copyright (C) 1990, 1998, 1999, 2001 Free Software Foundation, Inc.
Copyright (C) 1990, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,28 +18,24 @@
/* Written by David MacKenzie <[email protected]>
Modified by Akim Demaille <[email protected]> */
#if HAVE_CONFIG_H
# include <config.h>
#endif
/* Specification. */
#include "argmatch.h"
#include <stdio.h>
#ifdef STDC_HEADERS
# include <stdlib.h>
# include <string.h>
#endif
#include <stdlib.h>
#include <string.h>
#if HAVE_LOCALE_H
# include <locale.h>
#endif
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define _(Text) Text
#endif
#include "gettext.h"
#define _(msgid) gettext (msgid)
#include "error.h"
#include "quotearg.h"
#include "quote.h"
#include "unlocked-io.h"
/* When reporting an invalid argument, show nonprinting characters
by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
@@ -48,14 +44,6 @@
# define ARGMATCH_QUOTING_STYLE locale_quoting_style
#endif
/* The following test is to work around the gross typo in
systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
is defined to 0, not 1. */
#if !EXIT_FAILURE
# undef EXIT_FAILURE
# define EXIT_FAILURE 1
#endif
/* Non failing version of argmatch call this function after failing. */
#ifndef ARGMATCH_DIE
# define ARGMATCH_DIE exit (EXIT_FAILURE)
@@ -80,7 +68,6 @@ argmatch_exit_fn argmatch_die = __argmatch_die;
null-terminated array ARGLIST, return the index in ARGLIST
of the matched element, else -1 if it does not match any element
or -2 if it is ambiguous (is a prefix of more than one element).
If SENSITIVE, comparison is case sensitive.
If VALLIST is none null, use it to resolve ambiguities limited to
synonyms, i.e., for
@@ -88,10 +75,9 @@ argmatch_exit_fn argmatch_die = __argmatch_die;
"no", "nope" -> 1
"y" is a valid argument, for `0', and "n" for `1'. */
static int
__argmatch_internal (const char *arg, const char *const *arglist,
const char *vallist, size_t valsize,
int case_sensitive)
int
argmatch (const char *arg, const char *const *arglist,
const char *vallist, size_t valsize)
{
int i; /* Temporary index in ARGLIST. */
size_t arglen; /* Length of ARG. */
@@ -103,9 +89,7 @@ __argmatch_internal (const char *arg, const char *const *arglist,
/* Test all elements for either exact match or abbreviated matches. */
for (i = 0; arglist[i]; i++)
{
if (case_sensitive
? !strncmp (arglist[i], arg, arglen)
: !strncasecmp (arglist[i], arg, arglen))
if (!strncmp (arglist[i], arg, arglen))
{
if (strlen (arglist[i]) == arglen)
/* Exact match found. */
@@ -133,22 +117,6 @@ __argmatch_internal (const char *arg, const char *const *arglist,
return matchind;
}
/* argmatch - case sensitive version */
int
argmatch (const char *arg, const char *const *arglist,
const char *vallist, size_t valsize)
{
return __argmatch_internal (arg, arglist, vallist, valsize, 1);
}
/* argcasematch - case insensitive version */
int
argcasematch (const char *arg, const char *const *arglist,
const char *vallist, size_t valsize)
{
return __argmatch_internal (arg, arglist, vallist, valsize, 0);
}
/* Error reporting for argmatch.
CONTEXT is a description of the type of entity that was being matched.
VALUE is the invalid value that was given.
@@ -203,12 +171,9 @@ int
__xargmatch_internal (const char *context,
const char *arg, const char *const *arglist,
const char *vallist, size_t valsize,
int case_sensitive,
argmatch_exit_fn exit_fn)
{
int res = __argmatch_internal (arg, arglist,
vallist, valsize,
case_sensitive);
int res = argmatch (arg, arglist, vallist, valsize);
if (res >= 0)
/* Success. */
return res;
@@ -294,12 +259,12 @@ main (int argc, const char *const *argv)
}
if ((cp = getenv ("VERSION_CONTROL")))
backup_type = XARGCASEMATCH ("$VERSION_CONTROL", cp,
backup_args, backup_vals);
backup_type = XARGMATCH ("$VERSION_CONTROL", cp,
backup_args, backup_vals);
if (argc == 2)
backup_type = XARGCASEMATCH (program_name, argv[1],
backup_args, backup_vals);
backup_type = XARGMATCH (program_name, argv[1],
backup_args, backup_vals);
printf ("The version control is `%s'\n",
ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals));
+38 -58
View File
@@ -1,5 +1,5 @@
/* argmatch.h -- definitions and prototypes for argmatch.c
Copyright (C) 1990, 1998, 1999, 2001 Free Software Foundation, Inc.
Copyright (C) 1990, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,109 +21,89 @@
#ifndef ARGMATCH_H_
# define ARGMATCH_H_ 1
# if HAVE_CONFIG_H
# include <config.h>
# endif
# include <stddef.h>
# include <sys/types.h>
# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
# ifndef PARAMS
# if PROTOTYPES || (defined (__STDC__) && __STDC__)
# define PARAMS(args) args
# else
# define PARAMS(args) ()
# endif /* GCC. */
# endif /* Not PARAMS. */
# define ARGMATCH_CONSTRAINT(Arglist, Vallist) \
(ARRAY_CARDINALITY (Arglist) == ARRAY_CARDINALITY (Vallist) + 1)
/* Assert there are as many real arguments as there are values
(argument list ends with a NULL guard). There is no execution
cost, since it will be statically evalauted to `assert (0)' or
`assert (1)'. Unfortunately there is no -Wassert-0. */
(argument list ends with a NULL guard). ARGMATCH_VERIFY is
preferred, since it is guaranteed to be checked at compile-time.
ARGMATCH_ASSERT is for backward compatibility only. */
# undef ARRAY_CARDINALITY
# define ARRAY_CARDINALITY(Array) (sizeof ((Array)) / sizeof (*(Array)))
# define ARGMATCH_VERIFY(Arglist, Vallist) \
struct argmatch_verify \
{ \
char argmatch_verify[ARGMATCH_CONSTRAINT(Arglist, Vallist) ? 1 : -1]; \
}
# define ARGMATCH_ASSERT(Arglist, Vallist) \
assert (ARRAY_CARDINALITY ((Arglist)) == ARRAY_CARDINALITY ((Vallist)) + 1)
# define ARGMATCH_ASSERT(Arglist, Vallist) \
assert (ARGMATCH_CONSTRAINT (Arglist, Vallist))
/* Return the index of the element of ARGLIST (NULL terminated) that
matches with ARG. If VALLIST is not NULL, then use it to resolve
false ambiguities (i.e., different matches of ARG but corresponding
to the same values in VALLIST). */
int argmatch
PARAMS ((const char *arg, const char *const *arglist,
const char *vallist, size_t valsize));
int argcasematch
PARAMS ((const char *arg, const char *const *arglist,
const char *vallist, size_t valsize));
int argmatch (char const *arg, char const *const *arglist,
char const *vallist, size_t valsize);
# define ARGMATCH(Arg, Arglist, Vallist) \
argmatch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist)))
# define ARGCASEMATCH(Arg, Arglist, Vallist) \
argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist)))
argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist))
/* xargmatch calls this function when it fails. This function should not
return. By default, this is a function that calls ARGMATCH_DIE which
in turn defaults to `exit (EXIT_FAILURE)'. */
typedef void (*argmatch_exit_fn) PARAMS ((void));
typedef void (*argmatch_exit_fn) (void);
extern argmatch_exit_fn argmatch_die;
/* Report on stderr why argmatch failed. Report correct values. */
void argmatch_invalid
PARAMS ((const char *context, const char *value, int problem));
void argmatch_invalid (char const *context, char const *value, int problem);
/* Left for compatibility with the old name invalid_arg */
# define invalid_arg(Context, Value, Problem) \
argmatch_invalid ((Context), (Value), (Problem))
argmatch_invalid (Context, Value, Problem)
/* Report on stderr the list of possible arguments. */
void argmatch_valid
PARAMS ((const char *const *arglist,
const char *vallist, size_t valsize));
void argmatch_valid (char const *const *arglist,
char const *vallist, size_t valsize);
# define ARGMATCH_VALID(Arglist, Vallist) \
argmatch_valid (Arglist, (const char *) Vallist, sizeof (*(Vallist)))
argmatch_valid (Arglist, (char const *) (Vallist), sizeof *(Vallist))
/* Same as argmatch, but upon failure, reports a explanation on the
failure, and exits using the function EXIT_FN. */
int __xargmatch_internal
PARAMS ((const char *context,
const char *arg, const char *const *arglist,
const char *vallist, size_t valsize,
int case_sensitive, argmatch_exit_fn exit_fn));
int __xargmatch_internal (char const *context,
char const *arg, char const *const *arglist,
char const *vallist, size_t valsize,
argmatch_exit_fn exit_fn);
/* Programmer friendly interface to __xargmatch_internal. */
# define XARGMATCH(Context, Arg, Arglist, Vallist) \
(Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \
(const char *) (Vallist), \
sizeof (*(Vallist)), \
1, argmatch_die)])
# define XARGCASEMATCH(Context, Arg, Arglist, Vallist) \
(Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \
(const char *) (Vallist), \
sizeof (*(Vallist)), \
0, argmatch_die)])
# define XARGMATCH(Context, Arg, Arglist, Vallist) \
((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \
(char const *) (Vallist), \
sizeof *(Vallist), \
argmatch_die)])
/* Convert a value into a corresponding argument. */
const char *argmatch_to_argument
PARAMS ((char const *value, const char *const *arglist,
const char *vallist, size_t valsize));
char const *argmatch_to_argument (char const *value,
char const *const *arglist,
char const *vallist, size_t valsize);
# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \
argmatch_to_argument ((Value), (Arglist), \
(const char *) (Vallist), sizeof (*(Vallist)))
argmatch_to_argument (Value, Arglist, \
(char const *) (Vallist), sizeof *(Vallist))
#endif /* ARGMATCH_H_ */
+189 -137
View File
@@ -26,11 +26,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#endif
/* 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).
BITSET_TABLE: Expandable table of pointers to array of bits
(variable size, less storage for large 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).
BITSET_STATS: Wrapper bitset for internal use only.
*/
@@ -38,10 +38,9 @@ enum bitset_type {BITSET_ARRAY, BITSET_LIST, BITSET_TABLE, BITSET_TYPE_NUM,
BITSET_STATS};
#define BITSET_TYPE_NAMES {"abitset", "lbitset", "ebitset"}
enum bitset_alloc_type {BITSET_MALLOC, BITSET_OBALLOC};
extern const char * const bitset_type_names[];
/* Non-zero to use inline functions instead of macros. */
#define BITSET_INLINE 0
enum bitset_alloc_type {BITSET_MALLOC, BITSET_OBALLOC};
/* Data type used to store a word of bits. */
typedef unsigned long bitset_word;
@@ -49,130 +48,38 @@ 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))
#define BITSET_LIST_SIZE 1024
enum bitset_ops {BITSET_OP_ZERO, BITSET_OP_ONES,
BITSET_OP_COPY, BITSET_OP_NOT,
enum bitset_ops {BITSET_OP_ZERO, BITSET_OP_ONES,
BITSET_OP_COPY, BITSET_OP_NOT,
BITSET_OP_EMPTY_P, BITSET_OP_EQUAL_P,
BITSET_OP_SUBSET_P, BITSET_OP_DISJOINT_P,
BITSET_OP_AND, BITSET_OP_OR, BITSET_OP_XOR, BITSET_OP_ANDN,
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 +91,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 +153,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 */
+158 -288
View File
@@ -28,17 +28,15 @@
#include "bitset_stats.h"
#include "obstack.h"
static void bitset_print PARAMS ((FILE *, bitset, int));
const char * const bitset_type_names[] = BITSET_TYPE_NAMES;
/* Return number of bytes required to create a N_BIT bitset
of TYPE. The bitset may grow to require more bytes than this. */
int
bitset_bytes (type, n_bits)
enum bitset_type type;
bitset_bindex n_bits;
size_t
bitset_bytes (enum bitset_type type, bitset_bindex n_bits)
{
unsigned int bytes;
size_t bytes;
if (bitset_stats_enabled)
return bitset_stats_bytes ();
@@ -67,14 +65,11 @@ bitset_bytes (type, n_bits)
/* Initialise bitset BSET of TYPE for N_BITS. */
bitset
bitset_init (bset, n_bits, type)
bitset bset;
bitset_bindex n_bits;
enum bitset_type type;
bitset_init (bitset bset, bitset_bindex n_bits, enum bitset_type type)
{
if (bitset_stats_enabled)
return bitset_stats_init (bset, n_bits, type);
switch (type)
{
case BITSET_ARRAY:
@@ -96,9 +91,7 @@ bitset_init (bset, n_bits, type)
specified by ATTR. For variable size bitsets, N_BITS is only a
hint and may be zero. */
enum bitset_type
bitset_type_choose (n_bits, attr)
bitset_bindex n_bits ATTRIBUTE_UNUSED;
unsigned int attr;
bitset_type_choose (bitset_bindex n_bits ATTRIBUTE_UNUSED, unsigned int attr)
{
enum bitset_type type;
@@ -108,10 +101,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. */
@@ -128,11 +119,9 @@ bitset_type_choose (n_bits, attr)
/* Create a bitset of N_BITS of type TYPE. */
bitset
bitset_alloc (n_bits, type)
bitset_bindex n_bits;
enum bitset_type type;
bitset_alloc (bitset_bindex n_bits, enum bitset_type type)
{
unsigned int bytes;
size_t bytes;
bitset bset;
bytes = bitset_bytes (type, n_bits);
@@ -149,12 +138,10 @@ bitset_alloc (n_bits, type)
/* Create a bitset of N_BITS of type TYPE. */
bitset
bitset_obstack_alloc (bobstack, n_bits, type)
struct obstack *bobstack;
bitset_bindex n_bits;
enum bitset_type type;
bitset_obstack_alloc (struct obstack *bobstack,
bitset_bindex n_bits, enum bitset_type type)
{
unsigned int bytes;
size_t bytes;
bitset bset;
bytes = bitset_bytes (type, n_bits);
@@ -169,9 +156,7 @@ bitset_obstack_alloc (bobstack, n_bits, type)
/* Create a bitset of N_BITS and with attribute hints specified by
ATTR. */
bitset
bitset_create (n_bits, attr)
bitset_bindex n_bits;
unsigned int attr;
bitset_create (bitset_bindex n_bits, unsigned int attr)
{
enum bitset_type type;
@@ -183,8 +168,7 @@ bitset_create (n_bits, attr)
/* Free bitset BSET. */
void
bitset_free (bset)
bitset bset;
bitset_free (bitset bset)
{
BITSET_FREE_ (bset);
free (bset);
@@ -193,8 +177,7 @@ bitset_free (bset)
/* Free bitset BSET allocated on obstack. */
void
bitset_obstack_free (bset)
bitset bset;
bitset_obstack_free (bitset bset)
{
BITSET_FREE_ (bset);
}
@@ -202,64 +185,69 @@ bitset_obstack_free (bset)
/* Return bitset type. */
enum bitset_type
bitset_type_get (bset)
bitset bset;
bitset_type_get (bitset bset)
{
enum bitset_type type;
type = BITSET_TYPE_ (bset);
if (type != BITSET_STATS)
return type;
return bitset_stats_type_get (bset);
}
/* Return name of bitset type. */
const char *
bitset_type_name_get (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
bitset_next (src, bitno)
bitset src;
bitset_bindex bitno;
Return BITSET_BINDEX_MAX if SRC empty. */
bitset_bindex
bitset_next (bitset src, bitset_bindex bitno)
{
bitset_bindex val;
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
bitset_prev (src, bitno)
bitset src;
bitset_bindex bitno;
Return BITSET_BINDEX_MAX if SRC empty. */
bitset_bindex
bitset_prev (bitset src, bitset_bindex 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_first (src)
bitset src;
bitset_bindex
bitset_first (bitset src)
{
return bitset_next (src, 0);
}
/* Find last set bit. */
int
bitset_last (src)
bitset src;
bitset_bindex
bitset_last (bitset src)
{
return bitset_prev (src, 0);
}
@@ -267,9 +255,7 @@ bitset_last (src)
/* Return non-zero if BITNO in SRC is the only set bit. */
int
bitset_only_set_p (src, bitno)
bitset src;
bitset_bindex bitno;
bitset_only_set_p (bitset src, bitset_bindex bitno)
{
bitset_bindex val[2];
bitset_bindex next = 0;
@@ -280,39 +266,17 @@ 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)
FILE *file;
bitset bset;
int verbose;
bitset_print (FILE *file, 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,17 +296,74 @@ 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 *file, bitset bset)
{
unsigned int i;
bitset_iterator iter;
bitset_print (file, bset, 0);
}
if (BITSET_COMPATIBLE_ (dst, src))
return BITSET_COPY_ (dst, src);
/* Release memory associated with bitsets. */
void
bitset_release_memory (void)
{
lbitset_release_memory ();
ebitset_release_memory ();
}
/* Toggle bit BITNO in bitset BSET and return non-zero if not set. */
int
bitset_toggle_ (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. */
bitset_bindex
bitset_count_ (bitset src)
{
bitset_bindex list[BITSET_LIST_SIZE];
bitset_bindex next;
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
masks) for counting the number of bits set in a word. */
next = 0;
for (count = 0; (num = bitset_list (src, list, BITSET_LIST_SIZE, &next));
count += num)
continue;
return count;
}
/* 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_copy_ (bitset dst, bitset src)
{
bitset_bindex i;
bitset_iterator iter;
/* Convert bitset types. We assume that the DST bitset
is large enough to hold the SRC bitset. */
@@ -356,180 +377,37 @@ bitset_copy (dst, src)
}
/* Return size in bits of bitset SRC. */
int
bitset_size (src)
bitset src;
{
return BITSET_SIZE_ (src);
}
/* Return number of bits set in bitset SRC. */
int
bitset_count (src)
bitset src;
{
bitset_bindex list[BITSET_LIST_SIZE];
bitset_bindex next;
int num;
int count;
/* This could be greatly sped up by adding a count method for each
bitset implementation that uses a direct technique (based on
masks) for counting the number of bits set in a word. */
next = 0;
for (count = 0; (num = bitset_list (src, list, BITSET_LIST_SIZE, &next));
count += num)
continue;
return count;
}
/* DST = 0. */
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 dst;
bitset src;
{
return BITSET_SUBSET_P_ (dst, src);
}
/* 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);
}
/* This is a fallback for implementations that do not support
four operand operations. */
int
bitset_op4 (dst, src1, src2, src3, op)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
enum bitset_ops op;
static inline int
bitset_op4_cmp (bitset dst, bitset src1, bitset src2, bitset src3,
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,69 +419,61 @@ 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)
bitset dst;
bitset src1;
bitset src2;
bitset src3;
/* DST = (SRC1 & SRC2) | SRC3. */
void
bitset_and_or_ (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 dst;
bitset src1;
bitset src2;
bitset src3;
bitset_and_or_cmp_ (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_ (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 dst;
bitset src1;
bitset src2;
bitset src3;
bitset_andn_or_cmp_ (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_ (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_ (bitset dst, bitset src1, bitset src2, bitset src3)
{
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_OR_AND);
}
/* Function to be called from debugger to print bitset. */
void
debug_bitset (bset)
bitset bset;
debug_bitset (bitset bset)
{
if (bset)
bitset_print (stderr, bset, 1);
}
/* Release memory associated with bitsets. */
void
bitset_release_memory ()
{
lbitset_release_memory ();
ebitset_release_memory ();
}
+177 -128
View File
@@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef _BITSET_H
#define _BITSET_H
#define _BITSET_H
/* This file is the public interface to the bitset abstract data type.
Only use the functions and macros defined in this 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,13 +81,13 @@ 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));
@@ -84,28 +114,20 @@ 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));
#if BITSET_INLINE
static inline void bitset_set PARAMS ((bitset, bitset_bindex));
static inline void bitset_reset PARAMS ((bitset, bitset_bindex));
static inline int bitset_test PARAMS ((bitset, bitset_bindex));
/* Return bitset type name. */
extern const char *bitset_type_name_get PARAMS ((bitset));
/* Set bit BITNO in bitset BSET. */
static inline void bitset_set (bset, bitno)
bitset bset;
bitset_bindex bitno;
static inline void
bitset_set (bitset bset, bitset_bindex bitno)
{
bitset_windex index = bitno / BITSET_WORD_BITS;
bitset_windex offset = index - bset->b.cindex;
bitset_windex windex = bitno / BITSET_WORD_BITS;
bitset_windex offset = windex - bset->b.cindex;
if (offset < bset->b.csize)
bset->b.cdata[offset] |= ((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
else
@@ -114,13 +136,12 @@ static inline void bitset_set (bset, bitno)
/* Reset bit BITNO in bitset BSET. */
static inline void bitset_reset (bset, bitno)
bitset bset;
bitset_bindex bitno;
static inline void
bitset_reset (bitset bset, bitset_bindex bitno)
{
bitset_windex index = bitno / BITSET_WORD_BITS;
bitset_windex offset = index - bset->b.cindex;
bitset_windex windex = bitno / BITSET_WORD_BITS;
bitset_windex offset = windex - bset->b.cindex;
if (offset < bset->b.csize)
bset->b.cdata[offset] &= ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
else
@@ -129,176 +150,204 @@ static inline void bitset_reset (bset, bitno)
/* Test bit BITNO in bitset BSET. */
static inline int bitset_test (bset, bitno)
bitset bset;
bitset_bindex bitno;
static inline int
bitset_test (bitset bset, bitset_bindex bitno)
{
bitset_windex index = bitno / BITSET_WORD_BITS;
bitset_windex offset = index - bset->b.cindex;
bitset_windex windex = bitno / BITSET_WORD_BITS;
bitset_windex offset = windex - bset->b.cindex;
if (offset < bset->b.csize)
return (bset->b.cdata[offset] >> (bitno % BITSET_WORD_BITS)) & 1;
else
return BITSET_TEST_ (bset, bitno);
}
#endif
#if ! BITSET_INLINE
/* Set bit BITNO in bitset BSET. */
#define bitset_set(bset, bitno) \
do \
{ \
bitset_bindex _bitno = (bitno); \
bitset_windex _index = _bitno / BITSET_WORD_BITS; \
bitset_windex _offset = _index - (bset)->b.cindex; \
\
if (_offset < (bset)->b.csize) \
(bset)->b.cdata[_offset] |= \
((bitset_word) 1 << (_bitno % BITSET_WORD_BITS)); \
else \
BITSET_SET_ ((bset), _bitno); \
} while (0)
/* Reset bit BITNO in bitset BSET. */
#define bitset_reset(bset, bitno) \
do \
{ \
bitset_bindex _bitno = (bitno); \
bitset_windex _index = _bitno / BITSET_WORD_BITS; \
bitset_windex _offset = _index - (bset)->b.cindex; \
\
if (_offset < (bset)->b.csize) \
(bset)->b.cdata[_offset] &= \
~((bitset_word) 1 << (_bitno % BITSET_WORD_BITS)); \
else \
BITSET_RESET_ ((bset), _bitno); \
} while (0)
/* 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)))
#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));
/* 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)
/* Return non-zero if BITNO in SRC is the only set bit. */
extern int bitset_only_set_p PARAMS ((bitset, bitset_bindex));
/* Find list of up to NUM bits set in BSET starting from and including
/* 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) \
&& (ITER.num = bitset_list (BSET, ITER.list, \
BITSET_LIST_SIZE, &ITER.next));) \
BITSET_LIST_SIZE, &ITER.next));) \
for (ITER.i = 0; (BIT) = ITER.list[ITER.i], ITER.i < ITER.num; ITER.i++)
/* 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) \
&& (ITER.num = bitset_list_reverse (BSET, ITER.list, \
BITSET_LIST_SIZE, &ITER.next));) \
BITSET_LIST_SIZE, &ITER.next));) \
for (ITER.i = 0; (BIT) = ITER.list[ITER.i], ITER.i < ITER.num; ITER.i++)
/* 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)
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. */
+260 -169
View File
@@ -14,7 +14,7 @@
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.
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* This file is a wrapper bitset implementation for the other bitset
@@ -22,7 +22,7 @@
statistics gathering without having to instrument the bitset
implementations. When statistics gathering is enabled, the bitset
operations get vectored through here and we then call the appropriate
routines.
routines.
*/
#ifdef HAVE_CONFIG_H
@@ -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;
@@ -116,41 +103,10 @@ struct bitset_stats_info_struct *bitset_stats_info;
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_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
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 *,
const char *,
unsigned int,
unsigned int *));
static void bitset_log_histogram_print PARAMS ((FILE *, const char *,
const char *,
unsigned int,
unsigned int *));
static void bitset_stats_print_1
PARAMS ((FILE *, const char *, struct bitset_type_info_struct *));
static void bitset_stats_print PARAMS ((FILE *, int));
/* Print a percentage histogram with message MSG to FILE. */
static void
bitset_percent_histogram_print (file, name, msg, n_bins, bins)
FILE *file;
const char *name;
const char *msg;
unsigned int n_bins;
unsigned int *bins;
bitset_percent_histogram_print (FILE *file, const char *name, const char *msg,
unsigned int n_bins, unsigned int *bins)
{
unsigned int i;
unsigned int total;
@@ -164,7 +120,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);
@@ -173,17 +129,12 @@ bitset_percent_histogram_print (file, name, msg, n_bins, bins)
/* Print a log histogram with message MSG to FILE. */
static void
bitset_log_histogram_print (file, name, msg, n_bins, bins)
FILE *file;
const char *name;
const char *msg;
unsigned int n_bins;
unsigned int *bins;
bitset_log_histogram_print (FILE *file, const char *name, const char *msg,
unsigned int n_bins, unsigned int *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,51 +143,52 @@ 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);
}
/* Print bitset statistics to FILE. */
static void
bitset_stats_print_1 (file, name, stats)
FILE *file;
const char *name;
struct bitset_type_info_struct *stats;
bitset_stats_print_1 (FILE *file, const char *name,
struct bitset_type_info_struct *stats)
{
if (!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);
@@ -251,12 +203,9 @@ bitset_stats_print_1 (file, name, stats)
/* Print all bitset statistics to FILE. */
static void
bitset_stats_print (file, verbose)
FILE *file;
int verbose ATTRIBUTE_UNUSED;
bitset_stats_print (FILE *file, int verbose ATTRIBUTE_UNUSED)
{
int i;
static const char *names[] = BITSET_TYPE_NAMES;
if (!bitset_stats_info)
return;
@@ -264,16 +213,17 @@ 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]);
}
/* Initialise bitset statistics logging. */
void
bitset_stats_enable ()
bitset_stats_enable (void)
{
if (!bitset_stats_info)
bitset_stats_info = &bitset_stats_info_data;
@@ -282,7 +232,7 @@ bitset_stats_enable ()
void
bitset_stats_disable ()
bitset_stats_disable (void)
{
bitset_stats_enabled = 0;
}
@@ -290,14 +240,13 @@ bitset_stats_disable ()
/* Read bitset statistics file. */
void
bitset_stats_read (filename)
const char *filename;
bitset_stats_read (const char *filename)
{
FILE *file;
if (!bitset_stats_info)
return;
if (!filename)
filename = BITSET_STATS_FILE;
@@ -312,7 +261,8 @@ bitset_stats_read (filename)
else
fprintf (stderr, _("Bad stats file size.\n"));
}
fclose (file);
if (fclose (file) != 0)
perror (_("Could not read stats file."));
}
bitset_stats_info_data.runs++;
}
@@ -320,8 +270,7 @@ bitset_stats_read (filename)
/* Write bitset statistics file. */
void
bitset_stats_write (filename)
const char *filename;
bitset_stats_write (const char *filename)
{
FILE *file;
@@ -337,7 +286,8 @@ bitset_stats_write (filename)
if (fwrite (&bitset_stats_info_data, sizeof (bitset_stats_info_data),
1, file) != 1)
perror (_("Could not write stats file."));
fclose (file);
if (fclose (file) != 0)
perror (_("Could not write stats file."));
}
else
perror (_("Could not open stats file for writing."));
@@ -346,8 +296,7 @@ bitset_stats_write (filename)
/* Dump bitset statistics to FILE. */
void
bitset_stats_dump (file)
FILE *file;
bitset_stats_dump (FILE *file)
{
bitset_stats_print (file, 0);
}
@@ -362,14 +311,12 @@ debug_bitset_stats (void)
static void
bitset_stats_set (dst, bitno)
bitset dst;
bitset_bindex bitno;
bitset_stats_set (bitset dst, bitset_bindex bitno)
{
bitset bset = dst->s.bset;
bitset_windex wordno = bitno / BITSET_WORD_BITS;
bitset_windex offset = wordno - bset->b.cindex;
BITSET_STATS_SETS_INC (bset);
if (offset < bset->b.csize)
@@ -383,14 +330,12 @@ bitset_stats_set (dst, bitno)
static void
bitset_stats_reset (dst, bitno)
bitset dst;
bitset_bindex bitno;
bitset_stats_reset (bitset dst, bitset_bindex bitno)
{
bitset bset = dst->s.bset;
bitset_windex wordno = bitno / BITSET_WORD_BITS;
bitset_windex offset = wordno - bset->b.cindex;
BITSET_STATS_RESETS_INC (bset);
if (offset < bset->b.csize)
@@ -405,16 +350,21 @@ bitset_stats_reset (dst, bitno)
static int
bitset_stats_test (src, bitno)
bitset src;
bitset_bindex bitno;
bitset_stats_toggle (bitset src, bitset_bindex bitno)
{
return BITSET_TOGGLE_ (src->s.bset, bitno);
}
static int
bitset_stats_test (bitset src, bitset_bindex bitno)
{
bitset bset = src->s.bset;
bitset_windex wordno = bitno / BITSET_WORD_BITS;
bitset_windex offset = wordno - bset->b.cindex;
BITSET_STATS_TESTS_INC (bset);
if (offset < bset->b.csize)
{
BITSET_STATS_CACHE_TESTS_INC (bset);
@@ -425,74 +375,202 @@ bitset_stats_test (src, bitno)
}
static int
bitset_stats_size (src)
bitset src;
static bitset_bindex
bitset_stats_size (bitset src)
{
return BITSET_SIZE_ (src->s.bset);
}
static int
bitset_stats_op1 (dst, op)
bitset dst;
enum bitset_ops op;
static bitset_bindex
bitset_stats_count (bitset src)
{
return BITSET_OP1_ (dst->s.bset, op);
return BITSET_COUNT_ (src->s.bset);
}
static int
bitset_stats_op2 (dst, src, op)
bitset dst;
bitset src;
enum bitset_ops op;
bitset_stats_empty_p (bitset dst)
{
return BITSET_EMPTY_P_ (dst->s.bset);
}
static void
bitset_stats_ones (bitset dst)
{
BITSET_ONES_ (dst->s.bset);
}
static void
bitset_stats_zero (bitset dst)
{
BITSET_ZERO_ (dst->s.bset);
}
static void
bitset_stats_copy (bitset dst, bitset src)
{
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 dst;
bitset src1;
bitset src2;
enum bitset_ops op;
bitset_stats_disjoint_p (bitset dst, bitset src)
{
BITSET_CHECK2_ (dst, src);
return BITSET_DISJOINT_P_ (dst->s.bset, src->s.bset);
}
static int
bitset_stats_equal_p (bitset dst, bitset src)
{
BITSET_CHECK2_ (dst, src);
return BITSET_EQUAL_P_ (dst->s.bset, src->s.bset);
}
static void
bitset_stats_not (bitset dst, bitset src)
{
BITSET_CHECK2_ (dst, src);
BITSET_NOT_ (dst->s.bset, src->s.bset);
}
static int
bitset_stats_subset_p (bitset dst, bitset src)
{
BITSET_CHECK2_ (dst, src);
return BITSET_SUBSET_P_ (dst->s.bset, src->s.bset);
}
static void
bitset_stats_and (bitset dst, bitset src1, bitset src2)
{
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 dst;
bitset src1;
bitset src2;
bitset src3;
enum bitset_ops op;
bitset_stats_and_cmp (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 (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 (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 (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 (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 (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 (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 (bitset dst, bitset src1, bitset src2, bitset src3)
{
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_list (bset, list, num, next)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
bitset_stats_and_or_cmp (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 (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 (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 (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 (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 (bitset bset, bitset_bindex *list,
bitset_bindex num, bitset_bindex *next)
{
bitset_bindex count;
bitset_bindex tmp;
@@ -501,17 +579,17 @@ bitset_stats_list (bset, list, num, next)
enum bitset_type type;
count = BITSET_LIST_ (bset->s.bset, list, num, next);
type = BITSET_TYPE_ (bset->s.bset);
BITSET_STATS_LISTS_INC (bset->s.bset);
/* Log histogram of number of set bits. */
for (i = 0, tmp = count; tmp; tmp >>= 1, i++)
continue;
if (i >= BITSET_LOG_COUNT_BINS)
i = BITSET_LOG_COUNT_BINS - 1;
BITSET_STATS_LIST_COUNTS_INC (bset->s.bset, i);
/* Log histogram of number of bits in set. */
size = BITSET_SIZE_ (bset->s.bset);
for (i = 0, tmp = size; tmp; tmp >>= 1, i++)
@@ -519,7 +597,7 @@ bitset_stats_list (bset, list, num, next)
if (i >= BITSET_LOG_SIZE_BINS)
i = BITSET_LOG_SIZE_BINS - 1;
BITSET_STATS_LIST_SIZES_INC (bset->s.bset, i);
/* Histogram of fraction of bits set. */
i = size ? (count * BITSET_DENSITY_BINS) / size : 0;
if (i >= BITSET_DENSITY_BINS)
@@ -529,37 +607,53 @@ bitset_stats_list (bset, list, num, next)
}
static int
bitset_stats_reverse_list (bset, list, num, next)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
static bitset_bindex
bitset_stats_list_reverse (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);
}
static void
bitset_stats_free (bset)
bitset bset;
bitset_stats_free (bitset bset)
{
BITSET_STATS_FREES_INC (bset->s.bset);
BITSET_FREE_ (bset->s.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
};
@@ -567,29 +661,26 @@ struct bitset_ops_struct bitset_stats_ops = {
/* Return enclosed bitset type. */
enum bitset_type
bitset_stats_type_get (bset)
bitset bset;
bitset_stats_type_get (bitset bset)
{
return BITSET_TYPE_ (bset->s.bset);
}
int bitset_stats_bytes (void)
size_t
bitset_stats_bytes (void)
{
return sizeof (struct bitset_struct);
return sizeof (struct bitset_stats_struct);
}
bitset
bitset_stats_init (bset, n_bits, type)
bitset bset;
bitset_bindex n_bits;
enum bitset_type type;
bitset_stats_init (bitset bset, bitset_bindex n_bits, 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;
@@ -625,6 +716,6 @@ bitset_stats_init (bset, n_bits, type)
bset->s.bset = sbset;
BITSET_STATS_ALLOCS_INC (type);
return bset;
}
+3 -3
View File
@@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef _BITSET_STATS_H
#define _BITSET_STATS_H
#define _BITSET_STATS_H
#include "bbitset.h"
@@ -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,
extern bitset bitset_stats_init PARAMS ((bitset, bitset_bindex,
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);
+45 -52
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.
@@ -29,30 +29,33 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Create a vector of N_VECS bitsets, each of N_BITS, and of
type TYPE. */
bitset *
bitsetv_alloc (n_vecs, n_bits, type)
unsigned int n_vecs;
unsigned int n_bits;
enum bitset_type type;
bitsetv_alloc (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);
}
/* Null terminate table. */
bsetv[i] = 0;
return bsetv;
@@ -62,13 +65,10 @@ bitsetv_alloc (n_vecs, n_bits, type)
/* Create a vector of N_VECS bitsets, each of N_BITS, and with
attribute hints specified by ATTR. */
bitset *
bitsetv_create (n_vecs, n_bits, attr)
unsigned int n_vecs;
unsigned int n_bits;
unsigned int attr;
bitsetv_create (bitset_bindex n_vecs, bitset_bindex n_bits, unsigned int attr)
{
enum bitset_type type;
type = bitset_type_choose (n_bits, attr);
return bitsetv_alloc (n_vecs, n_bits, type);
}
@@ -76,10 +76,9 @@ bitsetv_create (n_vecs, n_bits, attr)
/* Free bitset vector BSETV. */
void
bitsetv_free (bsetv)
bitset *bsetv;
bitsetv_free (bitsetv bsetv)
{
unsigned int i;
bitset_bindex i;
for (i = 0; bsetv[i]; i++)
BITSET_FREE_ (bsetv[i]);
@@ -89,11 +88,10 @@ bitsetv_free (bsetv)
/* Zero a vector of bitsets. */
void
bitsetv_zero (bsetv)
struct bitset_struct **bsetv;
bitsetv_zero (bitsetv bsetv)
{
unsigned int i;
bitset_bindex i;
for (i = 0; bsetv[i]; i++)
bitset_zero (bsetv[i]);
}
@@ -101,11 +99,10 @@ bitsetv_zero (bsetv)
/* Set a vector of bitsets to ones. */
void
bitsetv_ones (bsetv)
bitset *bsetv;
bitsetv_ones (bitsetv bsetv)
{
unsigned int i;
bitset_bindex i;
for (i = 0; bsetv[i]; i++)
bitset_ones (bsetv[i]);
}
@@ -114,27 +111,26 @@ bitsetv_ones (bsetv)
/* Given a vector BSETV of N bitsets of size N, modify its contents to
be the transitive closure of what was given. */
void
bitsetv_transitive_closure (bsetv)
bitset *bsetv;
bitsetv_transitive_closure (bitsetv 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++)
if (bitset_test (bsetv[j], i))
bitset_or (bsetv[j], bsetv[j], bsetv[i]);
bitset_or (bsetv[j], bsetv[j], bsetv[i]);
}
/* Given a vector BSETV of N bitsets of size N, modify its contents to
be the reflexive transitive closure of what was given. This is
be the reflexive transitive closure of what was given. This is
the same as transitive closure but with all bits on the diagonal
of the bit matrix set. */
void
bitsetv_reflexive_transitive_closure (bitsetv bsetv)
{
int i;
bitset_bindex i;
bitsetv_transitive_closure (bsetv);
for (i = 0; bsetv[i]; i++)
@@ -145,35 +141,32 @@ bitsetv_reflexive_transitive_closure (bitsetv bsetv)
/* Dump the contents of a bitset vector BSETV with N_VECS elements to
FILE. */
void
bitsetv_dump (file, title, subtitle, bsetv)
FILE *file;
const char *title, *subtitle;
bitset *bsetv;
bitsetv_dump (FILE *file, char const *title, char const *subtitle,
bitsetv 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]);
}
fprintf (file, "\n");
}
void
debug_bitsetv (bsetv)
bitset *bsetv;
debug_bitsetv (bitsetv 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]);
}
fprintf (stderr, "\n");
}
+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,
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. */
@@ -47,7 +47,7 @@ extern void bitsetv_ones PARAMS ((bitsetv));
extern void bitsetv_transitive_closure PARAMS ((bitsetv));
/* Given a vector BSETV of N bitsets of size N, modify its contents to
be the reflexive transitive closure of what was given. This is
be the reflexive transitive closure of what was given. This is
the same as transitive closure but with all bits on the diagonal
of the bit matrix set. */
extern void bitsetv_reflexive_transitive_closure PARAMS ((bitsetv));
+313 -316
View File
@@ -14,7 +14,7 @@
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.
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
@@ -37,12 +37,12 @@
Bitsets are commonly empty so we need to ensure that this special
case is fast. A zero bitset is indicated when cdata is 0. This is
conservative since cdata may be non zero and the bitset may still
be zero.
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.
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,12 +81,6 @@ 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 };
@@ -105,35 +91,6 @@ 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 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_free PARAMS ((ebitset_elt *));
static ebitset_elt *ebitset_elt_find PARAMS ((bitset, bitset_windex,
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 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_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
PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
static void ebitset_free PARAMS ((bitset));
#define EBITSET_ELTS(BSET) ((BSET)->e.elts)
#define EBITSET_SIZE(BSET) ((BSET)->e.size)
@@ -141,10 +98,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, \
(BSET)->b.cdata = 0)
#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,9 +109,9 @@ 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.
/* Enable cache to point to element with table index EINDEX.
The element must exist. */
#define EBITSET_CACHE_SET(BSET, EINDEX) \
((BSET)->b.cindex = (EINDEX) * EBITSET_ELT_WORDS, \
@@ -163,16 +120,17 @@ static void ebitset_free PARAMS ((bitset));
/* Grow the expandable table for BSET by SIZE elements. */
static void
ebitset_elts_grow (bset, size)
bitset bset;
unsigned int size;
ebitset_elts_grow (bitset bset, 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;
@@ -183,7 +141,7 @@ ebitset_elts_grow (bset, size)
/* Allocate a ebitset element. The bits are not cleared. */
static inline ebitset_elt *
ebitset_elt_alloc ()
ebitset_elt_alloc (void)
{
ebitset_elt *elt;
@@ -238,7 +196,7 @@ ebitset_elt_alloc ()
/* Allocate a ebitset element. The bits are cleared. */
static inline ebitset_elt *
ebitset_elt_calloc ()
ebitset_elt_calloc (void)
{
ebitset_elt *elt;
@@ -249,8 +207,7 @@ ebitset_elt_calloc ()
static inline void
ebitset_elt_free (elt)
ebitset_elt *elt;
ebitset_elt_free (ebitset_elt *elt)
{
EBITSET_NEXT (elt) = ebitset_free_list;
ebitset_free_list = elt;
@@ -259,9 +216,7 @@ ebitset_elt_free (elt)
/* Remove element with index EINDEX from bitset BSET. */
static inline void
ebitset_elt_remove (bset, eindex)
bitset bset;
unsigned int eindex;
ebitset_elt_remove (bitset bset, bitset_windex eindex)
{
ebitset_elts *elts;
ebitset_elt *elt;
@@ -277,10 +232,7 @@ ebitset_elt_remove (bset, eindex)
/* Add ELT into elts at index EINDEX of bitset BSET. */
static inline void
ebitset_elt_add (bset, elt, eindex)
bitset bset;
ebitset_elt *elt;
unsigned int eindex;
ebitset_elt_add (bitset bset, ebitset_elt *elt, bitset_windex eindex)
{
ebitset_elts *elts;
@@ -292,8 +244,7 @@ ebitset_elt_add (bset, elt, eindex)
/* Return nonzero if all bits in an element are zero. */
static inline int
ebitset_elt_zero_p (elt)
ebitset_elt *elt;
ebitset_elt_zero_p (ebitset_elt *elt)
{
int i;
@@ -306,14 +257,12 @@ ebitset_elt_zero_p (elt)
static ebitset_elt *
ebitset_elt_find (bset, windex, mode)
bitset bset;
bitset_windex windex;
enum ebitset_find_mode mode;
ebitset_elt_find (bitset bset, bitset_windex windex,
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 +292,7 @@ ebitset_elt_find (bset, windex, mode)
case EBITSET_CREATE:
if (eindex >= size)
{
unsigned int extra;
bitset_windex extra;
extra = eindex - size + 1;
@@ -374,8 +323,7 @@ ebitset_elt_find (bset, windex, mode)
static inline ebitset_elt *
ebitset_elt_last (bset)
bitset bset;
ebitset_elt_last (bitset bset)
{
ebitset_elts *elts;
@@ -387,15 +335,14 @@ ebitset_elt_last (bset)
/* Weed out the zero elements from the elts. */
static inline int
ebitset_weed (bset)
bitset bset;
static inline bitset_windex
ebitset_weed (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);
@@ -419,9 +366,9 @@ ebitset_weed (bset)
count = j - count;
if (!count)
{
/* All the bits are zero. We could shrink the elts.
/* 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);
@@ -432,13 +379,12 @@ ebitset_weed (bset)
/* Set all bits in the bitset to zero. */
static inline void
ebitset_zero (bset)
bitset bset;
ebitset_zero (bitset bset)
{
ebitset_elts *elts;
bitset_windex j;
if (EBITSET_OP_ZERO_P (bset))
if (EBITSET_ZERO_P (bset))
return;
elts = EBITSET_ELTS (bset);
@@ -450,16 +396,14 @@ ebitset_zero (bset)
ebitset_elt_remove (bset, j);
}
/* All the bits are zero. We could shrink the elts.
/* 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);
}
static inline int
ebitset_equal_p (dst, src)
bitset dst;
bitset src;
ebitset_equal_p (bitset dst, bitset src)
{
ebitset_elts *selts;
ebitset_elts *delts;
@@ -498,9 +442,7 @@ ebitset_equal_p (dst, src)
/* Copy bits from bitset SRC to bitset DST. */
static inline void
ebitset_copy (dst, src)
bitset dst;
bitset src;
ebitset_copy_ (bitset dst, bitset src)
{
ebitset_elts *selts;
ebitset_elts *delts;
@@ -537,31 +479,28 @@ 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)
bitset dst;
bitset src;
ebitset_copy_cmp (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
ebitset_size (src)
bitset src;
static bitset_bindex
ebitset_size (bitset src)
{
/* Return current size of bitset in bits. */
return EBITSET_SIZE (src) * EBITSET_ELT_BITS;
@@ -570,9 +509,7 @@ ebitset_size (src)
/* Set bit BITNO in bitset DST. */
static void
ebitset_set (dst, bitno)
bitset dst;
bitset_bindex bitno;
ebitset_set (bitset dst, bitset_bindex bitno)
{
bitset_windex windex = bitno / BITSET_WORD_BITS;
@@ -585,9 +522,7 @@ ebitset_set (dst, bitno)
/* Reset bit BITNO in bitset DST. */
static void
ebitset_reset (dst, bitno)
bitset dst;
bitset_bindex bitno;
ebitset_reset (bitset dst, bitset_bindex bitno)
{
bitset_windex windex = bitno / BITSET_WORD_BITS;
@@ -597,7 +532,7 @@ ebitset_reset (dst, bitno)
dst->b.cdata[windex - dst->b.cindex] &=
~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
/* If all the data is zero, perhaps we should remove it now...
/* If all the data is zero, perhaps we should remove it now...
However, there is a good chance that the element will be needed
again soon. */
}
@@ -605,9 +540,7 @@ ebitset_reset (dst, bitno)
/* Test bit BITNO in bitset SRC. */
static int
ebitset_test (src, bitno)
bitset src;
bitset_bindex bitno;
ebitset_test (bitset src, bitset_bindex bitno)
{
bitset_windex windex = bitno / BITSET_WORD_BITS;
@@ -620,8 +553,7 @@ ebitset_test (src, bitno)
static void
ebitset_free (bset)
bitset bset;
ebitset_free (bitset bset)
{
ebitset_zero (bset);
free (EBITSET_ELTS (bset));
@@ -631,12 +563,9 @@ 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)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
static bitset_bindex
ebitset_list_reverse (bitset bset, bitset_bindex *list,
bitset_bindex num, bitset_bindex *next)
{
bitset_bindex n_bits;
bitset_bindex bitno;
@@ -644,13 +573,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,12 +607,11 @@ 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
@@ -705,15 +633,13 @@ ebitset_reverse_list (bset, list, num, next)
}
word <<= 1;
}
boffset -= BITSET_WORD_BITS;
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,23 +652,20 @@ 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
ebitset_list (bset, list, num, next)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
static bitset_bindex
ebitset_list (bitset bset, bitset_bindex *list,
bitset_bindex num, bitset_bindex *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 +686,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 +789,137 @@ ebitset_list (bset, list, num, next)
}
static int
ebitset_op1 (dst, op)
bitset dst;
enum bitset_ops op;
static void
ebitset_ones (bitset dst)
{
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)
bitset dst;
bitset src;
enum bitset_ops op;
ebitset_empty_p (bitset dst)
{
return !ebitset_weed (dst);
}
static void
ebitset_not (bitset dst, bitset src)
{
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 (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)
bitset dst;
bitset src1;
bitset src2;
enum bitset_ops op;
ebitset_disjoint_p (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 (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
{
bitset_windex ssize1;
bitset_windex ssize2;
@@ -1035,37 +935,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,46 +1067,174 @@ ebitset_op3 (dst, src1, src2, op)
}
static int
ebitset_and_cmp (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_and (bitset dst, bitset src1, bitset src2)
{
ebitset_and_cmp (dst, src1, src2);
}
static int
ebitset_andn_cmp (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_andn (bitset dst, bitset src1, bitset src2)
{
ebitset_andn_cmp (dst, src1, src2);
}
static int
ebitset_or_cmp (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_or (bitset dst, bitset src1, bitset src2)
{
ebitset_or_cmp (dst, src1, src2);
}
static int
ebitset_xor_cmp (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_xor (bitset dst, bitset src1, bitset src2)
{
ebitset_xor_cmp (dst, src1, src2);
}
static void
ebitset_copy (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
ebitset_bytes (n_bits)
bitset_bindex n_bits ATTRIBUTE_UNUSED;
size_t
ebitset_bytes (bitset_bindex n_bits ATTRIBUTE_UNUSED)
{
return sizeof (struct bitset_struct);
return sizeof (struct ebitset_struct);
}
/* Initialize a bitset. */
bitset
ebitset_init (bset, n_bits)
bitset bset;
bitset_bindex n_bits;
ebitset_init (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;
@@ -1251,7 +1248,7 @@ ebitset_init (bset, n_bits)
void
ebitset_release_memory ()
ebitset_release_memory (void)
{
ebitset_free_list = 0;
if (ebitset_obstack_init)
+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));
+16 -9
View File
@@ -1,8 +1,5 @@
/* Error handler for noninteractive utilities
Copyright (C) 1990-1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
Copyright (C) 1990-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
@@ -13,8 +10,8 @@
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,
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by David MacKenzie <[email protected]>. */
@@ -24,9 +21,13 @@
#endif
#include <stdio.h>
#if HAVE_LIBINTL_H
#ifdef _LIBC
# include <libintl.h>
#else
# include "gettext.h"
#endif
#ifdef _LIBC
# include <wchar.h>
# define mbsrtowcs __mbsrtowcs
@@ -53,7 +54,10 @@ void exit ();
#endif
#include "error.h"
#include "unlocked-io.h"
#if !_LIBC
# include "unlocked-io.h"
#endif
#ifndef _
# define _(String) String
@@ -76,6 +80,7 @@ unsigned int error_message_count;
# define program_name program_invocation_name
# include <errno.h>
# include <libio/libioP.h>
/* In GNU libc we want do not want to use the common name `error' directly.
Instead make it a weak alias. */
@@ -90,7 +95,9 @@ extern void __error_at_line (int status, int errnum, const char *file_name,
# ifdef USE_IN_LIBIO
# include <libio/iolibio.h>
# define fflush(s) _IO_fflush (s)
# define fflush(s) INTUSE(_IO_fflush) (s)
# undef putc
# define putc(c, fp) INTUSE(_IO_putc) (c, fp)
# endif
#else /* not _LIBC */
+45
View File
@@ -0,0 +1,45 @@
/* get-errno.h - get and set errno.
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, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by Paul Eggert. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <errno.h>
#include "get-errno.h"
/* Get and set errno. A source file that needs to set or get errno,
but doesn't need to test for specific errno values, can use these
functions to avoid namespace pollution. For example, a file that
defines EQUAL should not include <errno.h>, since <errno.h> might
define EQUAL; such a file can include <get-errno.h> instead. */
int
get_errno (void)
{
return errno;
}
void
set_errno (int e)
{
errno = e;
}
+20
View File
@@ -0,0 +1,20 @@
/* get-errno.h - get and set errno.
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, 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. */
extern int get_errno (void);
extern void set_errno (int);
+318 -81
View File
@@ -16,8 +16,8 @@
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,
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. */
/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
@@ -30,6 +30,14 @@
# include <config.h>
#endif
#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
# ifndef const
# define const
# endif
#endif
#include <stdio.h>
/* Comment out all this code if we are using the GNU C Library, and are not
@@ -51,12 +59,14 @@
#ifndef ELIDE_CODE
#if HAVE_STDLIB_H || defined __GNU_LIBRARY__
/* This needs to come after some library #include
to get __GNU_LIBRARY__ defined. */
#ifdef __GNU_LIBRARY__
/* Don't include stdlib.h for non-GNU C libraries because some of them
contain conflicting prototypes for getopt. */
# include <stdlib.h>
#endif
#if HAVE_UNISTD_H || defined __GNU_LIBRARY__
# include <unistd.h>
#endif
#endif /* GNU C library. */
#ifdef VMS
# include <unixlib.h>
@@ -65,16 +75,20 @@
# endif
#endif
#ifndef _
#ifdef _LIBC
# include <libintl.h>
#else
/* This is for other GNU distributions with internationalized messages. */
# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
# include <libintl.h>
# ifndef _
# define _(msgid) gettext (msgid)
# endif
# else
# define _(msgid) (msgid)
# endif
# include "gettext.h"
#endif
#define _(msgid) gettext (msgid)
#if defined _LIBC && defined USE_IN_LIBIO
# include <wchar.h>
#endif
#ifndef attribute_hidden
# define attribute_hidden
#endif
/* This version of `getopt' appears to the caller like standard Unix `getopt'
@@ -120,7 +134,7 @@ int optind = 1;
causes problems with re-calling getopt as programs generally don't
know that. */
int __getopt_initialized;
int __getopt_initialized attribute_hidden;
/* The next char to be scanned in the option-element
in which the last option character we returned was found.
@@ -179,18 +193,30 @@ static enum
/* Value of POSIXLY_CORRECT environment variable. */
static char *posixly_correct;
#if HAVE_STRING_H || defined __GNU_LIBRARY__
#ifdef __GNU_LIBRARY__
/* We want to avoid inclusion of string.h with non-GNU libraries
because there are many ways it can cause trouble.
On some systems, it contains special magic macros that don't work
in GCC. */
# include <string.h>
# define my_index strchr
#else
# if HAVE_STRINGS_H
# if HAVE_STRING_H
# include <string.h>
# else
# include <strings.h>
# endif
/* Avoid depending on library functions or files
whose names are inconsistent. */
#ifndef getenv
extern char *getenv ();
#endif
#if !HAVE_STRCHR && !defined strchr && !defined __GNU_LIBRARY__
# define strchr my_strchr
static char *
strchr (str, chr)
my_index (str, chr)
const char *str;
int chr;
{
@@ -202,11 +228,20 @@ strchr (str, chr)
}
return 0;
}
#endif
#if !HAVE_DECL_GETENV && !defined getenv && !defined __GNU_LIBRARY__
char *getenv ();
#endif
/* If using GCC, we can safely declare strlen this way.
If not using GCC, it is ok not to declare it. */
#ifdef __GNUC__
/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
That was relevant to code that was here before. */
# if (!defined __STDC__ || !__STDC__) && !defined strlen
/* gcc with -traditional declares the built-in strlen to return int,
and has done so at least since version 2.4.5. -- rms. */
extern int strlen (const char *);
# endif /* not __STDC__ */
#endif /* __GNUC__ */
#endif /* not __GNU_LIBRARY__ */
/* Handle permutation of arguments. */
@@ -218,35 +253,22 @@ static int first_nonopt;
static int last_nonopt;
#ifdef _LIBC
/* Stored original parameters.
XXX This is no good solution. We should rather copy the args so
that we can compare them later. But we must not use malloc(3). */
extern int __libc_argc;
extern char **__libc_argv;
/* Bash 2.0 gives us an environment variable containing flags
indicating ARGV elements that should not be considered arguments. */
#ifdef USE_NONOPTION_FLAGS
# ifdef USE_NONOPTION_FLAGS
/* Defined in getopt_init.c */
extern char *__getopt_nonoption_flags;
static int nonoption_flags_max_len;
static int nonoption_flags_len;
#endif
static int original_argc;
static char *const *original_argv;
/* Make sure the environment variable bash 2.0 puts in the environment
is valid for the getopt call we must make sure that the ARGV passed
to getopt is that one passed to the process. */
static void
__attribute__ ((unused))
store_args_and_env (int argc, char *const *argv)
{
/* XXX This is no good solution. We should rather copy the args so
that we can compare them later. But we must not use malloc(3). */
original_argc = argc;
original_argv = argv;
}
# ifdef text_set_element
text_set_element (__libc_subinit, store_args_and_env);
# endif /* text_set_element */
# endif
# ifdef USE_NONOPTION_FLAGS
# define SWAP_FLAGS(ch1, ch2) \
@@ -396,7 +418,7 @@ _getopt_initialize (argc, argv, optstring)
#if defined _LIBC && defined USE_NONOPTION_FLAGS
if (posixly_correct == NULL
&& argc == original_argc && argv == original_argv)
&& argc == __libc_argc && argv == __libc_argv)
{
if (nonoption_flags_max_len == 0)
{
@@ -615,7 +637,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (longopts != NULL
&& (argv[optind][1] == '-'
|| (long_only && (argv[optind][2] || !strchr (optstring, argv[optind][1])))))
|| (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
{
char *nameend;
const struct option *p;
@@ -659,8 +681,26 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (ambig && !exact)
{
if (print_errors)
fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
argv[0], argv[optind]);
{
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
argv[0], argv[optind]) >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#else
fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
argv[0], argv[optind]);
#endif
}
nextchar += strlen (nextchar);
optind++;
optopt = 0;
@@ -681,16 +721,50 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
{
if (print_errors)
{
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
int n;
#endif
if (argv[optind - 1][1] == '-')
/* --option */
fprintf (stderr,
_("%s: option `--%s' doesn't allow an argument\n"),
argv[0], pfound->name);
{
/* --option */
#if defined _LIBC && defined USE_IN_LIBIO
n = __asprintf (&buf, _("\
%s: option `--%s' doesn't allow an argument\n"),
argv[0], pfound->name);
#else
fprintf (stderr, _("\
%s: option `--%s' doesn't allow an argument\n"),
argv[0], pfound->name);
#endif
}
else
/* +option or -option */
fprintf (stderr,
_("%s: option `%c%s' doesn't allow an argument\n"),
argv[0], argv[optind - 1][0], pfound->name);
{
/* +option or -option */
#if defined _LIBC && defined USE_IN_LIBIO
n = __asprintf (&buf, _("\
%s: option `%c%s' doesn't allow an argument\n"),
argv[0], argv[optind - 1][0],
pfound->name);
#else
fprintf (stderr, _("\
%s: option `%c%s' doesn't allow an argument\n"),
argv[0], argv[optind - 1][0], pfound->name);
#endif
}
#if defined _LIBC && defined USE_IN_LIBIO
if (n >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#endif
}
nextchar += strlen (nextchar);
@@ -706,9 +780,27 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
else
{
if (print_errors)
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
{
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
if (__asprintf (&buf, _("\
%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]) >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#else
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
#endif
}
nextchar += strlen (nextchar);
optopt = pfound->val;
return optstring[0] == ':' ? ':' : '?';
@@ -730,18 +822,49 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
option, then it's an error.
Otherwise interpret it as a short option. */
if (!long_only || argv[optind][1] == '-'
|| strchr (optstring, *nextchar) == NULL)
|| my_index (optstring, *nextchar) == NULL)
{
if (print_errors)
{
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
int n;
#endif
if (argv[optind][1] == '-')
/* --option */
fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
argv[0], nextchar);
{
/* --option */
#if defined _LIBC && defined USE_IN_LIBIO
n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
argv[0], nextchar);
#else
fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
argv[0], nextchar);
#endif
}
else
/* +option or -option */
fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
argv[0], argv[optind][0], nextchar);
{
/* +option or -option */
#if defined _LIBC && defined USE_IN_LIBIO
n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
argv[0], argv[optind][0], nextchar);
#else
fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
argv[0], argv[optind][0], nextchar);
#endif
}
#if defined _LIBC && defined USE_IN_LIBIO
if (n >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#endif
}
nextchar = (char *) "";
optind++;
@@ -754,7 +877,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
{
char c = *nextchar++;
char *temp = strchr (optstring, c);
char *temp = my_index (optstring, c);
/* Increment `optind' when we start to process its last character. */
if (*nextchar == '\0')
@@ -764,13 +887,42 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
{
if (print_errors)
{
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
int n;
#endif
if (posixly_correct)
/* 1003.2 specifies the format of this message. */
fprintf (stderr, _("%s: illegal option -- %c\n"),
argv[0], c);
{
/* 1003.2 specifies the format of this message. */
#if defined _LIBC && defined USE_IN_LIBIO
n = __asprintf (&buf, _("%s: illegal option -- %c\n"),
argv[0], c);
#else
fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
#endif
}
else
fprintf (stderr, _("%s: invalid option -- %c\n"),
argv[0], c);
{
#if defined _LIBC && defined USE_IN_LIBIO
n = __asprintf (&buf, _("%s: invalid option -- %c\n"),
argv[0], c);
#else
fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
#endif
}
#if defined _LIBC && defined USE_IN_LIBIO
if (n >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#endif
}
optopt = c;
return '?';
@@ -799,8 +951,24 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (print_errors)
{
/* 1003.2 specifies the format of this message. */
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
if (__asprintf (&buf,
_("%s: option requires an argument -- %c\n"),
argv[0], c) >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#else
fprintf (stderr, _("%s: option requires an argument -- %c\n"),
argv[0], c);
#endif
}
optopt = c;
if (optstring[0] == ':')
@@ -846,8 +1014,25 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (ambig && !exact)
{
if (print_errors)
fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
argv[0], argv[optind]);
{
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
argv[0], argv[optind]) >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#else
fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
argv[0], argv[optind]);
#endif
}
nextchar += strlen (nextchar);
optind++;
return '?';
@@ -864,9 +1049,27 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
else
{
if (print_errors)
fprintf (stderr, _("\
{
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
if (__asprintf (&buf, _("\
%s: option `-W %s' doesn't allow an argument\n"),
argv[0], pfound->name);
argv[0], pfound->name) >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#else
fprintf (stderr, _("\
%s: option `-W %s' doesn't allow an argument\n"),
argv[0], pfound->name);
#endif
}
nextchar += strlen (nextchar);
return '?';
@@ -879,9 +1082,27 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
else
{
if (print_errors)
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
{
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
if (__asprintf (&buf, _("\
%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]) >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#else
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
#endif
}
nextchar += strlen (nextchar);
return optstring[0] == ':' ? ':' : '?';
}
@@ -928,9 +1149,25 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (print_errors)
{
/* 1003.2 specifies the format of this message. */
#if defined _LIBC && defined USE_IN_LIBIO
char *buf;
if (__asprintf (&buf, _("\
%s: option requires an argument -- %c\n"),
argv[0], c) >= 0)
{
if (_IO_fwide (stderr, 0) > 0)
__fwprintf (stderr, L"%s", buf);
else
fputs (buf, stderr);
free (buf);
}
#else
fprintf (stderr,
_("%s: option requires an argument -- %c\n"),
argv[0], c);
#endif
}
optopt = c;
if (optstring[0] == ':')
+14 -23
View File
@@ -1,8 +1,5 @@
/* Declarations for getopt.
Copyright (C) 1989-1994, 1996-1999, 2001, 2002 Free Software Foundation,
Inc.
Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software; you can redistribute it and/or modify
@@ -15,8 +12,8 @@
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,
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef _GETOPT_H
@@ -29,16 +26,11 @@
standalone, or this is the first header included in the source file.
If we are being used with glibc, we need to include <features.h>, but
that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
not defined, include <stdlib.h>, which will pull in <features.h> for us
if it's from glibc (and will declare getopt). Fall back on <ctype.h> if
<stdlib.h> might not exist. (Why ctype.h? It's guaranteed to exist and it
not defined, include <ctype.h>, which will pull in <features.h> for us
if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
doesn't flood the namespace with stuff the way some other headers do.) */
#if !defined __GNU_LIBRARY__
# if HAVE_STDLIB_H || STDC_HEADERS
# include <stdlib.h>
# else
# include <ctype.h>
# endif
# include <ctype.h>
#endif
#ifdef __cplusplus
@@ -145,26 +137,25 @@ struct option
`getopt'. */
#if (defined __STDC__ && __STDC__) || defined __cplusplus
# if defined HAVE_DECL_GETOPT && !HAVE_DECL_GETOPT
# ifdef __GNU_LIBRARY__
# ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
errors, only prototype getopt for the GNU C library. */
extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
# else /* not __GNU_LIBRARY__ */
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts);
# else /* not __GNU_LIBRARY__ */
extern int getopt ();
# endif /* __GNU_LIBRARY__ */
# endif /* defined HAVE_DECL_GETOPT && !HAVE_DECL_GETOPT */
# endif /* __GNU_LIBRARY__ */
# ifndef __need_getopt
extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts,
extern int getopt_long (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind);
extern int getopt_long_only (int __argc, char *const *__argv,
extern int getopt_long_only (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind);
/* Internal only. Users should not call this directly. */
extern int _getopt_internal (int __argc, char *const *__argv,
extern int _getopt_internal (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind,
int __long_only);
+21 -4
View File
@@ -1,5 +1,5 @@
/* getopt_long and getopt_long_only entry points for GNU getopt.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98, 2002
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -13,15 +13,28 @@
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,
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
#include "getopt.h"
#ifdef _LIBC
# include <getopt.h>
#else
# include "getopt.h"
#endif
#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
#ifndef const
#define const
#endif
#endif
#include <stdio.h>
/* Comment out all this code if we are using the GNU C Library, and are not
@@ -80,6 +93,10 @@ getopt_long_only (argc, argv, options, long_options, opt_index)
return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
}
# ifdef _LIBC
libc_hidden_def (getopt_long)
libc_hidden_def (getopt_long_only)
# endif
#endif /* Not ELIDE_CODE. */
+9 -8
View File
@@ -1,19 +1,20 @@
/* Convenience header for conditional use of GNU <libintl.h>.
Copyright (C) 1995-1998, 2000-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, or (at your option)
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published
by the Free Software Foundation; either version 2, 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.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU 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. */
You should have received a copy of the GNU Library General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
#ifndef _LIBGETTEXT_H
#define _LIBGETTEXT_H 1
+18 -12
View File
@@ -1,5 +1,5 @@
/* hash - hashing table processing.
Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by Jim Meyering, 1992.
This program is free software; you can redistribute it and/or modify
@@ -33,7 +33,6 @@
typedef enum {false = 0, true = 1} bool;
#endif
#include <stdio.h>
#include <assert.h>
#ifndef HAVE_DECL_FREE
"this configure-time declaration test was not run"
@@ -263,7 +262,8 @@ hash_lookup (const Hash_table *table, const void *entry)
= table->bucket + table->hasher (entry, table->n_buckets);
struct hash_entry *cursor;
assert (bucket < table->bucket_limit);
if (! (bucket < table->bucket_limit))
abort ();
if (bucket->data == NULL)
return NULL;
@@ -292,12 +292,11 @@ hash_get_first (const Hash_table *table)
if (table->n_entries == 0)
return NULL;
for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
if (bucket->data)
for (bucket = table->bucket; ; bucket++)
if (! (bucket < table->bucket_limit))
abort ();
else if (bucket->data)
return bucket->data;
assert (0);
return NULL;
}
/* Return the user data for the entry following ENTRY, where ENTRY has been
@@ -311,7 +310,8 @@ hash_get_next (const Hash_table *table, const void *entry)
= table->bucket + table->hasher (entry, table->n_buckets);
struct hash_entry *cursor;
assert (bucket < table->bucket_limit);
if (! (bucket < table->bucket_limit))
abort ();
/* Find next entry in the same bucket. */
for (cursor = bucket; cursor; cursor = cursor->next)
@@ -754,7 +754,9 @@ hash_find_entry (Hash_table *table, const void *entry,
= table->bucket + table->hasher (entry, table->n_buckets);
struct hash_entry *cursor;
assert (bucket < table->bucket_limit);
if (! (bucket < table->bucket_limit))
abort ();
*bucket_head = bucket;
/* Test for empty bucket. */
@@ -848,7 +850,9 @@ hash_rehash (Hash_table *table, unsigned candidate)
= (new_table->bucket
+ new_table->hasher (data, new_table->n_buckets));
assert (new_bucket < new_table->bucket_limit);
if (! (new_bucket < new_table->bucket_limit))
abort ();
next = cursor->next;
if (new_bucket->data)
@@ -912,7 +916,9 @@ hash_insert (Hash_table *table, const void *entry)
void *data;
struct hash_entry *bucket;
assert (entry); /* cannot insert a NULL entry */
/* The caller cannot insert a NULL entry. */
if (! entry)
abort ();
/* If there's a matching entry already in the table, return that. */
if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL)
+352 -304
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,22 +64,6 @@ 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 };
@@ -88,36 +74,10 @@ static struct obstack lbitset_obstack;
static int lbitset_obstack_init = 0;
static lbitset_elt *lbitset_free_list; /* Free list of bitset elements. */
static lbitset_elt *lbitset_elt_alloc PARAMS ((void));
static lbitset_elt *lbitset_elt_calloc PARAMS ((void));
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));
static int lbitset_elt_zero_p PARAMS ((lbitset_elt *));
extern void debug_lbitset PARAMS ((bitset));
static void lbitset_prune PARAMS ((bitset, lbitset_elt *));
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 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
PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
static void lbitset_free 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)
@@ -126,7 +86,7 @@ static void lbitset_free PARAMS ((bitset));
/* Allocate a lbitset element. The bits are not cleared. */
static inline lbitset_elt *
lbitset_elt_alloc ()
lbitset_elt_alloc (void)
{
lbitset_elt *elt;
@@ -181,7 +141,7 @@ lbitset_elt_alloc ()
/* Allocate a lbitset element. The bits are cleared. */
static inline lbitset_elt *
lbitset_elt_calloc ()
lbitset_elt_calloc (void)
{
lbitset_elt *elt;
@@ -192,8 +152,7 @@ lbitset_elt_calloc ()
static inline void
lbitset_elt_free (elt)
lbitset_elt *elt;
lbitset_elt_free (lbitset_elt *elt)
{
elt->next = lbitset_free_list;
lbitset_free_list = elt;
@@ -202,9 +161,7 @@ lbitset_elt_free (elt)
/* Unlink element ELT from bitset BSET. */
static inline void
lbitset_elt_unlink (bset, elt)
bitset bset;
lbitset_elt *elt;
lbitset_elt_unlink (bitset bset, lbitset_elt *elt)
{
lbitset_elt *next = elt->next;
lbitset_elt *prev = elt->prev;
@@ -249,9 +206,7 @@ lbitset_elt_unlink (bset, elt)
/* Cut the chain of bitset BSET before element ELT and free the
elements. */
static inline void
lbitset_prune (bset, elt)
bitset bset;
lbitset_elt *elt;
lbitset_prune (bitset bset, lbitset_elt *elt)
{
lbitset_elt *next;
@@ -283,8 +238,7 @@ lbitset_prune (bset, elt)
/* Return nonzero if all bits in an element are zero. */
static inline int
lbitset_elt_zero_p (elt)
lbitset_elt *elt;
lbitset_elt_zero_p (lbitset_elt *elt)
{
int i;
@@ -298,9 +252,7 @@ lbitset_elt_zero_p (elt)
/* Link the bitset element into the current bitset linked list. */
static inline void
lbitset_elt_link (bset, elt)
bitset bset;
lbitset_elt *elt;
lbitset_elt_link (bitset bset, lbitset_elt *elt)
{
bitset_windex windex = elt->index;
lbitset_elt *ptr;
@@ -362,10 +314,8 @@ lbitset_elt_link (bset, elt)
static lbitset_elt *
lbitset_elt_find (bset, windex, mode)
bitset bset;
bitset_windex windex;
enum lbitset_find_mode mode;
lbitset_elt_find (bitset bset, bitset_windex windex,
enum lbitset_find_mode mode)
{
lbitset_elt *elt;
lbitset_elt *current;
@@ -398,7 +348,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 +365,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;
@@ -433,8 +383,7 @@ lbitset_elt_find (bset, windex, mode)
/* Weed out the zero elements from the list. */
static inline void
lbitset_weed (bset)
bitset bset;
lbitset_weed (bitset bset)
{
lbitset_elt *elt;
lbitset_elt *next;
@@ -449,9 +398,8 @@ lbitset_weed (bset)
/* Set all bits in the bitset to zero. */
static inline void
lbitset_zero (bset)
bitset bset;
static void
lbitset_zero (bitset bset)
{
lbitset_elt *head;
@@ -464,10 +412,9 @@ lbitset_zero (bset)
}
/* Return 1 if DST == SRC. */
static inline int
lbitset_equal_p (dst, src)
bitset dst;
bitset src;
lbitset_equal_p (bitset dst, bitset src)
{
lbitset_elt *selt;
lbitset_elt *delt;
@@ -494,9 +441,7 @@ lbitset_equal_p (dst, src)
/* Copy bits from bitset SRC to bitset DST. */
static inline void
lbitset_copy (dst, src)
bitset dst;
bitset src;
lbitset_copy (bitset dst, bitset src)
{
lbitset_elt *elt;
lbitset_elt *head;
@@ -538,9 +483,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)
bitset dst;
bitset src;
lbitset_copy_cmp (bitset dst, bitset src)
{
if (src == dst)
return 0;
@@ -560,9 +503,8 @@ lbitset_copy_compare (dst, src)
/* Return size in bits of bitset SRC. */
static int
lbitset_size (src)
bitset src;
static bitset_bindex
lbitset_size (bitset src)
{
lbitset_elt *elt;
@@ -577,9 +519,7 @@ lbitset_size (src)
/* Set bit BITNO in bitset DST. */
static void
lbitset_set (dst, bitno)
bitset dst;
bitset_bindex bitno;
lbitset_set (bitset dst, bitset_bindex bitno)
{
bitset_windex windex = bitno / BITSET_WORD_BITS;
@@ -592,9 +532,7 @@ lbitset_set (dst, bitno)
/* Reset bit BITNO in bitset DST. */
static void
lbitset_reset (dst, bitno)
bitset dst;
bitset_bindex bitno;
lbitset_reset (bitset dst, bitset_bindex bitno)
{
bitset_windex windex = bitno / BITSET_WORD_BITS;
@@ -610,23 +548,20 @@ lbitset_reset (dst, bitno)
/* Test bit BITNO in bitset SRC. */
static int
lbitset_test (src, bitno)
bitset src;
bitset_bindex bitno;
lbitset_test (bitset src, bitset_bindex bitno)
{
bitset_windex windex = bitno / BITSET_WORD_BITS;
if (!lbitset_elt_find (src, windex, LBITSET_FIND))
return 0;
return (src->b.cdata[windex - src->b.cindex]
return (src->b.cdata[windex - src->b.cindex]
>> (bitno % BITSET_WORD_BITS)) & 1;
}
static void
lbitset_free (bset)
bitset bset;
lbitset_free (bitset bset)
{
lbitset_zero (bset);
}
@@ -635,12 +570,9 @@ 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)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
static bitset_bindex
lbitset_list_reverse (bitset bset, bitset_bindex *list,
bitset_bindex num, bitset_bindex *next)
{
bitset_bindex rbitno;
bitset_bindex bitno;
@@ -673,13 +605,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,12 +665,9 @@ 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
lbitset_list (bset, list, num, next)
bitset bset;
bitset_bindex *list;
bitset_bindex num;
bitset_bindex *next;
static bitset_bindex
lbitset_list (bitset bset, bitset_bindex *list,
bitset_bindex num, bitset_bindex *next)
{
bitset_bindex bitno;
bitset_windex windex;
@@ -926,168 +866,149 @@ lbitset_list (bset, list, num, next)
static int
lbitset_op1 (dst, op)
bitset dst;
enum bitset_ops op;
lbitset_empty_p (bitset dst)
{
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)
bitset dst;
bitset src;
enum bitset_ops op;
static void
lbitset_ones (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 (bitset dst, bitset src)
{
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;
/* 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);
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 ();
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 (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 (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)
bitset dst;
bitset src1;
bitset src2;
enum bitset_ops op;
lbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
{
lbitset_elt *selt1 = LBITSET_HEAD (src1);
lbitset_elt *selt2 = LBITSET_HEAD (src2);
@@ -1104,42 +1025,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 +1041,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 +1051,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 +1059,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,46 +1165,174 @@ lbitset_op3 (dst, src1, src2, op)
}
static int
lbitset_and_cmp (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_and (bitset dst, bitset src1, bitset src2)
{
lbitset_and_cmp (dst, src1, src2);
}
static int
lbitset_andn_cmp (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_andn (bitset dst, bitset src1, bitset src2)
{
lbitset_andn_cmp (dst, src1, src2);
}
static int
lbitset_or_cmp (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_or (bitset dst, bitset src1, bitset src2)
{
lbitset_or_cmp (dst, src1, src2);
}
static int
lbitset_xor_cmp (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);
}
static void
lbitset_xor (bitset dst, bitset src1, bitset src2)
{
lbitset_xor_cmp (dst, src1, src2);
}
/* 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
lbitset_bytes (n_bits)
bitset_bindex n_bits ATTRIBUTE_UNUSED;
size_t
lbitset_bytes (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;
lbitset_init (bitset bset, bitset_bindex n_bits ATTRIBUTE_UNUSED)
{
bset->b.ops = &lbitset_ops;
bset->b.vtable = &lbitset_vtable;
return bset;
}
void
lbitset_release_memory ()
lbitset_release_memory (void)
{
lbitset_free_list = 0;
if (lbitset_obstack_init)
@@ -1323,3 +1341,33 @@ lbitset_release_memory ()
obstack_free (&lbitset_obstack, NULL);
}
}
/* Function to be called from debugger to debug lbitset. */
void
debug_lbitset (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));
+38
View File
@@ -0,0 +1,38 @@
/* Yacc library main function.
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. */
#include <config.h>
#if HAVE_LOCALE_H
# include <locale.h>
#endif
#if ! HAVE_SETLOCALE
# define setlocale(Category, Locale)
#endif
int yyparse (void);
int
main (void)
{
setlocale (LC_ALL, "");
return yyparse ();
}
+213
View File
@@ -0,0 +1,213 @@
/* Determine the number of screen columns needed for a string.
Copyright (C) 2000-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, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by Bruno Haible <[email protected]>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
/* Specification. */
#include "mbswidth.h"
/* Get MB_CUR_MAX. */
#include <stdlib.h>
#include <string.h>
/* Get isprint(). */
#include <ctype.h>
/* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth(). */
#if HAVE_WCHAR_H
# include <wchar.h>
#endif
/* Get iswprint(), iswcntrl(). */
#if HAVE_WCTYPE_H
# include <wctype.h>
#endif
#if !defined iswprint && !HAVE_ISWPRINT
# define iswprint(wc) 1
#endif
#if !defined iswcntrl && !HAVE_ISWCNTRL
# define iswcntrl(wc) 0
#endif
#ifndef mbsinit
# if !HAVE_MBSINIT
# define mbsinit(ps) 1
# endif
#endif
#ifndef HAVE_DECL_WCWIDTH
"this configure-time declaration test was not run"
#endif
#if !HAVE_DECL_WCWIDTH
int wcwidth ();
#endif
#ifndef wcwidth
# if !HAVE_WCWIDTH
/* wcwidth doesn't exist, so assume all printable characters have
width 1. */
# define wcwidth(wc) ((wc) == 0 ? 0 : iswprint (wc) ? 1 : -1)
# endif
#endif
/* Get ISPRINT. */
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
# define IN_CTYPE_DOMAIN(c) 1
#else
# define IN_CTYPE_DOMAIN(c) isascii(c)
#endif
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
#undef ISPRINT
#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
#undef ISCNTRL
#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
/* Returns the number of columns needed to represent the multibyte
character string pointed to by STRING. If a non-printable character
occurs, and MBSW_REJECT_UNPRINTABLE is specified, -1 is returned.
With flags = MBSW_REJECT_INVALID | MBSW_REJECT_UNPRINTABLE, this is
the multibyte analogon of the wcswidth function. */
int
mbswidth (const char *string, int flags)
{
return mbsnwidth (string, strlen (string), flags);
}
/* Returns the number of columns needed to represent the multibyte
character string pointed to by STRING of length NBYTES. If a
non-printable character occurs, and MBSW_REJECT_UNPRINTABLE is
specified, -1 is returned. */
int
mbsnwidth (const char *string, size_t nbytes, int flags)
{
const char *p = string;
const char *plimit = p + nbytes;
int width;
width = 0;
#if HAVE_MBRTOWC
if (MB_CUR_MAX > 1)
{
while (p < plimit)
switch (*p)
{
case ' ': case '!': case '"': case '#': case '%':
case '&': case '\'': case '(': case ')': case '*':
case '+': case ',': case '-': case '.': case '/':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case ':': case ';': case '<': case '=': case '>':
case '?':
case 'A': case 'B': case 'C': case 'D': case 'E':
case 'F': case 'G': case 'H': case 'I': case 'J':
case 'K': case 'L': case 'M': case 'N': case 'O':
case 'P': case 'Q': case 'R': case 'S': case 'T':
case 'U': case 'V': case 'W': case 'X': case 'Y':
case 'Z':
case '[': case '\\': case ']': case '^': case '_':
case 'a': case 'b': case 'c': case 'd': case 'e':
case 'f': case 'g': case 'h': case 'i': case 'j':
case 'k': case 'l': case 'm': case 'n': case 'o':
case 'p': case 'q': case 'r': case 's': case 't':
case 'u': case 'v': case 'w': case 'x': case 'y':
case 'z': case '{': case '|': case '}': case '~':
/* These characters are printable ASCII characters. */
p++;
width++;
break;
default:
/* If we have a multibyte sequence, scan it up to its end. */
{
mbstate_t mbstate;
memset (&mbstate, 0, sizeof mbstate);
do
{
wchar_t wc;
size_t bytes;
int w;
bytes = mbrtowc (&wc, p, plimit - p, &mbstate);
if (bytes == (size_t) -1)
/* An invalid multibyte sequence was encountered. */
{
if (!(flags & MBSW_REJECT_INVALID))
{
p++;
width++;
break;
}
else
return -1;
}
if (bytes == (size_t) -2)
/* An incomplete multibyte character at the end. */
{
if (!(flags & MBSW_REJECT_INVALID))
{
p = plimit;
width++;
break;
}
else
return -1;
}
if (bytes == 0)
/* A null wide character was encountered. */
bytes = 1;
w = wcwidth (wc);
if (w >= 0)
/* A printable multibyte character. */
width += w;
else
/* An unprintable multibyte character. */
if (!(flags & MBSW_REJECT_UNPRINTABLE))
width += (iswcntrl (wc) ? 0 : 1);
else
return -1;
p += bytes;
}
while (! mbsinit (&mbstate));
}
break;
}
return width;
}
#endif
while (p < plimit)
{
unsigned char c = (unsigned char) *p++;
if (ISPRINT (c))
width++;
else if (!(flags & MBSW_REJECT_UNPRINTABLE))
width += (ISCNTRL (c) ? 0 : 1);
else
return -1;
}
return width;
}
+37
View File
@@ -0,0 +1,37 @@
/* Determine the number of screen columns needed for a string.
Copyright (C) 2000-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, 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. */
#include <stddef.h>
/* Optional flags to influence mbswidth/mbsnwidth behavior. */
/* If this bit is set, return -1 upon finding an invalid or incomplete
character. Otherwise, assume invalid characters have width 1. */
#define MBSW_REJECT_INVALID 1
/* If this bit is set, return -1 upon finding a non-printable character.
Otherwise, assume unprintable characters have width 0 if they are
control characters and 1 otherwise. */
#define MBSW_REJECT_UNPRINTABLE 2
/* Returns the number of screen columns needed for STRING. */
#define mbswidth gnu_mbswidth /* avoid clash with UnixWare 7.1.1 function */
extern int mbswidth (const char *string, int flags);
/* Returns the number of screen columns needed for the NBYTES bytes
starting at BUF. */
extern int mbsnwidth (const char *buf, size_t nbytes, int flags);
+11 -10
View File
@@ -6,19 +6,20 @@
adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
and implemented by Roland McGrath (roland@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.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU 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. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
-42
View File
@@ -1,42 +0,0 @@
/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
This file is derived from the one in the GNU C Library.
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. */
#include <config.h>
/* Disable the definition of mkstemp to rpl_mkstemp (from config.h) in this
file. Otherwise, we'd get conflicting prototypes for rpl_mkstemp on
most systems. */
#undef mkstemp
#include <stdio.h>
#include <stdlib.h>
#ifndef __GT_FILE
# define __GT_FILE 0
#endif
int __gen_tempname ();
/* Generate a unique temporary file name from TEMPLATE.
The last six characters of TEMPLATE must be "XXXXXX";
they are replaced with a string that makes the filename unique.
Then open the file and return a fd. */
int
rpl_mkstemp (char *template)
{
return __gen_tempname (template, __GT_FILE);
}
+19 -28
View File
@@ -1,11 +1,5 @@
/* obstack.c - subroutines used implicitly by object stack macros
Copyright (C) 1988-1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
Copyright (C) 1988-1994, 1996-1999, 2000-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, or (at your option)
@@ -16,8 +10,8 @@
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,
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
@@ -55,7 +49,7 @@
#ifndef ELIDE_CODE
# ifdef __STDC__
# if defined __STDC__ && __STDC__
# define POINTER void *
# else
# define POINTER char *
@@ -86,7 +80,7 @@ union fooround {long x; double d;};
abort gracefully or use longjump - but shouldn't return. This
variable by default points to the internal function
`print_and_abort'. */
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
static void print_and_abort (void);
void (*obstack_alloc_failed_handler) (void) = print_and_abort;
# else
@@ -114,7 +108,7 @@ struct obstack *_obstack;
For free, do not use ?:, since some compilers, like the MIPS compilers,
do not allow (expr) ? void : void. */
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
# define CALL_CHUNKFUN(h, size) \
(((h) -> use_extra_arg) \
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
@@ -156,7 +150,7 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
struct obstack *h;
int size;
int alignment;
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
POINTER (*chunkfun) (long);
void (*freefun) (void *);
# else
@@ -185,7 +179,7 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
size = 4096 - extra;
}
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
# else
@@ -214,7 +208,7 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
struct obstack *h;
int size;
int alignment;
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
POINTER (*chunkfun) (POINTER, long);
void (*freefun) (POINTER, POINTER);
# else
@@ -244,7 +238,7 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
size = 4096 - extra;
}
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
# else
@@ -345,7 +339,7 @@ _obstack_newchunk (h, length)
This is here for debugging.
If you use it in a program, you are probably losing. */
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
/* Suppress -Wmissing-prototypes warning. We don't want to declare this in
obstack.h because it is just for debugging. */
int _obstack_allocated_p (struct obstack *h, POINTER obj);
@@ -460,16 +454,13 @@ _obstack_memory_used (h)
}
/* Define the error handler. */
# ifndef _
# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
# include <libintl.h>
# ifndef _
# define _(Str) gettext (Str)
# endif
# else
# define _(Str) (Str)
# endif
# ifdef _LIBC
# include <libintl.h>
# else
# include "gettext.h"
# endif
# define _(msgid) gettext (msgid)
# if defined _LIBC && defined USE_IN_LIBIO
# include <libio/iolibio.h>
# define fputs(s, f) _IO_fputs (s, f)
@@ -507,7 +498,7 @@ print_and_abort ()
/* Now define the functional versions of the obstack macros.
Define them to simply use the corresponding macros to do the job. */
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
/* These function definitions do not work with non-ANSI preprocessors;
they won't pass through the macro names in parentheses. */
@@ -618,7 +609,7 @@ POINTER (obstack_copy0) (obstack, address, length)
return obstack_copy0 (obstack, address, length);
}
# endif /* PROTOTYPES || (defined __STDC__ && __STDC__) */
# endif /* __STDC__ */
# endif /* 0 */
+19 -24
View File
@@ -1,7 +1,5 @@
/* obstack.h - object stack macros
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
1998, 1999, 2002 Free Software Foundation, Inc.
Copyright (C) 1988,89,90,91,92,93,94,96,97,98,99 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
@@ -9,19 +7,20 @@
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 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.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU 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. */
You should have received a copy of the GNU Library 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. */
/* Summary:
@@ -124,11 +123,7 @@ extern "C" {
#endif
#ifndef __INT_TO_PTR
# ifdef __STDC__
# define __INT_TO_PTR(P) ((void *) ((P) + (char *) 0))
# else
# define __INT_TO_PTR(P) ((P) + (char *) 0)
# endif
# define __INT_TO_PTR(P) ((P) + (char *) 0)
#endif
/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is
@@ -175,7 +170,7 @@ struct obstack /* control current object in current chunk */
char *chunk_limit; /* address of char after current chunk */
PTR_INT_TYPE temp; /* Temporary for some macros. */
int alignment_mask; /* Mask of alignment for each object. */
#if PROTOTYPES || (defined __STDC__ && __STDC__)
#if defined __STDC__ && __STDC__
/* These prototypes vary based on `use_extra_arg', and we use
casts to the prototypeless function type in all assignments,
but having prototypes here quiets -Wstrict-prototypes. */
@@ -199,7 +194,7 @@ struct obstack /* control current object in current chunk */
/* Declare the external functions we use; they are in obstack.c. */
#if PROTOTYPES || (defined __STDC__ && __STDC__)
#if defined __STDC__ && __STDC__
extern void _obstack_newchunk (struct obstack *, int);
extern void _obstack_free (struct obstack *, void *);
extern int _obstack_begin (struct obstack *, int, int,
@@ -216,7 +211,7 @@ extern int _obstack_begin_1 ();
extern int _obstack_memory_used ();
#endif
#if PROTOTYPES || (defined __STDC__ && __STDC__)
#if defined __STDC__ && __STDC__
/* Do the function-declarations after the structs
but before defining the macros. */
@@ -256,7 +251,7 @@ int obstack_alignment_mask (struct obstack *obstack);
int obstack_chunk_size (struct obstack *obstack);
int obstack_memory_used (struct obstack *obstack);
#endif /* PROTOTYPES || (defined __STDC__ && __STDC__) */
#endif /* __STDC__ */
/* Non-ANSI C cannot really support alternative functions for these macros,
so we do not declare them. */
@@ -265,7 +260,7 @@ int obstack_memory_used (struct obstack *obstack);
more memory. This can be set to a user defined function which
should either abort gracefully or use longjump - but shouldn't
return. The default action is to print a message and abort. */
#if PROTOTYPES || (defined __STDC__ && __STDC__)
#if defined __STDC__ && __STDC__
extern void (*obstack_alloc_failed_handler) (void);
#else
extern void (*obstack_alloc_failed_handler) ();
@@ -294,7 +289,7 @@ extern int obstack_exit_failure;
/* To prevent prototype warnings provide complete argument list in
standard C version. */
#if PROTOYPES || (defined __STDC__ && __STDC__)
#if defined __STDC__ && __STDC__
# define obstack_init(h) \
_obstack_begin ((h), 0, 0, \
@@ -589,7 +584,7 @@ __extension__ \
(h)->object_base = (h)->next_free, \
__INT_TO_PTR ((h)->temp))
# if PROTOTYPES || (defined __STDC__ && __STDC__)
# if defined __STDC__ && __STDC__
# define obstack_free(h,obj) \
( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \
(((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
+33 -65
View File
@@ -21,52 +21,19 @@
# include <config.h>
#endif
#if HAVE_STDDEF_H
# include <stddef.h> /* For the definition of size_t on windows w/MSVC. */
#endif
#include <sys/types.h>
#include "quotearg.h"
#include "xalloc.h"
#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#if ENABLE_NLS
# include <libintl.h>
# define _(text) gettext (text)
#else
# define _(text) text
#endif
#define N_(text) text
#if HAVE_LIMITS_H
# include <limits.h>
#endif
#ifndef CHAR_BIT
# define CHAR_BIT 8
#endif
#ifndef SIZE_MAX
# define SIZE_MAX ((size_t) -1)
#endif
#ifndef UCHAR_MAX
# define UCHAR_MAX ((unsigned char) -1)
#endif
#ifndef UINT_MAX
# define UINT_MAX ((unsigned int) -1)
#endif
#if HAVE_C_BACKSLASH_A
# define ALERT_CHAR '\a'
#else
# define ALERT_CHAR '\7'
#endif
#if HAVE_STDLIB_H
# include <stdlib.h>
#endif
#if HAVE_STRING_H
# include <string.h>
#endif
#include "gettext.h"
#define _(msgid) gettext (msgid)
#define N_(msgid) msgid
#if HAVE_WCHAR_H
@@ -84,7 +51,7 @@
# undef MB_CUR_MAX
# define MB_CUR_MAX 1
# define mbrtowc(pwc, s, n, ps) ((*(pwc) = *(s)) != 0)
# define iswprint(wc) ISPRINT ((unsigned char) (wc))
# define iswprint(wc) isprint ((unsigned char) (wc))
# undef HAVE_MBSINIT
#endif
@@ -101,17 +68,11 @@
# endif
#endif
#define INT_BITS (sizeof (int) * CHAR_BIT)
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
# define IN_CTYPE_DOMAIN(c) 1
#else
# define IN_CTYPE_DOMAIN(c) isascii(c)
#ifndef SIZE_MAX
# define SIZE_MAX ((size_t) -1)
#endif
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
#undef ISPRINT
#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
#define INT_BITS (sizeof (int) * CHAR_BIT)
struct quoting_options
{
@@ -157,9 +118,10 @@ static struct quoting_options default_quoting_options;
struct quoting_options *
clone_quoting_options (struct quoting_options *o)
{
struct quoting_options *p
= (struct quoting_options *) xmalloc (sizeof (struct quoting_options));
int e = errno;
struct quoting_options *p = xmalloc (sizeof *p);
*p = *(o ? o : &default_quoting_options);
errno = e;
return p;
}
@@ -291,7 +253,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
break;
}
for (i = 0; ! (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize); i++)
for (i = 0; ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize); i++)
{
unsigned char c;
unsigned char esc;
@@ -330,8 +292,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
case '<': case '=': case '>':
/* Escape the second '?' in what would otherwise be
a trigraph. */
i += 2;
c = arg[i + 2];
i += 2;
STORE ('?');
STORE ('\\');
STORE ('?');
@@ -344,7 +306,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
}
break;
case ALERT_CHAR: esc = 'a'; goto c_escape;
case '\a': esc = 'a'; goto c_escape;
case '\b': esc = 'b'; goto c_escape;
case '\f': esc = 'f'; goto c_escape;
case '\n': esc = 'n'; goto c_and_shell_escape;
@@ -432,7 +394,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
if (unibyte_locale)
{
m = 1;
printable = ISPRINT (c);
printable = isprint (c);
}
else
{
@@ -441,7 +403,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
m = 0;
printable = 1;
if (argsize == (size_t) -1)
if (argsize == SIZE_MAX)
argsize = strlen (arg);
do
@@ -537,8 +499,11 @@ quotearg_buffer (char *buffer, size_t buffersize,
struct quoting_options const *o)
{
struct quoting_options const *p = o ? o : &default_quoting_options;
return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
p->style, p);
int e = errno;
size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
p->style, p);
errno = e;
return r;
}
/* Use storage slot N to return a quoted version of argument ARG.
@@ -552,6 +517,8 @@ static char *
quotearg_n_options (int n, char const *arg, size_t argsize,
struct quoting_options const *options)
{
int e = errno;
/* Preallocate a slot 0 buffer, so that the caller can always quote
one small component of a "memory exhausted" message in slot 0. */
static char slot0[256];
@@ -579,10 +546,10 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
if (slotvec == &slotvec0)
{
slotvec = (struct slotvec *) xmalloc (sizeof *slotvec);
slotvec = xmalloc (sizeof *slotvec);
*slotvec = slotvec0;
}
slotvec = (struct slotvec *) xrealloc (slotvec, s);
slotvec = xrealloc (slotvec, s);
memset (slotvec + nslots, 0, (n1 - nslots) * sizeof *slotvec);
nslots = n1;
}
@@ -599,6 +566,7 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
quotearg_buffer (val, size, arg, argsize, options);
}
errno = e;
return val;
}
}
@@ -606,7 +574,7 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
char *
quotearg_n (int n, char const *arg)
{
return quotearg_n_options (n, arg, (size_t) -1, &default_quoting_options);
return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options);
}
char *
@@ -629,7 +597,7 @@ char *
quotearg_n_style (int n, enum quoting_style s, char const *arg)
{
struct quoting_options const o = quoting_options_from_style (s);
return quotearg_n_options (n, arg, (size_t) -1, &o);
return quotearg_n_options (n, arg, SIZE_MAX, &o);
}
char *
@@ -652,7 +620,7 @@ quotearg_char (char const *arg, char ch)
struct quoting_options options;
options = default_quoting_options;
set_char_quoting (&options, ch, 1);
return quotearg_n_options (0, arg, (size_t) -1, &options);
return quotearg_n_options (0, arg, SIZE_MAX, &options);
}
char *
+17 -25
View File
@@ -22,6 +22,8 @@
#ifndef QUOTEARG_H_
# define QUOTEARG_H_ 1
# include <stddef.h>
/* Basic quoting styles. */
enum quoting_style
{
@@ -45,37 +47,27 @@ extern enum quoting_style const quoting_style_vals[];
struct quoting_options;
# ifndef PARAMS
# if defined PROTOTYPES || defined __STDC__
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
/* The functions listed below set and use a hidden variable
that contains the default quoting style options. */
/* Allocate a new set of quoting options, with contents initially identical
to O if O is not null, or to the default if O is null.
It is the caller's responsibility to free the result. */
struct quoting_options *clone_quoting_options
PARAMS ((struct quoting_options *o));
struct quoting_options *clone_quoting_options (struct quoting_options *o);
/* Get the value of O's quoting style. If O is null, use the default. */
enum quoting_style get_quoting_style PARAMS ((struct quoting_options *o));
enum quoting_style get_quoting_style (struct quoting_options *o);
/* In O (or in the default if O is null),
set the value of the quoting style to S. */
void set_quoting_style PARAMS ((struct quoting_options *o,
enum quoting_style s));
void set_quoting_style (struct quoting_options *o, enum quoting_style s);
/* In O (or in the default if O is null),
set the value of the quoting options for character C to I.
Return the old value. Currently, the only values defined for I are
0 (the default) and 1 (which means to quote the character even if
it would not otherwise be quoted). */
int set_char_quoting PARAMS ((struct quoting_options *o, char c, int i));
int set_char_quoting (struct quoting_options *o, char c, int i);
/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
argument ARG (of size ARGSIZE), using O to control quoting.
@@ -85,38 +77,38 @@ int set_char_quoting PARAMS ((struct quoting_options *o, char c, int i));
If BUFFERSIZE is too small to store the output string, return the
value that would have been returned had BUFFERSIZE been large enough.
If ARGSIZE is -1, use the string length of the argument for ARGSIZE. */
size_t quotearg_buffer PARAMS ((char *buffer, size_t buffersize,
char const *arg, size_t argsize,
struct quoting_options const *o));
size_t quotearg_buffer (char *buffer, size_t buffersize,
char const *arg, size_t argsize,
struct quoting_options const *o);
/* Use storage slot N to return a quoted version of the string ARG.
Use the default quoting options.
The returned value points to static storage that can be
reused by the next call to this function with the same value of N.
N must be nonnegative. */
char *quotearg_n PARAMS ((int n, char const *arg));
char *quotearg_n (int n, char const *arg);
/* Equivalent to quotearg_n (0, ARG). */
char *quotearg PARAMS ((char const *arg));
char *quotearg (char const *arg);
/* Use style S and storage slot N to return a quoted version of the string ARG.
This is like quotearg_n (N, ARG), except that it uses S with no other
options to specify the quoting method. */
char *quotearg_n_style PARAMS ((int n, enum quoting_style s, char const *arg));
char *quotearg_n_style (int n, enum quoting_style s, char const *arg);
/* Use style S and storage slot N to return a quoted version of the
argument ARG of size ARGSIZE. This is like quotearg_n_style
(N, S, ARG), except it can quote null bytes. */
char *quotearg_n_style_mem PARAMS ((int n, enum quoting_style s,
char const *arg, size_t argsize));
char *quotearg_n_style_mem (int n, enum quoting_style s,
char const *arg, size_t argsize);
/* Equivalent to quotearg_n_style (0, S, ARG). */
char *quotearg_style PARAMS ((enum quoting_style s, char const *arg));
char *quotearg_style (enum quoting_style s, char const *arg);
/* Like quotearg (ARG), except also quote any instances of CH. */
char *quotearg_char PARAMS ((char const *arg, char ch));
char *quotearg_char (char const *arg, char ch);
/* Equivalent to quotearg_char (ARG, ':'). */
char *quotearg_colon PARAMS ((char const *arg));
char *quotearg_colon (char const *arg);
#endif /* !QUOTEARG_H_ */
-96
View File
@@ -1,96 +0,0 @@
/* Open a pipe to read from a program without intermediary sh.
Copyright (C) 1992, 1997 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by David MacKenzie. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdio.h>
#if __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
/* Open a pipe to read from a program without intermediary sh. Checks
PATH. Sample use:
stream = readpipe ("progname", "arg1", "arg2", (char *) 0);
Return 0 on error. */
#if __STDC__
FILE *
readpipe (char *progname, ...)
#else
FILE *
readpipe (va_alist)
#endif
{
#if ! __STDC__
char *progname;
#endif
int fds[2];
va_list ap;
char *args[100];
int argno = 0;
/* Copy arguments into `args'. */
#if __STDC__
va_start (ap, progname);
#else
va_start (ap);
progname = va_arg (ap, char *);
#endif
args[argno++] = progname;
while ((args[argno++] = va_arg (ap, char *)) != NULL)
;
va_end (ap);
if (pipe (fds) == -1)
return 0;
switch (fork ())
{
case 0: /* Child. Write to pipe. */
close (fds[0]); /* Not needed. */
if (fds[1] != 1) /* Redirect 1 (stdout) only if needed. */
{
close (1); /* We don't want the old stdout. */
if (dup (fds[1]) == 0)/* Maybe stdin was closed. */
{
dup (fds[1]); /* Guaranteed to dup to 1 (stdout). */
close (0);
}
close (fds[1]); /* No longer needed. */
}
execvp (args[0], args);
_exit (2); /* 2 for `cmp'. */
case -1: /* Error. */
return 0;
default: /* Parent. Read from pipe. */
close (fds[1]); /* Not needed. */
return fdopen (fds[0], "r");
}
}
+11 -10
View File
@@ -2,19 +2,20 @@
Copyright (C) 1996, 1997, 1998, 2000-2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software; you can redistribute it and/or modify
it 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.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU 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. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
+22
View File
@@ -0,0 +1,22 @@
/* Copyright (C) 1991, 1999, 2001 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
This program is free software; you can redistribute it and/or modify it
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. */
#define UNSIGNED 1
#include "strtol.c"
+196
View File
@@ -0,0 +1,196 @@
/* Subprocesses with pipes.
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, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by Paul Eggert <[email protected]>
and Florian Krohm <florian@edamail.fishkill.ibm.com>. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#include <errno.h>
#ifndef errno
extern int errno;
#endif
#include <signal.h>
#if ! defined SIGCHLD && defined SIGCLD
# define SIGCHLD SIGCLD
#endif
#if HAVE_STDLIB_H
# include <stdlib.h>
#endif
/* The following test is to work around the gross typo in
systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
is defined to 0, not 1. */
#if ! EXIT_FAILURE
# undef EXIT_FAILURE
# define EXIT_FAILURE 1
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifndef STDIN_FILENO
# define STDIN_FILENO 0
#endif
#ifndef STDOUT_FILENO
# define STDOUT_FILENO 1
#endif
#if ! HAVE_DUP2 && ! defined dup2
# if HAVE_FCNTL_H
# include <fcntl.h>
# endif
# define dup2(f, t) (close (t), fcntl (f, F_DUPFD, t))
#endif
#if HAVE_SYS_WAIT_H
# include <sys/wait.h>
#endif
#ifndef WEXITSTATUS
# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
#endif
#ifndef WIFEXITED
# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
#endif
#if HAVE_VFORK_H
# include <vfork.h>
#endif
#if ! HAVE_WORKING_VFORK
# define vfork fork
#endif
#include "error.h"
#include "gettext.h"
#define _(Msgid) gettext (Msgid)
#include "subpipe.h"
/* Initialize this module. */
void
init_subpipe (void)
{
#ifdef SIGCHLD
/* System V fork+wait does not work if SIGCHLD is ignored. */
signal (SIGCHLD, SIG_DFL);
#endif
}
/* Create a subprocess that is run as a filter. ARGV is the
NULL-terminated argument vector for the subprocess. Store read and
write file descriptors for communication with the subprocess into
FD[0] and FD[1]: input meant for the process can be written into
FD[0], and output from the process can be read from FD[1]. Return
the subprocess id.
To avoid deadlock, the invoker must not let incoming data pile up
in FD[1] while writing data to FD[0]. */
pid_t
create_subpipe (char const * const *argv, int fd[2])
{
int pipe_fd[2];
int from_in_fd;
int from_out_fd;
int to_in_fd;
int to_out_fd;
pid_t pid;
if (pipe (pipe_fd) != 0)
error (EXIT_FAILURE, errno, "pipe");
to_in_fd = pipe_fd[0];
to_out_fd = pipe_fd[1];
if (pipe (pipe_fd) != 0)
error (EXIT_FAILURE, errno, "pipe");
from_in_fd = pipe_fd[0];
from_out_fd = pipe_fd[1];
pid = vfork ();
if (pid < 0)
error (EXIT_FAILURE, errno, "fork");
if (! pid)
{
/* Child. */
close (to_out_fd);
close (from_in_fd);
if (to_in_fd != STDIN_FILENO)
{
dup2 (to_in_fd, STDIN_FILENO);
close (to_in_fd);
}
if (from_out_fd != STDOUT_FILENO)
{
dup2 (from_out_fd, STDOUT_FILENO);
close (from_out_fd);
}
/* The cast to (char **) rather than (char * const *) is needed
for portability to older hosts with a nonstandard prototype
for execvp. */
execvp (argv[0], (char **) argv);
_exit (errno == ENOENT ? 127 : 126);
}
/* Parent. */
close (to_in_fd);
close (from_out_fd);
fd[0] = to_out_fd;
fd[1] = from_in_fd;
return pid;
}
/* Wait for the subprocess to exit. */
void
reap_subpipe (pid_t pid, char const *program)
{
#if HAVE_WAITPID || defined waitpid
int wstatus;
if (waitpid (pid, &wstatus, 0) < 0)
error (EXIT_FAILURE, errno, "waitpid");
else
{
int status = WIFEXITED (wstatus) ? WEXITSTATUS (wstatus) : -1;
if (status)
error (EXIT_FAILURE, 0,
_(status == 126
? "subsidiary program `%s' could not be invoked"
: status == 127
? "subsidiary program `%s' not found"
: status < 0
? "subsidiary program `%s' failed"
: "subsidiary program `%s' failed (exit status %d)"),
program, status);
}
#endif
}
+26
View File
@@ -0,0 +1,26 @@
/* Subprocesses with pipes.
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, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
/* Written by Paul Eggert <[email protected]>
and Florian Krohm <florian@edamail.fishkill.ibm.com>. */
void init_subpipe (void);
pid_t create_subpipe (char const * const *, int[2]);
void reap_subpipe (pid_t, char const *);
-342
View File
@@ -1,342 +0,0 @@
/* Copyright (C) 1991-1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <sys/types.h>
#include <assert.h>
#include <errno.h>
#ifndef __set_errno
# define __set_errno(Val) errno = (Val)
#endif
#include <stdio.h>
#ifndef P_tmpdir
# define P_tmpdir "/tmp"
#endif
#ifndef TMP_MAX
# define TMP_MAX 238328
#endif
#ifndef __GT_FILE
# define __GT_FILE 0
# define __GT_BIGFILE 1
# define __GT_DIR 2
# define __GT_NOCREATE 3
#endif
#if STDC_HEADERS || _LIBC
# include <stddef.h>
# include <string.h>
#endif
#include <stdlib.h>
#if HAVE_FCNTL_H || _LIBC
# include <fcntl.h>
#endif
#if HAVE_SYS_TIME_H || _LIBC
# include <sys/time.h>
#endif
#if HAVE_STDINT_H || _LIBC
# include <stdint.h>
#endif
#if HAVE_UNISTD_H || _LIBC
# include <unistd.h>
#endif
#include <sys/stat.h>
#if STAT_MACROS_BROKEN
# undef S_ISDIR
#endif
#if !defined S_ISDIR && defined S_IFDIR
# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
#endif
#if !S_IRUSR && S_IREAD
# define S_IRUSR S_IREAD
#endif
#if !S_IRUSR
# define S_IRUSR 00400
#endif
#if !S_IWUSR && S_IWRITE
# define S_IWUSR S_IWRITE
#endif
#if !S_IWUSR
# define S_IWUSR 00200
#endif
#if !S_IXUSR && S_IEXEC
# define S_IXUSR S_IEXEC
#endif
#if !S_IXUSR
# define S_IXUSR 00100
#endif
#if _LIBC
# define struct_stat64 struct stat64
#else
# define struct_stat64 struct stat
# define __getpid getpid
# define __gettimeofday gettimeofday
# define __mkdir mkdir
# define __open open
# define __open64 open
# define __lxstat64(version, path, buf) lstat (path, buf)
# define __xstat64(version, path, buf) stat (path, buf)
#endif
#if ! (HAVE___SECURE_GETENV || _LIBC)
# define __secure_getenv getenv
#endif
#ifdef _LIBC
# include <hp-timing.h>
# if HP_TIMING_AVAIL
# define RANDOM_BITS(Var) \
if (__builtin_expect (value == UINT64_C (0), 0)) \
{ \
/* If this is the first time this function is used initialize \
the variable we accumulate the value in to some somewhat \
random value. If we'd not do this programs at startup time \
might have a reduced set of possible names, at least on slow \
machines. */ \
struct timeval tv; \
__gettimeofday (&tv, NULL); \
value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \
} \
HP_TIMING_NOW (Var)
# endif
#endif
/* Use the widest available unsigned type if uint64_t is not
available. The algorithm below extracts a number less than 62**6
(approximately 2**35.725) from uint64_t, so ancient hosts where
uintmax_t is only 32 bits lose about 3.725 bits of randomness,
which is better than not having mkstemp at all. */
#if !defined UINT64_MAX && !defined uint64_t
# define uint64_t uintmax_t
#endif
/* Return nonzero if DIR is an existent directory. */
static int
direxists (const char *dir)
{
struct_stat64 buf;
return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode);
}
/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is
non-null and exists, uses it; otherwise uses the first of $TMPDIR,
P_tmpdir, /tmp that exists. Copies into TMPL a template suitable
for use with mk[s]temp. Will fail (-1) if DIR is non-null and
doesn't exist, none of the searched dirs exists, or there's not
enough space in TMPL. */
int
__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
int try_tmpdir)
{
const char *d;
size_t dlen, plen;
if (!pfx || !pfx[0])
{
pfx = "file";
plen = 4;
}
else
{
plen = strlen (pfx);
if (plen > 5)
plen = 5;
}
if (try_tmpdir)
{
d = __secure_getenv ("TMPDIR");
if (d != NULL && direxists (d))
dir = d;
else if (dir != NULL && direxists (dir))
/* nothing */ ;
else
dir = NULL;
}
if (dir == NULL)
{
if (direxists (P_tmpdir))
dir = P_tmpdir;
else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))
dir = "/tmp";
else
{
__set_errno (ENOENT);
return -1;
}
}
dlen = strlen (dir);
while (dlen > 1 && dir[dlen - 1] == '/')
dlen--; /* remove trailing slashes */
/* check we have room for "${dir}/${pfx}XXXXXX\0" */
if (tmpl_len < dlen + 1 + plen + 6 + 1)
{
__set_errno (EINVAL);
return -1;
}
sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx);
return 0;
}
/* These are the characters used in temporary filenames. */
static const char letters[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
/* Generate a temporary file name based on TMPL. TMPL must match the
rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed
does not exist at the time of the call to __gen_tempname. TMPL is
overwritten with the result.
KIND may be one of:
__GT_NOCREATE: simply verify that the name does not exist
at the time of the call.
__GT_FILE: create the file using open(O_CREAT|O_EXCL)
and return a read-write fd. The file is mode 0600.
__GT_BIGFILE: same as __GT_FILE but use open64().
__GT_DIR: create a directory, which will be mode 0700.
We use a clever algorithm to get hard-to-predict names. */
int
__gen_tempname (char *tmpl, int kind)
{
int len;
char *XXXXXX;
static uint64_t value;
uint64_t random_time_bits;
unsigned int count;
int fd = -1;
int save_errno = errno;
struct_stat64 st;
/* A lower bound on the number of temporary files to attempt to
generate. The maximum total number of temporary file names that
can exist for a given template is 62**6. It should never be
necessary to try all these combinations. Instead if a reasonable
number of names is tried (we define reasonable as 62**3) fail to
give the system administrator the chance to remove the problems. */
unsigned int attempts_min = 62 * 62 * 62;
/* The number of times to attempt to generate a temporary file. To
conform to POSIX, this must be no smaller than TMP_MAX. */
unsigned int attempts = attempts_min < TMP_MAX ? TMP_MAX : attempts_min;
len = strlen (tmpl);
if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
{
__set_errno (EINVAL);
return -1;
}
/* This is where the Xs start. */
XXXXXX = &tmpl[len - 6];
/* Get some more or less random data. */
#ifdef RANDOM_BITS
RANDOM_BITS (random_time_bits);
#else
# if HAVE_GETTIMEOFDAY || _LIBC
{
struct timeval tv;
__gettimeofday (&tv, NULL);
random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;
}
# else
random_time_bits = time (NULL);
# endif
#endif
value += random_time_bits ^ __getpid ();
for (count = 0; count < attempts; value += 7777, ++count)
{
uint64_t v = value;
/* Fill in the random bits. */
XXXXXX[0] = letters[v % 62];
v /= 62;
XXXXXX[1] = letters[v % 62];
v /= 62;
XXXXXX[2] = letters[v % 62];
v /= 62;
XXXXXX[3] = letters[v % 62];
v /= 62;
XXXXXX[4] = letters[v % 62];
v /= 62;
XXXXXX[5] = letters[v % 62];
switch (kind)
{
case __GT_FILE:
fd = __open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
break;
case __GT_BIGFILE:
fd = __open64 (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
break;
case __GT_DIR:
fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
break;
case __GT_NOCREATE:
/* This case is backward from the other three. __gen_tempname
succeeds if __xstat fails because the name does not exist.
Note the continue to bypass the common logic at the bottom
of the loop. */
if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
{
if (errno == ENOENT)
{
__set_errno (save_errno);
return 0;
}
else
/* Give up now. */
return -1;
}
continue;
default:
assert (! "invalid KIND in __gen_tempname");
}
if (fd >= 0)
{
__set_errno (save_errno);
return fd;
}
else if (errno != EEXIST)
return -1;
}
/* We got out of the loop because we ran out of combinations to try. */
__set_errno (EEXIST);
return -1;
}
+38 -28
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,10 +28,15 @@ 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"
int time_report = 0;
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# endif
int timevar_report = 0;
#endif
@@ -114,12 +118,12 @@ extern clock_t clock PARAMS ((void));
_constants_ variable at run time, anyway? */
#ifdef USE_TIMES
static float ticks_to_msec;
#define TICKS_TO_MSEC (1 / (float)TICKS_PER_SECOND)
#define TICKS_TO_MSEC (1.0 / TICKS_PER_SECOND)
#endif
#ifdef USE_CLOCK
static float clocks_to_msec;
#define CLOCKS_TO_MSEC (1 / (float)CLOCKS_PER_SEC)
#define CLOCKS_TO_MSEC (1.0 / CLOCKS_PER_SEC)
#endif
#if IN_GCC
@@ -129,8 +133,8 @@ 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. */
#define TIMEVAR_ENABLE (time_report)
/* This macro evaluates to nonzero if timing variables are enabled. */
#define TIMEVAR_ENABLE (timevar_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;
@@ -226,17 +236,17 @@ get_time (now)
}
}
/* Add the difference between STOP_TIME and START_TIME to TIMER. */
/* Add the difference between STOP and START to TIMER. */
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;
timevar_accumulate (timer, start, stop)
struct timevar_time_def *timer;
struct timevar_time_def *start;
struct timevar_time_def *stop;
{
timer->user += stop_time->user - start_time->user;
timer->sys += stop_time->sys - start_time->sys;
timer->wall += stop_time->wall - start_time->wall;
timer->user += stop->user - start->user;
timer->sys += stop->sys - start->sys;
timer->wall += stop->wall - start->wall;
}
/* Initialize timing variables. */
@@ -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. */
+10 -8
View File
@@ -1,21 +1,21 @@
/* 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
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"
@@ -88,4 +88,6 @@ extern void timevar_print PARAMS ((FILE *));
extern long get_run_time PARAMS ((void));
extern void print_time PARAMS ((const char *, long));
extern int timevar_report;
#endif /* ! GCC_TIMEVAR_H */
+21
View File
@@ -1,3 +1,24 @@
/* Prefer faster, non-thread-safe stdio functions if available.
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
/* Written by Jim Meyering. */
#ifndef UNLOCKED_IO_H
# define UNLOCKED_IO_H 1
+7 -10
View File
@@ -30,14 +30,9 @@ void *realloc ();
void free ();
#endif
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define textdomain(Domain)
# define _(Text) Text
#endif
#define N_(Text) Text
#include "gettext.h"
#define _(msgid) gettext (msgid)
#define N_(msgid) msgid
#include "error.h"
#include "xalloc.h"
@@ -46,12 +41,14 @@ void free ();
# define EXIT_FAILURE 1
#endif
/* The following tests require AC_PREREQ(2.54). */
#ifndef HAVE_MALLOC
"you must run the autoconf test for a properly working malloc"
"you must run the autoconf test for a GNU libc compatible malloc"
#endif
#ifndef HAVE_REALLOC
"you must run the autoconf test for a properly working realloc"
"you must run the autoconf test for a GNU libc compatible realloc"
#endif
/* Exit value when the requested amount of memory is not available.
+30
View File
@@ -0,0 +1,30 @@
/* Yacc library error-printing function.
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. */
#include <stdio.h>
int yyerror (char const *);
int
yyerror (char const *message)
{
return fprintf (stderr, "%s\n", message);
}
+17
View File
@@ -1,2 +1,19 @@
Makefile
Makefile.in
codeset.m4
gettext.m4
glibc21.m4
iconv.m4
intdiv0.m4
inttypes-pri.m4
inttypes.m4
inttypes_h.m4
isc-posix.m4
lcmessage.m4
lib-ld.m4
lib-link.m4
lib-prefix.m4
progtest.m4
stdint_h.m4
uintmax_t.m4
ulonglong.m4
+2 -2
View File
@@ -1,6 +1,6 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
EXTRA_DIST = \
dmalloc.m4 error.m4 \
m4.m4 mbrtowc.m4 memcmp.m4 mkstemp.m4 \
prereq.m4 strerror_r.m4 timevar.m4 warning.m4 \
m4.m4 mbrtowc.m4 mbswidth.m4 memcmp.m4 \
prereq.m4 stdbool.m4 subpipe.m4 timevar.m4 warning.m4 \
gettext.m4 iconv.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 progtest.m4
+35
View File
@@ -0,0 +1,35 @@
#serial 8
dnl autoconf tests required for use of mbswidth.c
dnl From Bruno Haible.
AC_DEFUN([jm_PREREQ_MBSWIDTH],
[
AC_CHECK_HEADERS(wchar.h wctype.h)
AC_CHECK_FUNCS(isascii iswcntrl iswprint mbsinit wcwidth)
jm_FUNC_MBRTOWC
AC_CACHE_CHECK([whether wcwidth is declared], ac_cv_have_decl_wcwidth,
[AC_TRY_COMPILE([
/* AIX 3.2.5 declares wcwidth in <string.h>. */
#if HAVE_STRING_H
# include <string.h>
#endif
#if HAVE_WCHAR_H
# include <wchar.h>
#endif
], [
#ifndef wcwidth
char *p = (char *) wcwidth;
#endif
], ac_cv_have_decl_wcwidth=yes, ac_cv_have_decl_wcwidth=no)])
if test $ac_cv_have_decl_wcwidth = yes; then
ac_val=1
else
ac_val=0
fi
AC_DEFINE_UNQUOTED(HAVE_DECL_WCWIDTH, $ac_val,
[Define to 1 if you have the declaration of wcwidth(), and to 0 otherwise.])
AC_TYPE_MBSTATE_T
])
-46
View File
@@ -1,46 +0,0 @@
#serial 1
# On some systems (e.g., HPUX-10.20, SunOS4.1.4, solaris2.5.1), mkstemp has the
# silly limit that it can create no more than 26 files from a given template.
# Other systems lack mkstemp altogether. On either type of system, arrange
# to use the replacement function.
AC_DEFUN([UTILS_FUNC_MKSTEMP],
[dnl
AC_REPLACE_FUNCS(mkstemp)
if test $ac_cv_func_mkstemp = no; then
utils_cv_func_mkstemp_limitations=yes
else
AC_CACHE_CHECK([for mkstemp limitations],
utils_cv_func_mkstemp_limitations,
[
AC_TRY_RUN([
# include <stdlib.h>
int main ()
{
int i;
for (i = 0; i < 30; i++)
{
char template[] = "conftestXXXXXX";
int fd = mkstemp (template);
if (fd == -1)
exit (1);
close (fd);
}
exit (0);
}
],
utils_cv_func_mkstemp_limitations=no,
utils_cv_func_mkstemp_limitations=yes,
utils_cv_func_mkstemp_limitations=yes
)
]
)
fi
if test $utils_cv_func_mkstemp_limitations = yes; then
AC_LIBOBJ(mkstemp)
AC_LIBOBJ(tempname)
AC_DEFINE(mkstemp, rpl_mkstemp,
[Define to rpl_mkstemp if the replacement function should be used.])
fi
])
-7
View File
@@ -94,13 +94,6 @@ AC_DEFUN([jm_PREREQ_HARD_LOCALE],
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],
+62
View File
@@ -0,0 +1,62 @@
# Check for stdbool.h that conforms to C99.
# 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, 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.
AC_DEFUN([AC_HEADER_STDBOOL],
[AC_CACHE_CHECK([for stdbool.h that conforms to C99],
[ac_cv_header_stdbool_h],
[AC_TRY_COMPILE(
[
#include <stdbool.h>
#ifndef bool
"error: bool is not defined"
#endif
#ifndef false
"error: false is not defined"
#endif
#if false
"error: false is not 0"
#endif
#ifndef true
"error: false is not defined"
#endif
#if true != 1
"error: true is not 1"
#endif
#ifndef __bool_true_false_are_defined
"error: __bool_true_false_are_defined is not defined"
#endif
struct s { _Bool s: 1; _Bool t; } s;
char a[true == 1 ? 1 : -1];
char b[false == 0 ? 1 : -1];
char c[__bool_true_false_are_defined == 1 ? 1 : -1];
char d[(bool) -0.5 == true ? 1 : -1];
bool e = &s;
char f[(_Bool) -0.0 == false ? 1 : -1];
char g[true];
char h[sizeof (_Bool)];
char i[sizeof s.t];
],
[ return !a + !b + !c + !d + !e + !f + !g + !h + !i; ],
[ac_cv_header_stdbool_h=yes],
[ac_cv_header_stdbool_h=no])])
if test $ac_cv_header_stdbool_h = yes; then
AC_DEFINE(HAVE_STDBOOL_H, 1, [Define to 1 if stdbool.h conforms to C99.])
fi])
-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
+30
View File
@@ -0,0 +1,30 @@
# -*- Autoconf -*-
# Checks required to run `subpipe'.
#
# 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
# Written by Paul Eggert <[email protected]>.
AC_DEFUN([BISON_PREREQ_SUBPIPE],
[
AC_TYPE_PID_T
AC_CHECK_HEADERS([fcntl.h sys/wait.h])
AC_HEADER_SYS_WAIT
AC_CHECK_FUNCS(dup2 waitpid)
AC_FUNC_FORK
])
+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
])
])
+8
View File
@@ -6,3 +6,11 @@ bison.pot
stamp-cat-id
*.gmo
Makefile.in
Rules-quot
boldquot.sed
[email protected]
[email protected]
insert-header.sin
quot.sed
remove-potcdate.sed
remove-potcdate.sin
+2
View File
@@ -1,8 +1,10 @@
da
de
es
et
fr
hr
id
it
ja
nl
+3 -4
View File
@@ -3,14 +3,12 @@ src/conflicts.c
src/files.c
src/getargs.c
src/gram.c
src/lalr.c
src/main.c
src/parse-gram.c
src/parse-gram.y
src/print.c
src/reader.c
src/reduce.c
src/scan-gram.c
src/state.c
src/scan-gram.l
src/symlist.c
src/symtab.c
@@ -20,5 +18,6 @@ lib/error.c
lib/getopt.c
lib/obstack.c
lib/quotearg.c
lib/subpipe.c
lib/timevar.c
lib/xmalloc.c
+724
View File
@@ -0,0 +1,724 @@
# Danish messages for bison.
# Copyright © 2001, 2002 Free Software Foundation, Inc.
# Keld Simonsen <[email protected]>, 2002.
# Byrial Ole Jensen <[email protected]>, 2002.
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.75b\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\n"
"PO-Revision-Date: 2002-11-28 22:16+0100\n"
"Last-Translator: Byrial Ole Jensen <[email protected]>\n"
"Language-Team: Danish <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Ukendt systemfejl"
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "advarsel: "
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "fatal fejl: "
#: src/conflicts.c:75
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr " Konflikt mellem regel %d og element %s løstes som skift"
#: src/conflicts.c:83
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr " Konflikt mellem regel %d og element %s løstes som reducér"
#: src/conflicts.c:90
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr " Konflikt mellem regel %d og element %s løstes som en fejl"
#: src/conflicts.c:398
#, c-format
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d skift/reducér"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d reducér/reducér"
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "tilstand %d"
#: src/conflicts.c:498
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "forventede %d skift/reducér-konflikt"
msgstr[1] "forventede %d skift/reducér-konflikter"
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d reducér/reducér-konflikt"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "kan ikke åbne filen \"%s\""
#: src/files.c:115
msgid "I/O error"
msgstr "Fejl ved ind- eller udlæsning"
#: src/files.c:118
msgid "cannot close file"
msgstr "kan ikke lukke fil"
#: src/files.c:336
#, c-format
msgid "conflicting outputs to file %s"
msgstr ""
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Prøv med \"%s --help\" for mere information.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison genererer fortolkere til LALR(1)-grammatiker.\n"
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Brug: %s [FLAG]... FIL\n"
#: src/getargs.c:196
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 ""
"Hvis et lang flag viser et argument som obligatorisk, er det også\n"
"obligatorisk for det tilsvarende korte flag. Tilsvarende\n"
"for valgfrie argumenter.\n"
#: src/getargs.c:202
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 ""
"Arbejdstilstande:\n"
" -h, --help vis denne hjælpetekst og afslut\n"
" -V, --version vis versionsinformation og afslut\n"
" -y, --yacc emulér POSIX-yacc\n"
#: src/getargs.c:209
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 ""
"Fortolker:\n"
" -S, --skeleton=FIL angiv skeletfilen som skal bruges\n"
" -t, --debug instrumentér fortolkeren for fejlsøgning\n"
" --locations aktivér tilstandsberegning\n"
" -p, --name-prefix=PRÆFIKS tilføj PRÆFIKS for eksterne symboler\n"
" -l, --no-lines generér ikke \"#line\"-direktiver\n"
" -n, --no-parser generér kun tabellerne\n"
" -k, --token-table inkludér en tabel over elementnavne\n"
#: src/getargs.c:221
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 ""
"Uddata:\n"
" -d, --defines lav også en hovedfil\n"
" -r, --report=SAGER lav også detaljer om automaten\n"
" -v, --verbose samme som \"--report=state\"\n"
" -b, --file-prefix=PRÆFIKS angiv et PRÆFIKS for uddatafiler\n"
" -o, --output=FIL læg uddata i FIL\n"
" -g, --graph lav også en VCG-beskrivelse af automaten\n"
#: src/getargs.c:232
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 ""
"TING er en liste med kommaseparerede ord som kan indeholde:\n"
" \"state\" beskriv tilstandene\n"
" \"itemset\" komplettér kerneobjektmængderne med deres afslutninger\n"
" \"lookahead\" kobl udtrykkeligt fremadkig til objekter\n"
" \"solved\" beskriv løsninger af skift/reducér-konflikter\n"
" \"all\" inkludér al ovenstående information\n"
" \"none\" deaktivér rapporten\n"
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr ""
"Rapportér fejl til <[email protected]>.\n"
"Rapportér synpunkter om oversættelsen til <[email protected]>.\n"
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Skrevet af Robert Corbett og Richard Stallman.\n"
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright © %d Free Software Foundation, Inc.\n"
#: src/getargs.c:268
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 ""
"Dette er frit programmel, se kildekoden for kopieringsbetingelser. Der\n"
"gives INGEN garanti, endog ikke for SALGBARHED eller EGNETHED FOR NOGET\n"
"BESTEMT FORMÅL.\n"
#: src/getargs.c:424
#, c-format
msgid "missing operand after `%s'"
msgstr "manglende operand efter \"%s\""
#: src/getargs.c:426
#, c-format
msgid "extra operand `%s'"
msgstr "overtallig operand \"%s\""
#: src/gram.c:142
msgid "empty"
msgstr "tom"
#: src/gram.c:236
msgid "Grammar"
msgstr "Grammatik"
#: src/gram.c:324 src/reduce.c:393
msgid "warning"
msgstr "advarsel"
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr "regel aldrig reduceret på grund af konflikter"
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr "POSIX forbyder deklarationer i grammatikken"
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " type %d er %s\n"
#: src/print.c:164
#, c-format
msgid "shift, and go to state %d\n"
msgstr "skift, og gå til tilstand %d\n"
#: src/print.c:166
#, c-format
msgid "go to state %d\n"
msgstr "gå til tilstand %d\n"
#: src/print.c:203
msgid "error (nonassociative)\n"
msgstr "fejl (ikke-associativ)\n"
#: src/print.c:291
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "reducér med regel %d (%s)"
#: src/print.c:293
msgid "accept"
msgstr "acceptér"
#: src/print.c:324 src/print.c:390
msgid "$default"
msgstr "$default"
#: src/print.c:419
#, c-format
msgid "state %d"
msgstr "tilstand %d"
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Terminaler, med regler hvor de forekommer"
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "Ikke-terminaler, med regler hvor de forekommer"
#: src/print.c:511
msgid " on left:"
msgstr " til venstre:"
#: src/print.c:526
msgid " on right:"
msgstr " til højre:"
#: src/print.c:554
msgid "Rules never reduced"
msgstr "Aldrig reducerede regler"
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "flere %s-deklarationer"
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr "resultattypekonflikt ved sammenfletningsfunktion %s: <%s> != <%s>"
#: src/reader.c:236
#, c-format
msgid "rule given for %s, which is a token"
msgstr "regel givet for %s som er et element"
#: src/reader.c:265
#, c-format
msgid "type clash on default action: <%s> != <%s>"
msgstr "typekonflikt for standardhandling: <%s> != <%s>"
#: src/reader.c:271
msgid "empty rule for typed nonterminal, and no action"
msgstr "tom regel for typet ikke-terminal, og ingen handling"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr "kun en %s tilladt per regel"
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr "%s påvirker kun GLR-fortolkere"
#: src/reader.c:353
#, c-format
msgid "%s must be followed by positive number"
msgstr "%s skal følges af et positivt tal"
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "ingen regler i inddatagrammatikken"
#: src/reduce.c:241
msgid "useless rule"
msgstr "ubrugelig regel"
#: src/reduce.c:302
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "ubrugelig ikke-terminal"
#: src/reduce.c:350
msgid "Useless nonterminals"
msgstr "Ubrugelige ikke-terminaler"
#: src/reduce.c:363
msgid "Terminals which are not used"
msgstr "Terminaler som ikke bruges"
#: src/reduce.c:372
msgid "Useless rules"
msgstr "Ubrugelige regler"
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d regel reduceres aldrig\n"
msgstr[1] "%d regler reduceres aldrig\n"
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d ubrugelig ikke-terminal"
msgstr[1] "%d ubrugelige ikke-terminaler"
#: src/reduce.c:402
msgid " and "
msgstr " og "
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
msgstr[0] "%d ubrugelig regel"
msgstr[1] "%d ubrugelige regler"
#: src/reduce.c:435
#, c-format
msgid "start symbol %s does not derive any sentence"
msgstr "startsymbolet %s genererer ingen sætninger"
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: src/scan-gram.l:216
#, c-format
msgid "invalid directive: %s"
msgstr "ugyldigt direktiv: %s"
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid "integer out of range: %s"
msgstr "heltal uden for gyldigshedsområdet: %s"
#: src/scan-gram.l:281
#, c-format
msgid "invalid character: %s"
msgstr "ugyldigt tegn: %s"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, c-format
msgid "invalid escape sequence: %s"
msgstr "ugyldig undvigesekvens: %s"
#: src/scan-gram.l:439
#, c-format
msgid "unrecognized escape sequence: %s"
msgstr "ukendt undvigesekvens: %s"
#: src/scan-gram.l:524
#, fuzzy, c-format
msgid "missing `{' in `%s'"
msgstr "manglende operand efter \"%s\""
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ for \"%s\" har ingen erklæret type"
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d for \"%s\" har ingen erklæret type"
#: src/scan-gram.l:820 src/scan-gram.l:887
#, c-format
msgid "invalid value: %s"
msgstr "fejlagtig værdi: %s"
#: src/scan-gram.l:978
#, c-format
msgid "missing `%s' at end of file"
msgstr "manglende \"%s\" ved slutningen af filen"
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "fejlagtig $-værdi"
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "gentagen typeerklæring for %s"
#: src/symtab.c:101 src/symtab.c:119
#, c-format
msgid "%s redeclaration for %s"
msgstr "gentagen %s-erklæring for %s"
#: src/symtab.c:138
#, c-format
msgid "redefining precedence of %s"
msgstr "redefinition af præcedens for %s"
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "symbol %s redefineret"
#: src/symtab.c:179
#, c-format
msgid "redefining user token number of %s"
msgstr "redefinition af elementnummer for %s"
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"symbol %s bruges, men er ikke defineret som et element og har ingen regler"
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "symbol \"%s\" bruges mere end en gang som en bogstavelig streng"
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "symbol \"%s\" har fået mere end én bogstavelig streng"
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "modstridige præcedenser mellem %s og %s"
#: src/symtab.c:282
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "modstridige associativiteter for %s (%s) og %s (%s)"
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "elementerne %s og %s har begge fået nummer %d"
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "startsymbolet %s er udefineret"
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "startsymbolet %s er et element"
#: lib/argmatch.c:129
#, c-format
msgid "invalid argument %s for %s"
msgstr "ugyldigt argument %s til %s"
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr "flertydigt argument %s til %s"
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr "Gyldige argumenter er:"
#: lib/bitset_stats.c:178
#, c-format
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitmængdeallokeringer, %u frigjort (%.2f%%).\n"
#: lib/bitset_stats.c:181
#, c-format
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitmængdeindstillinger, %u cachede (%.2f%%)\n"
#: lib/bitset_stats.c:184
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitmængdenulstillinger, %u cachede (%.2f%%)\n"
#: lib/bitset_stats.c:187
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitmængdetest, %u cachede (%.2f%%)\n"
#: lib/bitset_stats.c:191
#, c-format
msgid "%u bitset_lists\n"
msgstr "%u bitmængdelister\n"
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr "kaldsloghistogram\n"
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr "størrelsesloghistogram\n"
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr "densitetshistogram\n"
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Bitmængdestatistik:\n"
"\n"
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %u\n"
msgstr "Akkumulerede kørsler = %u\n"
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr "Kunne ikke læse statistikfil."
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr "Dårlig statistikfilstørrelse.\n"
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr "Kunne ikke skrive statistikfil."
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr "Kunne ikke åbne statistikfil for skrivning."
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: flaget \"%s\" er flertydigt\n"
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: flaget \"--%s\" tager intet argument\n"
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: flaget \"%c%s\" tager intet argument\n"
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: flaget \"%s\" behøver et argument\n"
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: ukendt flag \"--%s\"\n"
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: ukendt flag \"%c%s\"\n"
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: ikke tilladt flag -- %c\n"
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: ugyldigt flag --%c\n"
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: flaget behøver et argument -- %c\n"
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: flaget \"-W %s\" er flertydigt\n"
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: flaget \"-W %s\" tager intet argument\n"
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "hukommelsen opbrugt"
# Når vi går over til Unicode mere allmænt måske vi bør oversættta båda disse
# med U+201D (RIGHT DOUBLE QUOTATION MARK) på svenska. Eller?
#
#: lib/quotearg.c:236
msgid "`"
msgstr "\""
#: lib/quotearg.c:237
msgid "'"
msgstr "\""
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr "hjælpeprogrammet \"%s\" kunne ikke startes"
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr "hjælpeprogrammet \"%s\" ikke fundet"
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr "hjælpeprogrammet \"%s\" fejlede"
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr "hjælpeprogrammet \"%s\" fejlede med afslutningskode %d"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
"\n"
"Udførelsestider (sekunder)\n"
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr " TOTALT :"
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr "tid i %s: %ld.%06ld (%ld%%)\n"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d skift/reducér-konflikt"
#~ msgstr[1] "%d skift/reducér-konflikter"
#~ msgid "and"
#~ msgstr "og"
#~ msgid "conflicts: "
#~ msgstr "konflikter: "
#~ msgid "State %d contains "
#~ msgstr "Tilstand %d indeholder "
+295 -253
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49b\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"PO-Revision-Date: 2002-09-05 16:15:32+0200\n"
"Project-Id-Version: bison 1.75e\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\n"
"PO-Revision-Date: 2002-12-27 12:17:36+0100\n"
"Last-Translator: Michael Piefel <[email protected]>\n"
"Language-Team: German <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -15,99 +15,101 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Unbekannter Systemfehler"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "Warnung: "
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "fataler Fehler: "
#: src/conflicts.c:72
#: src/conflicts.c:75
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr ""
" Konflikt zwischen Regel %d and Token %s wurde durch Schieben gelöst"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr ""
" Konflikt zwischen Regel %d and Token %s wurde durch Reduzierung gelöst"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
" Konflikt zwischen Regel %d and Token %s wurde als Fehler betrachtet"
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d Schiebe/Reduziere-Konflikt"
msgstr[1] "%d Schiebe/Reduziere-Konflikte"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "und"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d Reduziere/Reduziere-Konflikt"
msgstr[1] "%d Reduziere/Reduziere-Konflikte"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "Konflikte: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d Schiebe/Reduziere"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d Reduziere/Reduziere"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "Zustand %d enthält "
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "Zustand %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "erwartete %d Schiebe/Reduziere-Konflikt"
msgstr[1] "erwartete %d Schiebe/Reduziere-Konflikte"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d Reduziere/Reduziere-Konflikt"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "kann Datei »%s« nicht öffnen"
#: src/files.c:133
#: src/files.c:115
msgid "I/O error"
msgstr "E/A-Fehler"
#: src/files.c:118
msgid "cannot close file"
msgstr "kann Datei nicht schließen"
#: src/getargs.c:157
#: src/files.c:336
#, c-format
msgid "conflicting outputs to file %s"
msgstr ""
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "»%s --help« gibt weitere Informationen.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison generiert Parser für LALR(1)-Grammatiken.\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Aufruf: %s [OPTION]... DATEI\n"
#: src/getargs.c:165
#: src/getargs.c:196
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"
@@ -117,7 +119,7 @@ msgstr ""
"für die äquivalente kurze Option erforderlich. Ähnlich für optionale "
"Argumente.\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -129,7 +131,7 @@ msgstr ""
" -v, --version Versionsinformation anzeigen und beenden.\n"
" -y, --yacc POSIX' yacc emulieren\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -151,7 +153,7 @@ msgstr ""
" -k, --token-table einer Tabellen der Token-Namen mit "
"einschließen\n"
#: src/getargs.c:190
#: src/getargs.c:221
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -171,7 +173,7 @@ msgstr ""
" -g, --graph auch eine VCG-Beschreibung des Automaten "
"herstellen\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -189,26 +191,26 @@ msgstr ""
" »all« alle oben genannten Informationen\n"
" »none« den Report abschalten\n"
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr ""
"Berichten Sie Fehler (auf Englisch, mit LC_ALL=C) an <[email protected]>.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Geschrieben von Robert Corbett und Richard Stallman.\n"
#: src/getargs.c:232
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright © %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
#: src/getargs.c:268
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"
@@ -217,67 +219,60 @@ msgstr ""
"gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE "
"ZWECKE.\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "»%s --help« gibt weitere Informationen.\n"
msgid "missing operand after `%s'"
msgstr "fehlender Operand nach »%s«"
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: keine Grammatik-Datei angegeben\n"
msgid "extra operand `%s'"
msgstr "zusätzlicher Operand »%s«"
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: zusätzliche Argumente nach »%s« werden ignoriert\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "leer"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "Grammatik"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
msgid "warning"
msgstr "Warnung"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "zu viele Gotos (max %d)"
#: src/main.c:117
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr "Regel nie reduziert wegen Konflikten"
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr "POSIX verbietet Deklarationen in der Grammatik"
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr "fehlender Bezeichner in Parameterdeklaration"
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " Typ %d ist %s\n"
#: src/print.c:162
#: src/print.c:164
#, c-format
msgid "shift, and go to state %d\n"
msgstr "schiebe und gehe zu Zustand %d über\n"
#: src/print.c:164
#: src/print.c:166
#, c-format
msgid "go to state %d\n"
msgstr "gehe zu Zustand %d über\n"
#
#: src/print.c:201
#: src/print.c:203
msgid "error (nonassociative)\n"
msgstr "Fehler (nicht assoziativ)\n"
#: src/print.c:290
#: src/print.c:291
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "reduziere mit Regel %d (%s)"
@@ -295,127 +290,109 @@ msgstr "$default"
msgid "state %d"
msgstr "Zustand %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Terminale und die Regeln, in denen sie verwendet werden"
#: src/print.c:480
#: src/print.c:482
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:511
msgid " on left:"
msgstr " auf der linken Seite:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " auf der rechten Seite:"
#: src/print.c:552
#: src/print.c:554
msgid "Rules never reduced"
msgstr "niemals reduzierte Regeln"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "mehr als eine %s-Deklaration"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr "Rückgabetyp-Konflikt in merge-Funktion %s: »%s« und »%s«"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr "Rückgabetyp-Konflikt in merge-Funktion %s: <%s> != <%s>"
#: src/reader.c:239
#: src/reader.c:236
#, 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:265
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "Typkonflikt (»%s« »%s«) bei Default-Aktion"
msgid "type clash on default action: <%s> != <%s>"
msgstr "Typkonflikt bei Default-Aktion: <%s> != <%s>) "
#: src/reader.c:272
#: src/reader.c:271
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
msgid "two @prec's in a row"
msgstr "zwei @prec-Anweisungen nacheinander"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr "nur ein %s pro Regel erlaubt"
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr "%s betrifft nur GLR-Parser"
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr "%%dprec betrifft nur GLR-Parser"
msgid "%s must be followed by positive number"
msgstr "%s muss von positiver Zahl gefolgt sein"
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr "%%dprec muss von positiver Zahl gefolgt sein"
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr "nur ein %%dprec pro Regel erlaubt"
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr "%%merge betrifft nur GLR-Parser"
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr "nur ein %%merge pro Regel erlaubt"
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "Eingabegrammatik enthält keine Regeln"
#: src/reader.c:545
#, 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
#: src/reduce.c:241
msgid "useless rule"
msgstr "nutzlose Regel"
#: src/reduce.c:302
msgid "useless nonterminal"
msgstr "nutzloses Nicht-Terminal"
#, c-format
msgid "useless nonterminal: %s"
msgstr "nutzloses Nicht-Terminal: %s"
#: src/reduce.c:349
#: src/reduce.c:350
msgid "Useless nonterminals"
msgstr "Nutzlose Nicht-Terminale"
#: src/reduce.c:362
#: src/reduce.c:363
msgid "Terminals which are not used"
msgstr "Nicht genutzte Terminale"
#: src/reduce.c:371
#: src/reduce.c:372
msgid "Useless rules"
msgstr "Nutzlose Regeln"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d Regel wurde niemals reduziert\n"
msgstr[1] "%d Regeln wurden niemals reduziert\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d nutzloses Nicht-Terminal"
msgstr[1] "%d nutzlose Nicht-Terminale"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr " und "
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -427,76 +404,70 @@ msgstr[1] "%d nutzlose Regeln"
msgid "start symbol %s does not derive any sentence"
msgstr "es lassen sich keine Sätze vom Startsymbol %s ableiten"
#: scan-gram.l:202
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr "überzähliges »,« als Freiraum betrachtet"
#: src/scan-gram.l:216
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ": ungültiges Zeichen: »%c«\n"
msgid "invalid directive: %s"
msgstr "ungültige Direktive: %s"
#: scan-gram.l:246
msgid ": unexpected end of file in a comment\n"
msgstr ": Datei endet unerwartet innerhalb eines Kommentars\n"
#: scan-gram.l:274 scan-gram.l:412
msgid ": unexpected end of file in a string\n"
msgstr ": Datei endet unerwartet innerhalb einer Zeichenkette\n"
#: scan-gram.l:311 scan-gram.l:383
msgid ": unexpected end of file in a character\n"
msgstr ": Datei endet unerwartet innerhalb eines Zeichens\n"
#: scan-gram.l:332
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid ": invalid escape: %s\n"
msgstr ": unzulässiges Fluchtzeichen: %s\n"
msgid "integer out of range: %s"
msgstr "Ganzzahl außerhalb des Wertebereichs: %s"
#: scan-gram.l:353
#: src/scan-gram.l:281
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr ": unbekannt Fluchtzeichen: %s\n"
msgid "invalid character: %s"
msgstr "ungültiges Zeichen: %s"
#: scan-gram.l:473
msgid ": unexpected end of file in a braced code\n"
msgstr ": Datei endet unerwartet innerhalb geklammerten Programmtexts\n"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, c-format
msgid "invalid escape sequence: %s"
msgstr "unzulässiges Fluchtzeichen: %s"
#: scan-gram.l:502
msgid ": unexpected end of file in a prologue\n"
msgstr ": Datei endet unerwartet innerhalb eines Prologs\n"
#: src/scan-gram.l:439
#, c-format
msgid "unrecognized escape sequence: %s"
msgstr "unbekanntes Fluchtzeichen: %s"
#: scan-gram.l:560
#: src/scan-gram.l:524
#, c-format
msgid "missing `{' in `%s'"
msgstr "fehlende »{« in »%s«"
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ von »%s« hat keinen deklarierten Typ"
#: scan-gram.l:577 scan-gram.l:664
#, c-format
msgid "invalid value: %s%d"
msgstr "unzulässiger Wert: %s%d"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d von »%s« hat keinen deklarierten Typ"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#: src/scan-gram.l:820 src/scan-gram.l:887
#, c-format
msgid "%s is invalid"
msgstr "%s ist unzulässig"
msgid "invalid value: %s"
msgstr "unzulässiger Wert: %s"
#: src/state.c:145
#: src/scan-gram.l:978
#, c-format
msgid "too many states (max %d)"
msgstr "zu viele Zustände (max %d)"
msgid "missing `%s' at end of file"
msgstr "fehlendes »%s« am Ende der Datei"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "unzulässiger $-Wert"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "erneute Deklaration des Typs für %s"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, c-format
msgid "%s redeclaration for %s"
msgstr "%s erneute Deklaration für %s"
@@ -506,217 +477,297 @@ msgstr "%s erneute Deklaration für %s"
msgid "redefining precedence of %s"
msgstr "Vorrang von %s wird erneut definiert"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "Symbol %s noch einmal definiert"
#: src/symtab.c:180
#: src/symtab.c:179
#, c-format
msgid "redefining user token number of %s"
msgstr "Nutzertokennummer von %s erneut definiert"
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"Symbol %s wird benutzt, ist aber nicht als Token definiert und hat keine "
"Regel"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "Symbol »%s« wird mehr als einmal als literale Zeichenkette benutzt"
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "Symbol »%s« wird mehr als eine literale Zeichenkette gegeben"
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "Vorrang für %s und %s widersprechen sich"
#: src/symtab.c:293
#: src/symtab.c:282
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "Assoziativitäts-Werte für %s (%s) und %s (%s) widersprechen sich"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "Token %s und %s haben die selbe Nummer %d"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "das Startsymbol %s ist undefiniert"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "das Startsymbol %s ist ein Token"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, c-format
msgid "invalid argument %s for %s"
msgstr "unzulässiges Argument %s für %s"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr "mehrdeutiges Argument %s für %s"
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr "Gültige Argumente sind:"
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr ""
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u freigegeben (%.2f%%).\n"
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr ""
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u zwischengespeichert (%.2f%%)\n"
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr ""
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u zwischengespeichert (%.2f%%)\n"
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr ""
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u zwischengespeichert (%.2f%%)\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgstr ""
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr ""
msgstr "Zähler-Histogramm\n"
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr ""
msgstr "Größe-Histogramm\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr ""
msgstr "Dichte-Histogramm\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Bitset-Statistiken:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, 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:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr ""
msgstr "Konnte Statistik-Datei nicht lesen."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr ""
msgstr "Ungültige Statistik-Datei-Größe.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr ""
msgstr "Konnte Statistik-Datei nicht schreiben."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr ""
msgstr "Konnte Statistik-Datei nicht zum Schreiben öffnen."
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: Option »%s« ist mehrdeutig\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: Option »--%s« erlaubt kein Argument\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: Option »%c%s« erlaubt kein Argument\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: Option »%s« erfordert ein Argument\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: unbekannte Option »--%s«\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: unbekannte Option »%c%s«\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: ungültige Option -- %c\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: ungültige Option -- %c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: Option erfordert ein Argument -- %c\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: Option »-W %s« ist mehrdeutig\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: Option »-W %s« erlaubt kein Argument\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "Speicher ausgeschöpft"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "»"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "«"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr "untergeordnetes Programm »%s« konnte nicht aufgerufen werden"
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr "untergeordnetes Programm »%s« nicht gefunden"
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr "untergeordnetes Programm »%s« fehlgeschlagen"
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr "untergeordnetes Programm »%s« fehlgeschlagen (Rückgabewert %d)"
#: 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 "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d Schiebe/Reduziere-Konflikt"
#~ msgstr[1] "%d Schiebe/Reduziere-Konflikte"
#~ msgid "and"
#~ msgstr "und"
#~ msgid "conflicts: "
#~ msgstr "Konflikte: "
#~ msgid "State %d contains "
#~ msgstr "Zustand %d enthält "
#~ msgid "too many gotos (max %d)"
#~ msgstr "zu viele Gotos (max %d)"
#~ msgid "too many symbols (tokens plus nonterminals); maximum %d"
#~ msgstr "zu viele Symbole (Token plus Nicht-Terminale); Maximum %d"
#~ msgid ": unexpected end of file in a comment\n"
#~ msgstr ": Datei endet unerwartet innerhalb eines Kommentars\n"
#~ msgid ": unexpected end of file in a string\n"
#~ msgstr ": Datei endet unerwartet innerhalb einer Zeichenkette\n"
#~ msgid ": unexpected end of file in a character\n"
#~ msgstr ": Datei endet unerwartet innerhalb eines Zeichens\n"
#~ msgid ": unexpected end of file in a braced code\n"
#~ msgstr ": Datei endet unerwartet innerhalb geklammerten Programmtexts\n"
#~ msgid ": unexpected end of file in a prologue\n"
#~ msgstr ": Datei endet unerwartet innerhalb eines Prologs\n"
#~ msgid "%s is invalid"
#~ msgstr "%s ist unzulässig"
#~ msgid "too many states (max %d)"
#~ msgstr "zu viele Zustände (max %d)"
#~ msgid "%s: no grammar file given\n"
#~ msgstr "%s: keine Grammatik-Datei angegeben\n"
#~ msgid "%s: extra arguments ignored after `%s'\n"
#~ msgstr "%s: zusätzliche Argumente nach »%s« werden ignoriert\n"
#~ msgid "two @prec's in a row"
#~ msgstr "zwei @prec-Anweisungen nacheinander"
#~ msgid "%%dprec affects only GLR parsers"
#~ msgstr "%%dprec betrifft nur GLR-Parser"
#~ msgid "only one %%dprec allowed per rule"
#~ msgstr "nur ein %%dprec pro Regel erlaubt"
#~ msgid "state_list_append (state = %d, symbol = %d (%s))\n"
#~ msgstr "state_list_append (Zustand = %d, Symbol = %d (%s))\n"
@@ -810,9 +861,6 @@ msgstr ""
#~ msgid "shift"
#~ msgstr "durch Schieben gelöst"
#~ msgid "an error"
#~ msgstr "als Fehler betrachtet"
#~ msgid "%s contains "
#~ msgstr "%s enthält "
@@ -890,9 +938,6 @@ msgstr ""
#~ msgid " Skipping to next %c"
#~ msgstr " Überspringe Zeichen bis zum nächten %c"
#~ msgid "unterminated string at end of file"
#~ msgstr "unbeendete Zeichenkette am Ende der Datei"
#~ msgid "unterminated string"
#~ msgstr "unbeendete Zeichenkette"
@@ -956,9 +1001,6 @@ msgstr ""
#~ msgid "two actions at end of one rule"
#~ msgstr "Zwei Aktionen am Ende einer Regel"
#~ msgid "invalid input: %s"
#~ msgstr "ungültige Eingabe: %s"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "maximale Tabellengröße (%d) überschritten"
+257 -244
View File
@@ -29,7 +29,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.49a\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\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,11 +38,11 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Error del sistema desconocido"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "aviso: "
@@ -53,52 +53,35 @@ msgstr "aviso: "
# La verdad es que a mi lo de error fatal me suena fatal
# ngp
#
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "error grave: "
#: src/conflicts.c:72
#: src/conflicts.c:75
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr ""
"El conflicto en el estado %d entre la regla %d y el terminal %s se resuelve "
"como %s.\n"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr ""
"El conflicto en el estado %d entre la regla %d y el terminal %s se resuelve "
"como %s.\n"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
"El conflicto en el estado %d entre la regla %d y el terminal %s se resuelve "
"como %s.\n"
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d conflicto desplazamiento/reducción"
msgstr[1] "%d conflictos desplazamiento/reducción"
#: src/conflicts.c:409
msgid "and"
msgstr "y"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] " %d conflicto reducción/reducción"
msgstr[1] " %d conflictos reducción/reducción"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "conflictos: "
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
# Date cuenta de que `%d' puede ser cualquier número decimal. Podría
# ocurrir, por lo tanto, que tu mensaje en ejecución se vea luego como:
@@ -112,9 +95,9 @@ msgstr "conflictos: "
# ok
# ngp
#
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d desplazamiento(s)/reducción(ones)"
# Date cuenta de que `%d' puede ser cualquier número decimal. Podría
@@ -129,42 +112,62 @@ msgstr " %d desplazamiento(s)/reducci
#
# ok
# ngp
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d reducción(ones)/reducción(ones)"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "El estado %d contiene"
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "estado %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "esperado: %d conflicto desplazamiento/reducción\n"
msgstr[1] "esperados: %d conflictos desplazamiento/reducción\n"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr " %d conflicto reducción/reducción"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "no se puede abrir el fichero `%s'"
#: src/files.c:133
#: src/files.c:115
#, fuzzy
msgid "I/O error"
msgstr "un error"
#: src/files.c:118
msgid "cannot close file"
msgstr "no se puede cerrar el fichero"
#: src/getargs.c:157
#: src/files.c:336
#, fuzzy, c-format
msgid "conflicting outputs to file %s"
msgstr "conflicto de valores assoc para %s y %s"
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Pruebe `%s --help' para más información.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison genera analizadores para gramáticas LALR(1).\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Utilización: %s [OPCIÓN]... FICHERO\n"
#: src/getargs.c:165
#: src/getargs.c:196
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"
@@ -174,7 +177,7 @@ msgstr ""
"para la opción corta equivalente también. De igual forma para los argumentos "
"opcionales.\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -186,7 +189,7 @@ msgstr ""
" -V, --version informa de la versión y termina\n"
" -y, --yacc emula POSIX yacc\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -206,7 +209,7 @@ msgstr ""
" -n, --no-parser solamente genera las tablas\n"
" --k, --token-table incluye una tabla de nombres de terminales\n"
#: src/getargs.c:190
#: src/getargs.c:221
#, fuzzy
msgid ""
"Output:\n"
@@ -227,7 +230,7 @@ msgstr ""
" -g, --graph también produce una descripción en VCG del "
"automaton\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -238,25 +241,25 @@ msgid ""
" `none' disable the report\n"
msgstr ""
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr "Informe de los errores a <[email protected]>.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Escrito por Robert Corbett y Richard Stallman.\n"
#: src/getargs.c:232
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
#: src/getargs.c:268
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"
@@ -266,71 +269,62 @@ msgstr ""
"NINGUNA garantía; ni siquiera para COMERCIALIZACIÓN o ADAPTACIÓN PARA UN\n"
"USO PARTICULAR\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Pruebe `%s --help' para más información.\n"
msgid "missing operand after `%s'"
msgstr ""
# Me parece menos "computadora" decir "ningún fichero de gramática" - cll
#
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: no se ha especificado ningún fichero de gramática\n"
msgid "extra operand `%s'"
msgstr ""
# Ignorar es no saber, to ignore es no hacer caso, que no es lo mismo. sv
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: los argumentos extra después de '%s' no se tendrán en cuenta\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "vacío"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "Gramática"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
#, fuzzy
msgid "warning"
msgstr "aviso: "
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "demasiados gotos (máximo %d)"
#: src/main.c:117
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr ""
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr ""
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " el tipo %d es %s\n"
#: src/print.c:162
#: src/print.c:164
#, fuzzy, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tdesplazar e ir al estado %d\n"
#: src/print.c:164
#: src/print.c:166
#, fuzzy, c-format
msgid "go to state %d\n"
msgstr " %-4s\tir al estado %d\n"
#: src/print.c:201
#: src/print.c:203
#, fuzzy
msgid "error (nonassociative)\n"
msgstr "%-4s\terror (no asociativo)"
#: src/print.c:290
#: src/print.c:291
#, fuzzy, c-format
msgid "reduce using rule %d (%s)"
msgstr "$default\treduce usando la regla %d (%s)"
@@ -348,133 +342,114 @@ msgstr ""
msgid "state %d"
msgstr "estado %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Terminales con las reglas donde aparecen"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "No terminales con las reglas donde aparecen"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr " en la izquierda:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " en la derecha:"
#: src/print.c:552
#: src/print.c:554
#, fuzzy
msgid "Rules never reduced"
msgstr "%d regla que nunca se ha reducido\n"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "múltiples declaraciones de %s"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr ""
#: src/reader.c:239
#: src/reader.c:236
#, c-format
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
#, c-format
msgid "type clash (`%s' `%s') on default action"
#: src/reader.c:265
#, fuzzy, c-format
msgid "type clash on default action: <%s> != <%s>"
msgstr "los tipos (`%s' `%s') no concuerdan en la acción por defecto"
#: src/reader.c:272
#: src/reader.c:271
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
msgid "two @prec's in a row"
msgstr "dos @prec en una línea"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr ""
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr ""
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgid "%s must be followed by positive number"
msgstr ""
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "no hay reglas en la gramática de entrada"
#: src/reader.c:545
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "demasiados símbolos (terminales y no terminales); máximo %d"
#: src/reduce.c:239
#: src/reduce.c:241
#, fuzzy
msgid "useless rule"
msgstr "%d regla sin uso"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d no terminal sin uso"
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "No terminales sin uso:"
#: src/reduce.c:349
#: src/reduce.c:350
#, fuzzy
msgid "Useless nonterminals"
msgstr "No terminales sin uso:"
#: src/reduce.c:362
#: src/reduce.c:363
#, fuzzy
msgid "Terminals which are not used"
msgstr "Terminales que no se usan:"
#: src/reduce.c:371
#: src/reduce.c:372
#, fuzzy
msgid "Useless rules"
msgstr "Reglas sin uso:"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d regla que nunca se ha reducido\n"
msgstr[1] "%d reglas que nunca se han reducido\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d no terminal sin uso"
msgstr[1] "%d no terminales sin uso"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr " y "
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -486,81 +461,70 @@ 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"
#: scan-gram.l:202
#, c-format
msgid ": invalid character: `%c'\n"
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: scan-gram.l:246
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "fin de fichero inesperado"
#: scan-gram.l:274 scan-gram.l:412
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "fin de fichero inesperado"
#: scan-gram.l:311 scan-gram.l:383
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "fin de fichero inesperado"
#: scan-gram.l:332
#: src/scan-gram.l:216
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgid "invalid directive: %s"
msgstr "entrada no válida: %s"
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid "integer out of range: %s"
msgstr ""
#: src/scan-gram.l:281
#, fuzzy, c-format
msgid "invalid character: %s"
msgstr "carácter desconocido: %s"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, fuzzy, c-format
msgid "invalid escape sequence: %s"
msgstr "valor no válido: %s%d"
#: scan-gram.l:353
#: src/scan-gram.l:439
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgid "unrecognized escape sequence: %s"
msgstr "no reconocido: %s"
#: scan-gram.l:473
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "fin de fichero inesperado"
#: src/scan-gram.l:524
#, c-format
msgid "missing `{' in `%s'"
msgstr ""
#: scan-gram.l:502
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "fin de fichero inesperado"
#: scan-gram.l:560
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ de `%s' no tiene tipo declarado"
#: scan-gram.l:577 scan-gram.l:664
#, c-format
msgid "invalid value: %s%d"
msgstr "valor no válido: %s%d"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d de `%s' no tiene tipo declarado"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#, c-format
msgid "%s is invalid"
msgstr "%s no es válido"
#: src/scan-gram.l:820 src/scan-gram.l:887
#, fuzzy, c-format
msgid "invalid value: %s"
msgstr "valor no válido: %s%d"
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "demasiados estados (máximo %d)"
#: src/scan-gram.l:978
#, fuzzy, c-format
msgid "missing `%s' at end of file"
msgstr "cadena sin terminar al final del fichero"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "valor $ no válido"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "redeclaración del tipo de %s"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, fuzzy, c-format
msgid "%s redeclaration for %s"
msgstr "redeclaración del tipo de %s"
@@ -570,12 +534,12 @@ msgstr "redeclaraci
msgid "redefining precedence of %s"
msgstr "redefinición de la precedencia de %s"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "redefinido el símbolo %s"
#: src/symtab.c:180
#: src/symtab.c:179
#, fuzzy, c-format
msgid "redefining user token number of %s"
msgstr "redefinición de la precedencia de %s"
@@ -583,152 +547,152 @@ msgstr "redefinici
# `token' se debe traducir como `literal' - cll
# en terminología de compiladores token es más un terminal - ngp
#
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"se usa el símbolo %s, pero no está definido como terminal y no tiene reglas"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "símbolo `%s' utilizado más de una vez como cadena literal"
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "al símbolo `%s' se le ha dado más de una cadena literal"
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "precedencias en conflicto entre %s y %s"
#: src/symtab.c:293
#: src/symtab.c:282
#, fuzzy, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "conflicto de valores assoc para %s y %s"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "los terminales %s y %s tienen asignados ambos el número %d"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "el símbolo de inicio (axioma) %s no está definido"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "el símbolo de inicio (axioma) %s es un terminal"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, fuzzy, c-format
msgid "invalid argument %s for %s"
msgstr "valor no válido: %s%d"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr ""
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: la opción `%s' es ambigua\n"
# Pongo esto como en otros .po. sv
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: la opción `--%s' no admite ningún argumento\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: la opción `%c%s' no admite ningún argumento\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: la opción `%s' requiere un argumento\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: opción `--%s' no reconocida\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: opción `%c%s' no reconocida\n"
@@ -750,7 +714,7 @@ msgstr "%s: opci
# haber opciones ilegales, digo yo, y no por eso las CPUs van
# a la cárcel (como mucho se cuelgan, je, je, 0ff0 :-). sv
#
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: opción -- %c ilegal\n"
@@ -760,62 +724,96 @@ msgstr "%s: opci
# Porque Enrique decía que le recordaba a disminuidos físicos.
# Francamente, no creo que haya que andar con estas "fobias".
# Pongo inválida. sv
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: opción -- %c no válida\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: la opción -- %c requiere un argumento\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: la opción `-W %s' es ambigua\n"
# Pongo esto como en otros .po. sv
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: la opción `-W %s' no admite ningún argumento\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "memoria agotada"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr ""
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr ""
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr ""
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr ""
#: 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 ""
#~ msgid "too many states (max %d)"
#~ msgstr "demasiados estados (máximo %d)"
#~ msgid "reduce"
#~ msgstr "reduce"
#~ msgid "shift"
#~ msgstr "desplaza"
#~ msgid "an error"
#~ msgstr "un error"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d conflicto desplazamiento/reducción"
#~ msgstr[1] "%d conflictos desplazamiento/reducción"
#~ msgid "and"
#~ msgstr "y"
#~ msgid "State %d contains "
#~ msgstr "El estado %d contiene"
#~ msgid "conflicts: "
#~ msgstr "conflictos: "
#~ msgid "%s contains "
#~ msgstr "%s contiene "
@@ -823,6 +821,18 @@ msgstr ""
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' ya no está soportado"
# Me parece menos "computadora" decir "ningún fichero de gramática" - cll
#
#~ msgid "%s: no grammar file given\n"
#~ msgstr "%s: no se ha especificado ningún fichero de gramática\n"
# Ignorar es no saber, to ignore es no hacer caso, que no es lo mismo. sv
#~ msgid "%s: extra arguments ignored after `%s'\n"
#~ msgstr "%s: los argumentos extra después de '%s' no se tendrán en cuenta\n"
#~ msgid "too many gotos (max %d)"
#~ msgstr "demasiados gotos (máximo %d)"
# to ignore no es ignorar. Pon otra cosa, please. sv
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "se ha encontrado `/' cuando no se esperaba, no se tendrán en cuenta"
@@ -830,6 +840,9 @@ msgstr ""
#~ msgid "unterminated comment"
#~ msgstr "comentario sin terminar"
#~ msgid "unexpected end of file"
#~ msgstr "fin de fichero inesperado"
# ¿unescaped?
#~ msgid "unescaped newline in constant"
#~ msgstr "salto de línea en constante sin secuencia de escape"
@@ -899,12 +912,12 @@ msgstr ""
#~ msgid " Skipping to next %c"
#~ msgstr " Saltando al siguiente %c"
#~ msgid "unterminated string at end of file"
#~ msgstr "cadena sin terminar al final del fichero"
#~ msgid "unterminated string"
#~ msgstr "cadena sin terminar"
#~ msgid "%s is invalid"
#~ msgstr "%s no es válido"
#~ msgid "unterminated `%{' definition"
#~ msgstr "definición `%{' sin terminar"
@@ -960,9 +973,6 @@ msgstr ""
#~ msgid "no input grammar"
#~ msgstr "no hay gramática de entrada"
#~ msgid "unknown character: %s"
#~ msgstr "carácter desconocido: %s"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "regla mal formada: el símbolo inicial no está seguido por :"
@@ -972,6 +982,9 @@ msgstr ""
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "a la regla previa le falta un `;' al final"
#~ msgid "two @prec's in a row"
#~ msgstr "dos @prec en una línea"
# Insisto, el empleo de participios a secas me parece como hablar en
# indio. Por favor, permíteme que añada un "está" :) - cll
# ok - ngp
@@ -981,8 +994,8 @@ msgstr ""
#~ msgid "two actions at end of one rule"
#~ msgstr "dos acciones al final de una regla"
#~ msgid "invalid input: %s"
#~ msgstr "entrada no válida: %s"
#~ msgid "too many symbols (tokens plus nonterminals); maximum %d"
#~ msgstr "demasiados símbolos (terminales y no terminales); máximo %d"
# Únicamente cambio la posición del adjetivo `máximo'. En vez de después
# de `tabla', después de `tamaño' - cll
+236 -328
View File
@@ -4,9 +4,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49b\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"PO-Revision-Date: 2002-08-13 01:35+0300\n"
"Project-Id-Version: bison 1.75e\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\n"
"PO-Revision-Date: 2002-12-27 10:55+0200\n"
"Last-Translator: Toomas Soome <[email protected]>\n"
"Language-Team: Estonian <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -14,96 +14,98 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Tundmatu süsteemi viga"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "hoiatus: "
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "fataalne viga: "
#: src/conflicts.c:72
#: src/conflicts.c:75
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr " Konflikt reegli %d ja märgi %s vahel lahendatud nihkega"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr " Konflikt reegli %d ja märgi %s vahel lahendatud redutseerimisega"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr " Konflikt reegli %d ja märgi %s vahel lahendatud veana"
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d nihutamine/redutseerimine konflikt"
msgstr[1] "%d nihutamine/redutseerimine konflikti"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "ja"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d redutseerimine/redutseerimine konflikt"
msgstr[1] "%d redutseerimine/redutseerimine konflikti"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "konfliktid: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d nihutamine/redutseerimine"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d redutseerimine/redutseerimine"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "Olek %d sisaldab "
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "olek %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "eeldasime %d nihutamine/redutseerimine konflikti"
msgstr[1] "eeldasime %d nihutamine/redutseerimine konflikti"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d redutseerimine/redutseerimine konflikt"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "faili `%s' ei saa avada"
#: src/files.c:133
#: src/files.c:115
msgid "I/O error"
msgstr "S/V viga"
#: src/files.c:118
msgid "cannot close file"
msgstr "faili ei õnnestu sulgeda"
#: src/getargs.c:157
#: src/files.c:336
#, c-format
msgid "conflicting outputs to file %s"
msgstr ""
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Lisainfo saamiseks proovige `%s --help'.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison genereerib parsereid LALR(1) grammatikatele.\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Kasuta: %s [VÕTI]...FAIL\n"
#: src/getargs.c:165
#: src/getargs.c:196
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"
@@ -111,7 +113,7 @@ msgstr ""
"Kui pikk võti näitab, et argument on kohustuslik, siis on see kohustuslik \n"
"ka lühikese võtme korral. Sama ka vabalt valitavate võtmete korral.\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -123,7 +125,7 @@ msgstr ""
" -V, --version esita versiooniinfo ja lõpeta töö\n"
" -y, --yacc emuleeri POSIX yacc\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -143,7 +145,7 @@ msgstr ""
" -n, --no-parser genereeri ainult tabelid\n"
" -k, --token-table lisa ka sümbolite nimede tabel\n"
#: src/getargs.c:190
#: src/getargs.c:221
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -162,7 +164,7 @@ msgstr ""
" -o, --output-file=FAIL jäta väljund FAILi\n"
" -g, --graph loo automaadi kirjeldus VCG graafina\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -180,25 +182,25 @@ msgstr ""
" `all' kogu ülaltoodud info\n"
" `none' blokeeri raport\n"
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr "Teatage palun vigadest aadressil <[email protected]>.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Kirjutanud Robert Corbett ja Richard Stallman.\n"
#: src/getargs.c:232
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Autoriõigus © %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
#: src/getargs.c:268
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"
@@ -206,66 +208,60 @@ msgstr ""
"See on vaba tarkvara; kopeerimistingimused leiate lähtetekstidest. Garantii\n"
"PUUDUB; ka müügiks või mingil eesmärgil kasutamiseks.\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Lisainfo saamiseks proovige `%s --help'.\n"
msgid "missing operand after `%s'"
msgstr "`%s' järel puudub operand"
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: puudub grammatikafail\n"
msgid "extra operand `%s'"
msgstr "Liigne operand `%s'"
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: ignoreerin lisaargumente peale `%s'\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "tühi"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "Grammatika"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
msgid "warning"
msgstr "hoiatus"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "liiga palju gotosid (maks. %d)"
#: src/main.c:117
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr "reeglit ei redutseerita konfliktide tõttu kunagi"
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr "POSIX keelab deklareerimised grammatikas"
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr "parameetri deklaratsioonis puudub identifikaator"
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " tüüp %d on %s\n"
#: src/print.c:162
#: src/print.c:164
#, c-format
msgid "shift, and go to state %d\n"
msgstr "nihuta ja liigu olekule %d\n"
#: src/print.c:164
#: src/print.c:166
#, c-format
msgid "go to state %d\n"
msgstr "liigu olekule %d\n"
#: src/print.c:201
#: src/print.c:203
msgid "error (nonassociative)\n"
msgstr "viga (mitteassotsiatiivne)\n"
#: src/print.c:290
#: src/print.c:291
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "redutseerin kasutades reeglit %d (%s)"
@@ -283,127 +279,109 @@ msgstr "$default"
msgid "state %d"
msgstr "olek %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Terminalid, koos reeglitega kus nad ilmuvad"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "Mitteterminalid, koos reeglitega kus nad ilmuvad"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr " vasakul:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " paremal:"
#: src/print.c:552
#: src/print.c:554
msgid "Rules never reduced"
msgstr "Mitteredutseeruvad reeglid"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "korduvad %s deklaratsioonid"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr "tulemuse tüübikonflikt mestimise funktsioonis %s: `%s' versus `%s'"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr "tulemuse tüübikonflikt mestimise funktsioonis %s: <%s> != <%s>"
#: src/reader.c:239
#: src/reader.c:236
#, 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:265
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "vaikimisi tegevuse tüübikonflikt (`%s' `%s')"
msgid "type clash on default action: <%s> != <%s>"
msgstr "vaikimisi tegevuse tüübikonflikt: <%s> != <%s>"
#: src/reader.c:272
#: src/reader.c:271
msgid "empty rule for typed nonterminal, and no action"
msgstr "tüübiga mitteterminalil on tühi reegel ja puudub tegevus"
#: src/reader.c:343
msgid "two @prec's in a row"
msgstr "kaks @prec ühel real"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr "reeglis on lubatud ainult üks %s"
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr "%s puudutab ainult GLR parsereid"
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr "%%dprec puudutab ainult GLR parsereid"
msgid "%s must be followed by positive number"
msgstr "%s järel peab olema positiivne number"
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr "%%dprec järel peab olema positiivne number"
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr "reeglis on lubatud ainult üks %%dprec"
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr "%%merge puudutab ainult GLR parsereid"
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr "reeglis on lubatud ainult üks %%merge"
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "sisendgrammatikas pole reegleid"
#: src/reader.c:545
#, 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
#: src/reduce.c:241
msgid "useless rule"
msgstr "kasutamata reegel"
#: src/reduce.c:302
msgid "useless nonterminal"
msgstr "kasutamata mitteterminal"
#, c-format
msgid "useless nonterminal: %s"
msgstr "kasutamata mitteterminal: %s"
#: src/reduce.c:349
#: src/reduce.c:350
msgid "Useless nonterminals"
msgstr "Kasutamata mitteterminalid"
#: src/reduce.c:362
#: src/reduce.c:363
msgid "Terminals which are not used"
msgstr "Terminalid, mida ei kasutatud"
#: src/reduce.c:371
#: src/reduce.c:372
msgid "Useless rules"
msgstr "Kasutamata reeglid"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d reegel ei redutseeru\n"
msgstr[1] "%d reeglit ei redutseeru\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d kasutamata mitteterminal"
msgstr[1] "%d kasutamata mitteterminali"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr " ja "
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -415,76 +393,70 @@ msgstr[1] "%d kasutamata reeglit"
msgid "start symbol %s does not derive any sentence"
msgstr "stardisümbolist %s ei tuletata ühtegi lauset"
#: scan-gram.l:202
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr "käsitlen juhuslikku `,' kui tühikut"
#: src/scan-gram.l:216
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ": vigane sümbol: `%c'\n"
msgid "invalid directive: %s"
msgstr "vigane juhus: %s"
#: scan-gram.l:246
msgid ": unexpected end of file in a comment\n"
msgstr ": ootamatu faililõpp kommentaaris\n"
#: scan-gram.l:274 scan-gram.l:412
msgid ": unexpected end of file in a string\n"
msgstr ": ootamatu faililõpp sõnes\n"
#: scan-gram.l:311 scan-gram.l:383
msgid ": unexpected end of file in a character\n"
msgstr ": ootamatu faililõpp sümbolis\n"
#: scan-gram.l:332
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid ": invalid escape: %s\n"
msgstr ": vigane paojada: %s\n"
msgid "integer out of range: %s"
msgstr "number piiridest väljas: %s"
#: scan-gram.l:353
#: src/scan-gram.l:281
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr ": tundmatu paojada: %s\n"
msgid "invalid character: %s"
msgstr "vigased sümbolid: %s"
#: scan-gram.l:473
msgid ": unexpected end of file in a braced code\n"
msgstr ": ootamatu faililõpp sulgude vahelises koodis\n"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, c-format
msgid "invalid escape sequence: %s"
msgstr "vigane paojada: %s"
#: scan-gram.l:502
msgid ": unexpected end of file in a prologue\n"
msgstr ": ootamatu faililõpp proloogis\n"
#: src/scan-gram.l:439
#, c-format
msgid "unrecognized escape sequence: %s"
msgstr "tundmatu paojada: %s"
#: scan-gram.l:560
#: src/scan-gram.l:524
#, c-format
msgid "missing `{' in `%s'"
msgstr "`%s' juures puudub `{'"
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "`%s' $$ ei oma deklareeritud tüüpi"
#: scan-gram.l:577 scan-gram.l:664
#, c-format
msgid "invalid value: %s%d"
msgstr "vigane väärtus: %s%d"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d `%s' ei oma deklareeritud tüüpi"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#: src/scan-gram.l:820 src/scan-gram.l:887
#, c-format
msgid "%s is invalid"
msgstr "%s on vigane"
msgid "invalid value: %s"
msgstr "vigane väärtus: %s"
#: src/state.c:145
#: src/scan-gram.l:978
#, c-format
msgid "too many states (max %d)"
msgstr "liiga palju olekuid (maks %d)"
msgid "missing `%s' at end of file"
msgstr "faili lõpus puudub `%s'"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "vigane $ väärtus"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "%s tüübi uuesti deklareerimine"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, c-format
msgid "%s redeclaration for %s"
msgstr "%s uuesti deklareerimine %s jaoks"
@@ -494,110 +466,110 @@ msgstr "%s uuesti deklareerimine %s jaoks"
msgid "redefining precedence of %s"
msgstr "%s prioriteedi uus definitsioon"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "sümbol %s on uuesti defineeritud"
#: src/symtab.c:180
#: src/symtab.c:179
#, c-format
msgid "redefining user token number of %s"
msgstr "%s kasutaja märgi numbri uuesti defineerimine"
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"kasutatakse sümbolit %s, mis ei ole defineeritud märgina ja millel puuduvad "
"reeglid"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "sümbolit `%s' on kasutatud enam kui kord literaal sõnena"
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "sümbolile `%s' on antud enam kui üks literaal sõne"
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "%s ja %s omavad konfliktseid prioriteete"
#: src/symtab.c:293
#: src/symtab.c:282
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "%s (%s) ja %s (%s) omavad konfliktseid assotsiatiivseid väärtuseid"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "märkidele %s ja %s on mõlemale omistatud number %d"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "stardisümbol %s ei ole defineeritud"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "stardisümbol %s on märk"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, c-format
msgid "invalid argument %s for %s"
msgstr "vigane argument %s %s'le"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr "segane argument %s %s'le"
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr "Lubatud argumendid on:"
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr "%d bitset_allocs, %d vabastatud (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u vabastatud (%.2f%%).\n"
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr "%d bitset_sets, %d puhverdatud (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u puhverdatud (%.2f%%)\n"
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr "%d bitset_resets, %d puhverdatud (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u puhverdatud (%.2f%%)\n"
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr "%d bitset_tests, %d puhverdatud (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u puhverdatud (%.2f%%)\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgstr "%d bitset_lists\n"
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr "loenduri logi histogramm\n"
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr "suuruste logi histogramm\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr "tiheduse histogramm\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
@@ -605,95 +577,115 @@ msgstr ""
"Bitset statistika:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgstr "Salvestatud läbimisi = %d\n"
msgid "Accumulated runs = %u\n"
msgstr "Salvestatud läbimisi = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr "Statistika faili ei saa lugeda."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr "Vigane statistika faili suurus.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr "Statistika faili ei saa kirjutada."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr "Statistika faili ei saa kirjutamiseks avada."
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: võti `%s' on segane\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: võti `--%s' ei luba argumenti\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: võti `%c%s' ei luba argumenti\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: võti `%s' nõuab argumenti\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: tundmatu võti `--%s'\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: tundmatu võti `%c%s'\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: lubamatu võti -- %c\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: vigane võti -- %c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: võti nõuab argumenti -- %c\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: võti `-W %s' on segane\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: võti `-W %s' ei luba argumenti\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "mälu on otsas"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr "abiprogrammi `%s' ei saa käivitada"
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr "ei leia abiprogrammi `%s'"
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr "abiprogramm `%s' ebaõnnestus"
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr "abiprogramm `%s' ebaõnnestus (lõpetamise kood %d)"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
@@ -701,109 +693,25 @@ msgstr ""
"\n"
"Täitmise ajad (sekundites)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr " KOKKU :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr "aeg %s: %ld.%06ld (%ld%%)\n"
#~ msgid "state_list_append (state = %d, symbol = %d (%s))\n"
#~ msgstr "state_list_append (olek = %d, sümbol = %d (%s))\n"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d nihutamine/redutseerimine konflikt"
#~ msgstr[1] "%d nihutamine/redutseerimine konflikti"
#~ msgid "Entering new_itemsets, state = %d\n"
#~ msgstr "Sisenen new_itemsets, olek = %d\n"
#~ msgid "and"
#~ msgstr "ja"
#~ msgid "Entering get_state, symbol = %d (%s)\n"
#~ msgstr "Sisenen get_state, szmbol = %d (%s)\n"
#~ msgid "conflicts: "
#~ msgstr "konfliktid: "
#~ msgid "Exiting get_state => %d\n"
#~ msgstr "Väljun get_state => %d\n"
#~ msgid "Entering append_states, state = %d\n"
#~ msgstr "Sisenen append_states, olek = %d\n"
#~ msgid "Processing state %d (reached by %s)\n"
#~ msgstr "Töötlen olekut %d (olekust %s)\n"
#~ msgid "undefined associativity"
#~ msgstr "defineerimata assotsiatiivsus"
#~ msgid "Closure: %s\n"
#~ msgstr "Sulund: %s\n"
#~ msgid " (rule %d)\n"
#~ msgstr " (reegel %d)\n"
#~ msgid "RTC: Firsts Input"
#~ msgstr "RTC: Firsts Sisend"
#~ msgid "RTC: Firsts Output"
#~ msgstr "RTC: Firsts Väljund"
#~ msgid "input"
#~ msgstr "sisend"
#~ msgid "output"
#~ msgstr "väljund"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Muutujad\n"
#~ "--------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Väärtus Sprec Sassoc Märk\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Reeglid\n"
#~ "-------\n"
#~ "\n"
#~ msgid ""
#~ "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
#~ msgstr ""
#~ "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Interpreteeritud reeglid\n"
#~ "------------------------\n"
#~ "\n"
#~ msgid "Lookaheads: BEGIN\n"
#~ msgstr "Ettevaatamine: ALGUS\n"
#~ msgid "State %d: %d lookaheads\n"
#~ msgstr "Olek %d: %d ettevaatamist\n"
#~ msgid " on %d (%s) -> rule %d\n"
#~ msgstr " %d (%s) -> reegel %d\n"
#~ msgid "Lookaheads: END\n"
#~ msgstr "Ettevaatamine: LÕPP\n"
#~ msgid "relation_transpose: input\n"
#~ msgstr "relation_transpose: sisend\n"
#~ msgid "relation_transpose: output\n"
#~ msgstr "relation_transpose: väljund\n"
#~ msgid "growing table and check from: %lu to %lu\n"
#~ msgstr "kasvatan table ja check suuruselt: %lu suurusele %lu\n"
#~ msgid "base_t too small to hold %d\n"
#~ msgstr "base_t on liiga väike hoidmaks %d\n"
#~ msgid "State %d contains "
#~ msgstr "Olek %d sisaldab "
+281 -242
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.49b\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"PO-Revision-Date: 2002-08-12 12:00-0500\n"
"Project-Id-Version: GNU bison 1.75b\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\n"
"PO-Revision-Date: 2002-11-13 08:00-0500\n"
"Last-Translator: Michel Robitaille <[email protected]>\n"
"Language-Team: French <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -15,96 +15,98 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Erreur système inconnue"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "AVERTISSEMENT: "
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "erreur fatale: "
#: src/conflicts.c:72
#: src/conflicts.c:75
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr "Conflit entre la règle %d et le jeton %s résolu par décalage"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr "Conflit entre la règle %d et le jeton %s résolu par réduction"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr "Conflit entre la règle %d et le jeton %s résolu comme étant une erreur"
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d conflit par décalage/réduction"
msgstr[1] "%d conflits par décalage/réduction"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "et"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d conflit par réduction/réduction"
msgstr[1] "%d conflits par réduction/réduction"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "conflits: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d décalage/réduction"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d réduction/réduction"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "L'état %d contient "
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "état %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, 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"
msgstr[1] "attendait %d conflits par décalage/réduction"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d conflit par réduction/réduction"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "ne peut ouvrir le fichier « %s »"
#: src/files.c:133
#: src/files.c:115
msgid "I/O error"
msgstr "une erreur d'E/S"
#: src/files.c:118
msgid "cannot close file"
msgstr "ne peut fermer le fichier"
#: src/getargs.c:157
#: src/files.c:336
#, c-format
msgid "conflicting outputs to file %s"
msgstr ""
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Pour en savoir davantage, faites: « %s --help ».\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison génère des analyseurs pour les grammaires de type LALR(1).\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Usage: %s [OPTION]... FICHIER\n"
#: src/getargs.c:165
#: src/getargs.c:196
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 +115,7 @@ msgstr ""
"il est alors obligatoire également pour une option de forme courte.\n"
"Il en est de même pour les arguments optionnels.\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -125,7 +127,7 @@ msgstr ""
" -V, --version afficher le nom et la version du logiciel\n"
" -y, --yacc émuler yacc en mode POSIX\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -147,7 +149,7 @@ msgstr ""
" -r, --raw compter les jetons à partir de 3\n"
" -k, --token-table inclure la table des noms de jetons\n"
#: src/getargs.c:190
#: src/getargs.c:221
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -167,7 +169,7 @@ msgstr ""
" -g, --graph produire aussi la description du graphe VCG de "
"l'automate\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -185,25 +187,25 @@ msgstr ""
" `all' inclure toutes les informations ci-haut\n"
" `none' désactiver la génération de rapport\n"
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr "Rapporter toutes anomalies à <[email protected]>.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Écrit par Robert Corbett et Richard Stallman.\n"
#: src/getargs.c:232
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright © %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
#: src/getargs.c:268
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"
@@ -212,66 +214,60 @@ msgstr ""
"reproduction. AUCUNE garantie n'est donnée; tant pour des raisons\n"
"COMMERCIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Pour en savoir davantage, faites: « %s --help ».\n"
msgid "missing operand after `%s'"
msgstr "opérande manquante après « %s »"
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: grammaire manquante\n"
msgid "extra operand `%s'"
msgstr "opérande superflue « %s »"
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: arguments supplémentaires ignorés après « %s »\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "vide"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "Grammaire"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
msgid "warning"
msgstr "AVERTISSEMENT"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "nombre trop grand de « goto » (Max %d)"
#: src/main.c:117
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr "la règle n'a jamais fait de réduction en raison des conflits"
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr "POSIX interdit les déclaration dans la grammaire"
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " le type %d est %s\n"
#: src/print.c:162
#: src/print.c:164
#, c-format
msgid "shift, and go to state %d\n"
msgstr "décalage et aller à l'état %d\n"
#: src/print.c:164
#: src/print.c:166
#, c-format
msgid "go to state %d\n"
msgstr "aller à l'état %d\n"
#: src/print.c:201
#: src/print.c:203
msgid "error (nonassociative)\n"
msgstr "erreur (non-associative)\n"
#: src/print.c:290
#: src/print.c:291
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "réduction par utilisation de la règle %d (%s)"
@@ -289,128 +285,110 @@ msgstr "$d
msgid "state %d"
msgstr "état %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Terminaux, suivis des règles où ils apparaissent"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "Non-terminaux, suivis des règles où ils apparaissent"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr " à gauche:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " à droite:"
#: src/print.c:552
#: src/print.c:554
msgid "Rules never reduced"
msgstr "Règles jamais réduites"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "déclarations multiples de %s"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr ""
"conflit dans le type résultant de la fonction de fusion %s: « %s » vs « %s »"
"conflit dans le type résultant de la fonction de fusion %s: <%s> != <%s>"
#: src/reader.c:239
#: src/reader.c:236
#, 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:265
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "conflit de type (« %s » « %s ») pour l'action par défaut"
msgid "type clash on default action: <%s> != <%s>"
msgstr "conflit de type pour l'action par défaut: <%s> != <%s>"
#: src/reader.c:272
#: src/reader.c:271
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
msgid "two @prec's in a row"
msgstr "deux @prec de suite"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr "seul un %s est permis par règle"
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr "%s affecte seulement les analyseurs GLR"
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr "%%dprec affecte seulement les analyseurs GLR"
msgid "%s must be followed by positive number"
msgstr "%s doit être suivi d'un nombre positif"
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr "%%dprec doit être suivi d'un nombre positif"
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr "seul un %%dprec est permis par règle"
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr "%%merge affecte seulement les analyseurs GLR"
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr "seul un %%merge est permis par règle"
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "la grammaire n'a pas de règles"
#: src/reader.c:545
#, 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
#: src/reduce.c:241
msgid "useless rule"
msgstr "règle inutilisable"
#: src/reduce.c:302
msgid "useless nonterminal"
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "non-terminal inutilisable"
#: src/reduce.c:349
#: src/reduce.c:350
msgid "Useless nonterminals"
msgstr "Non-terminaux inutiles"
#: src/reduce.c:362
#: src/reduce.c:363
msgid "Terminals which are not used"
msgstr "Terminaux qui ne sont utilisés"
#: src/reduce.c:371
#: src/reduce.c:372
msgid "Useless rules"
msgstr "Règles inutiles"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d règle n'a jamais été réduite\n"
msgstr[1] "%d règles n'ont jamais été réduites\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d nonterminal inutilisable"
msgstr[1] "%d nonterminals inutilisables"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr " et "
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -423,76 +401,70 @@ msgid "start symbol %s does not derive any sentence"
msgstr ""
"symbole de départ %s peut permettre la dérivation de n'importe quelle phrase"
#: scan-gram.l:202
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: src/scan-gram.l:216
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ": caractère invalide: `%c'\n"
msgid "invalid directive: %s"
msgstr "directive invalide: %s"
#: scan-gram.l:246
msgid ": unexpected end of file in a comment\n"
msgstr ": fin de fichier inattendue dans un commentaire\n"
#: scan-gram.l:274 scan-gram.l:412
msgid ": unexpected end of file in a string\n"
msgstr ": fin de fichier inattendue dans une chaîne\n"
#: scan-gram.l:311 scan-gram.l:383
msgid ": unexpected end of file in a character\n"
msgstr ": fin de fichier inattendue dans un caractère\n"
#: scan-gram.l:332
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid ": invalid escape: %s\n"
msgstr ": séquence d'échappement invalide: %s\n"
msgid "integer out of range: %s"
msgstr "entier hors gamme: %s"
#: scan-gram.l:353
#: src/scan-gram.l:281
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr ": séquence d'échappement non reconnue: %s\n"
msgid "invalid character: %s"
msgstr "caractère invalide: %s"
#: scan-gram.l:473
msgid ": unexpected end of file in a braced code\n"
msgstr ": fin de fichier inattendue dans du code entre accolades\n"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, c-format
msgid "invalid escape sequence: %s"
msgstr "séquence d'échappement invalide: %s"
#: scan-gram.l:502
msgid ": unexpected end of file in a prologue\n"
msgstr ": fin de fichier inattendue dans un prologue\n"
#: src/scan-gram.l:439
#, c-format
msgid "unrecognized escape sequence: %s"
msgstr "séquence d'échappement non reconnue: %s"
#: scan-gram.l:560
#: src/scan-gram.l:524
#, fuzzy, c-format
msgid "missing `{' in `%s'"
msgstr "opérande manquante après « %s »"
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ de « %s » n'a pas son type déclaré"
#: scan-gram.l:577 scan-gram.l:664
#, c-format
msgid "invalid value: %s%d"
msgstr "valeur invalide: %s%d"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d de « %s » n'a pas de type déclaré"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#: src/scan-gram.l:820 src/scan-gram.l:887
#, c-format
msgid "%s is invalid"
msgstr "%s n'est pas valide"
msgid "invalid value: %s"
msgstr "valeur invalide: %s"
#: src/state.c:145
#: src/scan-gram.l:978
#, c-format
msgid "too many states (max %d)"
msgstr "nombre trop grand d'états (max %d)"
msgid "missing `%s' at end of file"
msgstr "chaîne de caractères « %s » manquante en fin de fichier"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "la valeur de symbole $ n'est pas valide"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "redéclaration du type de %s"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, c-format
msgid "%s redeclaration for %s"
msgstr "redéclaration de %s pour %s"
@@ -502,110 +474,110 @@ msgstr "red
msgid "redefining precedence of %s"
msgstr "redéfinition du niveau de priorité de %s"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "symbole %s redéfini"
#: src/symtab.c:180
#: src/symtab.c:179
#, c-format
msgid "redefining user token number of %s"
msgstr "redéfinition du jeton usager numéro de %s"
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"le symbole %s est utilisé mais ce n'est pas un terminal et il ne possède pas "
"de règle"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "symbole « %s » utilisé plus d'une fois dans une chaîne litérale"
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "symbole « %s » présent dans plus d'une chaîne litérale"
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "les priorités pour %s et %s entrent en conflit"
#: src/symtab.c:293
#: src/symtab.c:282
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "conflits d'associativités pour %s (%s) et %s (%s)"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "les jetons %s et %s se sont vus assigner le nombre %d"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "le symbole de départ %s n'est pas défini"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "le symbole de départ %s est un terminal"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, c-format
msgid "invalid argument %s for %s"
msgstr "argument invalide %s pour %s"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr "argument ambiguë %s pour %s"
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr "Arguments valides sont:"
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr "%d bitset_allocs, %d libérés (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u libérés (%.2f%%).\n"
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr "%d bitset_sets, %d dans la cache (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u dans la cache (%.2f%%)\n"
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr "%d bitset_resets, %d dans la cache (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u dans la cache (%.2f%%)\n"
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr "%d bitset_tests, %d dans la cache (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u dans la cache (%.2f%%)\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgstr "%d bitset_lists\n"
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr "histogramme des compteurs\n"
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr "taille de l'histogramme des compteurs\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr "densité de l'histogramme\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
@@ -613,95 +585,115 @@ msgstr ""
"Statistiques des bitset:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgstr "Exécutions accumulées = %d\n"
msgid "Accumulated runs = %u\n"
msgstr "Exécutions accumulées = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr "Ne peut lire le fichier de stats."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr "Taille erronée du fichier de stats.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr "Ne peut écrire le fichier de stats."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr "Ne ouvrir en écriture le fichier de stats."
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: l'option %s est ambigüe\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: l'option « --%s » n'admet pas d'argument\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: l'option « %c%s » n'admet pas d'argument\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: l'option « %s » requiert un argument\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: l'option « --%s » est inconnue\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: l'option « %c%s » est inconnue\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: option illégale -- %c\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: option non valide -- %c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: l'option requiert un argument -- %c\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: l'option « -W %s » est ambiguë\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: l'option « -W %s » n'admet pas d'argument\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "mémoire épuisée"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr "programme subsidiaire « %s » n'a pu être invoqué"
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr "programme subsidiaire « %s » n'a pas été repéré"
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr "programme subsidiaire « %s » a échoué"
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr "programme subsidiaire « %s » a échoué (statut d'exécution %d)"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
@@ -709,15 +701,71 @@ msgstr ""
"\n"
"Temps d'exécution (secondes)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr " TOTAL :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr "temps dans %s: %ld.%06ld (%ld%%)\n"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d conflit par décalage/réduction"
#~ msgstr[1] "%d conflits par décalage/réduction"
#~ msgid "and"
#~ msgstr "et"
#~ msgid "conflicts: "
#~ msgstr "conflits: "
#~ msgid "State %d contains "
#~ msgstr "L'état %d contient "
#~ msgid "too many gotos (max %d)"
#~ msgstr "nombre trop grand de « goto » (Max %d)"
#~ msgid "too many symbols (tokens plus nonterminals); maximum %d"
#~ msgstr "trop de symboles (jeton plus non terminaux); maximum %d"
#~ msgid ": unexpected end of file in a comment\n"
#~ msgstr ": fin de fichier inattendue dans un commentaire\n"
#~ msgid ": unexpected end of file in a string\n"
#~ msgstr ": fin de fichier inattendue dans une chaîne\n"
#~ msgid ": unexpected end of file in a character\n"
#~ msgstr ": fin de fichier inattendue dans un caractère\n"
#~ msgid ": unexpected end of file in a braced code\n"
#~ msgstr ": fin de fichier inattendue dans du code entre accolades\n"
#~ msgid ": unexpected end of file in a prologue\n"
#~ msgstr ": fin de fichier inattendue dans un prologue\n"
#~ msgid "%s is invalid"
#~ msgstr "%s n'est pas valide"
#~ msgid "too many states (max %d)"
#~ msgstr "nombre trop grand d'états (max %d)"
#~ msgid "%s: no grammar file given\n"
#~ msgstr "%s: grammaire manquante\n"
#~ msgid "%s: extra arguments ignored after `%s'\n"
#~ msgstr "%s: arguments supplémentaires ignorés après « %s »\n"
#~ msgid "two @prec's in a row"
#~ msgstr "deux @prec de suite"
#~ msgid "%%dprec affects only GLR parsers"
#~ msgstr "%%dprec affecte seulement les analyseurs GLR"
#~ msgid "only one %%dprec allowed per rule"
#~ msgstr "seul un %%dprec est permis par règle"
#~ msgid "state_list_append (state = %d, symbol = %d (%s))\n"
#~ msgstr "state_list_append (état = %d, symbole = %d (%s))\n"
@@ -823,9 +871,6 @@ msgstr "temps dans %s: %ld.%06ld (%ld%%)\n"
#~ msgid "shift"
#~ msgstr "décalage"
#~ msgid "an error"
#~ msgstr "une erreur"
#~ msgid "%s contains "
#~ msgstr "%s contient "
@@ -903,9 +948,6 @@ msgstr "temps dans %s: %ld.%06ld (%ld%%)\n"
#~ msgid " Skipping to next %c"
#~ msgstr " Saut jusqu'au prochain %c"
#~ msgid "unterminated string at end of file"
#~ msgstr "chaîne de caractères non terminée en fin de fichier"
#~ msgid "unterminated string"
#~ msgstr "chaîne de caractère non terminée"
@@ -968,9 +1010,6 @@ msgstr "temps dans %s: %ld.%06ld (%ld%%)\n"
#~ msgid "two actions at end of one rule"
#~ msgstr "deux actions à la fin d'une même règle"
#~ msgid "invalid input: %s"
#~ msgstr "entrée non valide: %s"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "taille maximale de la table (%d) dépassée"
+258 -239
View File
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.34a\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\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,96 +16,99 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n==1 ? 0 : 1);\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Nepoznata sistemska gre¹ka"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "upozorenje:"
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "fatalna gre¹ka:"
#: src/conflicts.c:72
#: src/conflicts.c:75
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr "Konflikt u stanju %d izmeðu pravila %d i znaka %s razrije¹en kao %s.\n"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr "Konflikt u stanju %d izmeðu pravila %d i znaka %s razrije¹en kao %s.\n"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, fuzzy, c-format
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:402
#: src/conflicts.c:398
#, 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"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "i"
#: 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:435
msgid "conflicts: "
msgstr "konflikt:"
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d pomakni/reduciraj"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d reduviraj/reduciraj"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "Stanje %d sadr¾i"
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "stanje %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, 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:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d reduciraj/reduciraj konflikt"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "ne mogu otvoriti datoteku `%s'"
#: src/files.c:133
#: src/files.c:115
#, fuzzy
msgid "I/O error"
msgstr "gre¹ka"
#: src/files.c:118
msgid "cannot close file"
msgstr "ne mogu zatvoriti datoteku"
#: src/getargs.c:157
#: src/files.c:336
#, fuzzy, c-format
msgid "conflicting outputs to file %s"
msgstr "konfliktne asocijativne vrijednosti za %s i %s"
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Poku¹aj `%s --help' za vi¹e informacija.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison generira parsere za LALR(1) gramatike.\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Kori¹tenje: %s [OPCIJA]... DATOTEKA\n"
#: src/getargs.c:165
#: src/getargs.c:196
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 +116,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:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -125,7 +128,7 @@ msgstr ""
" -V, --version prika¾i verziju i izaði\n"
" -y, --yacc emuliraj POSIX yacc\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -145,7 +148,7 @@ msgstr ""
" -n, --no-parser generiraj samo tablice\n"
" -k, --token-table ukljuèi tablicu imena znakova\n"
#: src/getargs.c:190
#: src/getargs.c:221
#, fuzzy
msgid ""
"Output:\n"
@@ -164,7 +167,7 @@ msgstr ""
" -o, --output=DATOTEKA ispi¹i izlaz u DATOTEKU\n"
" -g, --graph takoðer proizvedi VCG opis automata\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -175,27 +178,27 @@ msgid ""
" `none' disable the report\n"
msgstr ""
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr "Izvjesti o bugovima na <[email protected]>.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr ""
#: src/getargs.c:232
#: src/getargs.c:266
#, 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:234
#: src/getargs.c:268
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"
@@ -204,68 +207,62 @@ msgstr ""
"kopiranja. NEMA\n"
"garancije; èak ni tvrdnje o ISPLATIVOSTI ili POGODNOSTI ZA NEKU SVRHU.\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Poku¹aj `%s --help' za vi¹e informacija.\n"
msgid "missing operand after `%s'"
msgstr ""
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: nije data datoteka sa gramatikom\n"
msgid "extra operand `%s'"
msgstr ""
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: dodatni argumenti se ignoriraju nakon `%s'\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "prazno"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "Gramatika"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
#, fuzzy
msgid "warning"
msgstr "upozorenje:"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "previ¹e goto-a (maksimalno %d)"
#: src/main.c:117
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr ""
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr ""
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " tip %d je %s\n"
#: src/print.c:162
#: src/print.c:164
#, fuzzy, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tpomakni i idi u stanje %d\n"
#: src/print.c:164
#: src/print.c:166
#, fuzzy, c-format
msgid "go to state %d\n"
msgstr " $ \tidu u stanje %d\n"
#: src/print.c:201
#: src/print.c:203
#, fuzzy
msgid "error (nonassociative)\n"
msgstr "%-4s\tgre¹ka (nonassociative)"
#: src/print.c:290
#: src/print.c:291
#, fuzzy, c-format
msgid "reduce using rule %d (%s)"
msgstr "$default\treduciraj koristeæi pravilo %d (%s)"
@@ -283,133 +280,114 @@ msgstr ""
msgid "state %d"
msgstr "stanje %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Zavr¹ni znakovi, sa pravilima gdje se pojavljuju"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "Nezavr¹ni znakovi, sa pravilima gdje se pojavljuju"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr "s lijeva:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr "s desna:"
#: src/print.c:552
#: src/print.c:554
#, fuzzy
msgid "Rules never reduced"
msgstr "%d pravilo nije nikad reducirano\n"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "vi¹estruke %s deklaracije"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr ""
#: src/reader.c:239
#: src/reader.c:236
#, c-format
msgid "rule given for %s, which is a token"
msgstr "pravilo dato za %s, a to je znak"
#: src/reader.c:264
#, c-format
msgid "type clash (`%s' `%s') on default action"
#: src/reader.c:265
#, fuzzy, c-format
msgid "type clash on default action: <%s> != <%s>"
msgstr "sudar tipova (`%s' `%s') na deaultnoj akciji"
#: src/reader.c:272
#: src/reader.c:271
msgid "empty rule for typed nonterminal, and no action"
msgstr "prazno pravilo za nezavr¹ni znak, i nema akcije"
#: src/reader.c:343
msgid "two @prec's in a row"
msgstr "dva @prec's u retku"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr ""
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr ""
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgid "%s must be followed by positive number"
msgstr ""
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "nema pravila u ulaznoj gramatici"
#: src/reader.c:545
#, 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:239
#: src/reduce.c:241
#, fuzzy
msgid "useless rule"
msgstr "%d beskorisno pravilo"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d beskorisan nezavr¹ni znak"
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "Beskorisni nezavr¹ni znakovi:"
#: src/reduce.c:349
#: src/reduce.c:350
#, fuzzy
msgid "Useless nonterminals"
msgstr "Beskorisni nezavr¹ni znakovi:"
#: src/reduce.c:362
#: src/reduce.c:363
#, fuzzy
msgid "Terminals which are not used"
msgstr "Zavr¹ni znakovi koji nisu kori¹teni:"
#: src/reduce.c:371
#: src/reduce.c:372
#, fuzzy
msgid "Useless rules"
msgstr "Beskorisna pravila:"
#: src/reduce.c:387
#: src/reduce.c:388
#, 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:395
#: src/reduce.c:396
#, 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:401
#: src/reduce.c:402
msgid " and "
msgstr " i"
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -421,81 +399,70 @@ msgstr[1] "%d beskorisnih pravila"
msgid "start symbol %s does not derive any sentence"
msgstr "Poèetni simbol %s ne daje niti jednu reèenicu"
#: scan-gram.l:202
#, c-format
msgid ": invalid character: `%c'\n"
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: scan-gram.l:246
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:274 scan-gram.l:412
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:311 scan-gram.l:383
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:332
#: src/scan-gram.l:216
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgid "invalid directive: %s"
msgstr "nedozvoljeni ulaz: %s"
#: scan-gram.l:353
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid "integer out of range: %s"
msgstr ""
#: src/scan-gram.l:281
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgid "invalid character: %s"
msgstr "nepoznati znak: %s"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, fuzzy, c-format
msgid "invalid escape sequence: %s"
msgstr "nedozvoljeni ulaz: %s"
#: src/scan-gram.l:439
#, fuzzy, c-format
msgid "unrecognized escape sequence: %s"
msgstr "neprepoznati: %s"
#: scan-gram.l:473
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "neoèekivan kraj datoteke"
#: src/scan-gram.l:524
#, c-format
msgid "missing `{' in `%s'"
msgstr ""
#: scan-gram.l:502
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "neoèekivan kraj datoteke"
#: scan-gram.l:560
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ od `%s' nema deklarirani tip"
#: scan-gram.l:577 scan-gram.l:664
#, fuzzy, c-format
msgid "invalid value: %s%d"
msgstr "nedozvoljena @ vrijednost"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d od `%s' nema deklarirani tip"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#, c-format
msgid "%s is invalid"
msgstr "%s je nedozvoljeno"
#: src/scan-gram.l:820 src/scan-gram.l:887
#, fuzzy, c-format
msgid "invalid value: %s"
msgstr "nedozvoljena $ vrijednost"
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "previ¹e stanja (maks %d)"
#: src/scan-gram.l:978
#, fuzzy, c-format
msgid "missing `%s' at end of file"
msgstr "nezavr¹eni znakovni niz na kraju datoteke"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "nedozvoljena $ vrijednost"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "ponovna deklaracija za %s"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, fuzzy, c-format
msgid "%s redeclaration for %s"
msgstr "ponovna deklaracija za %s"
@@ -505,224 +472,258 @@ msgstr "ponovna deklaracija za %s"
msgid "redefining precedence of %s"
msgstr "ponovno definiran prethodnik od %s"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "simbol %s ponovo definiran"
#: src/symtab.c:180
#: src/symtab.c:179
#, fuzzy, c-format
msgid "redefining user token number of %s"
msgstr "ponovno definiran prethodnik od %s"
#: src/symtab.c:225
#: src/symtab.c:206
#, 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
#: src/symtab.c:231
#, 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
#: src/symtab.c:234
#, 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
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "konflikt u prethodnici za %s and %s"
#: src/symtab.c:293
#: src/symtab.c:282
#, fuzzy, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "konfliktne asocijativne vrijednosti za %s i %s"
#: src/symtab.c:363
#: src/symtab.c:367
#, 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
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "poèetni simbol %s nije definiran"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "poèetni simbol %s je znak"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, fuzzy, c-format
msgid "invalid argument %s for %s"
msgstr "nedozvoljeni ulaz: %s"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr ""
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: opcija `%s' je nejednoznaèna\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: opcija `--%s' ne dopu¹ta argument\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, 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:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: opcija `%s' zahtijeva argument\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: neprepoznata opcija `--%s'\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: neprepoznata opcija `%c%s'\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: nedozvoljena opcija -- %c\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: nedozvoljena opcija -- %c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: opcija zahtijeva argument -- %c\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: opcija `-W %s' je nejednoznaèna\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, 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:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "iscrpljeni memorijski resursi"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr ""
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr ""
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr ""
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr ""
#: 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 ""
#~ msgid "too many states (max %d)"
#~ msgstr "previ¹e stanja (maks %d)"
#~ msgid "reduce"
#~ msgstr "reduciraj"
#~ msgid "shift"
#~ msgstr "pomakni"
#~ msgid "an error"
#~ msgstr "gre¹ka"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d pomakni/reduciraj konflikat"
#~ msgstr[1] "%d pomakni/reduciraj konflikata"
#~ msgid "and"
#~ msgstr "i"
#~ msgid "State %d contains "
#~ msgstr "Stanje %d sadr¾i"
#~ msgid "conflicts: "
#~ msgstr "konflikt:"
#~ msgid "%s contains "
#~ msgstr "%s sadr¾i"
@@ -746,12 +747,24 @@ msgstr ""
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' vi¹e nije podr¾ano"
#~ msgid "%s: no grammar file given\n"
#~ msgstr "%s: nije data datoteka sa gramatikom\n"
#~ msgid "%s: extra arguments ignored after `%s'\n"
#~ msgstr "%s: dodatni argumenti se ignoriraju nakon `%s'\n"
#~ msgid "too many gotos (max %d)"
#~ msgstr "previ¹e goto-a (maksimalno %d)"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "neoèekivan `/' naðen i zanemaren"
#~ 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"
@@ -809,12 +822,15 @@ msgstr ""
#~ msgid " Skipping to next %c"
#~ msgstr " Preskaèem na slijedeæi %c"
#~ msgid "unterminated string at end of file"
#~ msgstr "nezavr¹eni znakovni niz na kraju datoteke"
#~ msgid "unterminated string"
#~ msgstr "nezavr¹eni znakovni niz"
#~ msgid "invalid @ value"
#~ msgstr "nedozvoljena @ vrijednost"
#~ msgid "%s is invalid"
#~ msgstr "%s je nedozvoljeno"
#~ msgid "unterminated `%{' definition"
#~ msgstr "nezavr¹ena `%{' definicija"
@@ -854,9 +870,6 @@ msgstr ""
#~ msgid "no input grammar"
#~ msgstr "nema ulazne gramatike"
#~ msgid "unknown character: %s"
#~ msgstr "nepoznati znak: %s"
#~ msgid "unterminated %guard clause"
#~ msgstr "nezavr¹ena %guard klauzula"
@@ -869,8 +882,14 @@ msgstr ""
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "prethodnom pravilu nedostaje zavr¹etak `;'"
#~ msgid "two @prec's in a row"
#~ msgstr "dva @prec's u retku"
#~ 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 "too many symbols (tokens plus nonterminals); maximum %d"
#~ msgstr "previ¹e simbola (znakovi plus nezavr¹ni znakovi); maksimalno %d"
+721
View File
@@ -0,0 +1,721 @@
# bison 1.75b (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.75b\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\n"
"PO-Revision-Date: 2002-11-22 12:24GMT+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:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Kesalahan sistem tidak dikenal"
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "peringatan: "
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "kesalahan fatal: "
#: src/conflicts.c:75
#, 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:83
#, 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:90
#, 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:398
#, c-format
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d geser/kurangi"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d kurangi/kurangi"
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "state %d"
#: src/conflicts.c:498
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "mengharapkan %d shift/reduce konflik"
msgstr[1] "mengharapkan %d shift/reduce konflik"
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d geser/kurangi konflik"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "tidak dapat membuka file `%s'"
#: src/files.c:115
msgid "I/O error"
msgstr "Kesalahan I/O"
#: src/files.c:118
msgid "cannot close file"
msgstr "tidak dapat menutup file"
#: src/files.c:336
#, c-format
msgid "conflicting outputs to file %s"
msgstr ""
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison generates parsers for LALR(1) grammars.\n"
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Penggunaan: %s [OPTION]... FILE\n"
#: src/getargs.c:196
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:202
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:209
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:221
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:232
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:243
msgid "Report bugs to <[email protected]>.\n"
msgstr "Laporkan kesalahan ke <[email protected]>.\n"
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Written by Robert Corbett and Richard Stallman.\n"
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
#: src/getargs.c:268
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:424
#, c-format
msgid "missing operand after `%s'"
msgstr "operand hilang setelah `%s'"
#: src/getargs.c:426
#, c-format
msgid "extra operand `%s'"
msgstr "operand ekstra `%s'"
#: src/gram.c:142
msgid "empty"
msgstr "kosong"
#: src/gram.c:236
msgid "Grammar"
msgstr "Grammar"
#: src/gram.c:324 src/reduce.c:393
msgid "warning"
msgstr "peringatan"
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr "aturan tidak pernah dikurangi karena konflik"
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr "POSIX melarang deklarasi dalam grammar"
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " tipe %d adalah %s\n"
#: src/print.c:164
#, c-format
msgid "shift, and go to state %d\n"
msgstr "geser, dan ke state %d\n"
#: src/print.c:166
#, c-format
msgid "go to state %d\n"
msgstr "ke state %d\n"
#: src/print.c:203
msgid "error (nonassociative)\n"
msgstr "kesalahan(nonasosiatif)\n"
#: src/print.c:291
#, 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:455
msgid "Terminals, with rules where they appear"
msgstr "Terminal, dengan aturan tempat mereka muncul"
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "Nonterminal, dengan aturan tempat mereka muncul"
#: src/print.c:511
msgid " on left:"
msgstr " di kiri:"
#: src/print.c:526
msgid " on right:"
msgstr " di kanan:"
#: src/print.c:554
msgid "Rules never reduced"
msgstr "Aturan tidak pernah dikurangi"
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "deklarasi ganda %s"
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr "tipe hasil bentrok pada fungsi merge %s: <%s> != <%s>"
#: src/reader.c:236
#, c-format
msgid "rule given for %s, which is a token"
msgstr "aturan diberikan untuk %s, yang merupakan sebuah token"
#: src/reader.c:265
#, c-format
msgid "type clash on default action: <%s> != <%s>"
msgstr "bentrokan tipe pada aksi baku: <%s> != <%s>"
#: src/reader.c:271
msgid "empty rule for typed nonterminal, and no action"
msgstr "aturan kosong untuk nonterminal typed, dan tidak ada aksi"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr "hanya satu %s yang dibolehkan per aturan"
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr "%s hanya mempengaruhi parser GLR"
#: src/reader.c:353
#, c-format
msgid "%s must be followed by positive number"
msgstr "%s harus diikuti angka positif"
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "tidak ada aturan dalam grammar input"
#: src/reduce.c:241
msgid "useless rule"
msgstr "aturan tidak berguna"
#: src/reduce.c:302
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "nonterminal tidak berguna"
#: src/reduce.c:350
msgid "Useless nonterminals"
msgstr "Nonterminal tidak berguna"
#: src/reduce.c:363
msgid "Terminals which are not used"
msgstr "Terminal yang tidak digunakan"
#: src/reduce.c:372
msgid "Useless rules"
msgstr "Useless rules"
#: src/reduce.c:388
#, 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:396
#, 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:402
msgid " and "
msgstr " dan "
#: src/reduce.c:405
#, 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"
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: src/scan-gram.l:216
#, c-format
msgid "invalid directive: %s"
msgstr "direktif tidak valid: %s"
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid "integer out of range: %s"
msgstr "integer ke luar batas: %s"
#: src/scan-gram.l:281
#, c-format
msgid "invalid character: %s"
msgstr "karakter tidak valid: %s"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, c-format
msgid "invalid escape sequence: %s"
msgstr "urutan escape tidak valid: %s"
#: src/scan-gram.l:439
#, c-format
msgid "unrecognized escape sequence: %s"
msgstr "urutan escape tidak dikenal: %s"
#: src/scan-gram.l:524
#, fuzzy, c-format
msgid "missing `{' in `%s'"
msgstr "operand hilang setelah `%s'"
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ dari `%s' tidak memiliki tipe yang terdeklarasi"
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d dari `%s' tidak memiliki tipe terdeklarasi"
#: src/scan-gram.l:820 src/scan-gram.l:887
#, c-format
msgid "invalid value: %s"
msgstr "nilai tidak valid: %s"
#: src/scan-gram.l:978
#, c-format
msgid "missing `%s' at end of file"
msgstr "`%s' hilang di akhir file"
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "nilai $ tidak valid"
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "redeklarasi tipe untuk %s"
#: src/symtab.c:101 src/symtab.c:119
#, 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:156
#, c-format
msgid "symbol %s redefined"
msgstr "simbol %s didefinisikan ulang"
#: src/symtab.c:179
#, c-format
msgid "redefining user token number of %s"
msgstr "mendefinisikan ulang nomor token user %s"
#: src/symtab.c:206
#, 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:231
#, 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:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "simbol `%s' diberikan lebih dari satu string literal"
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "presenden konflik untuk %s dan %s"
#: src/symtab.c:282
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "asosiatif konflik untuk %s (%s) dan %s (%s)"
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "token %s dan %s keduanya memiliki angka %d"
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "simbol awal %s tidak didefinisikan"
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "simbol awal %s adalah sebuah token"
#: lib/argmatch.c:129
#, c-format
msgid "invalid argument %s for %s"
msgstr "argument %s tidak valid untuk %s"
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr "argumen %s ambigu untuk %s"
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr "Argumen valid adalah:"
#: lib/bitset_stats.c:178
#, c-format
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u freed (%.2f%%).\n"
#: lib/bitset_stats.c:181
#, c-format
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u cached (%.2f%%)\n"
#: lib/bitset_stats.c:184
#, c-format
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u cached (%.2f%%)\n"
#: lib/bitset_stats.c:187
#, c-format
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u cached (%.2f%%)\n"
#: lib/bitset_stats.c:191
#, c-format
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr "hitung log histogram\n"
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr "ukuran log histogram\n"
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr "kepadatan histogram\n"
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
"Statistik bitset:\n"
"\n"
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %u\n"
msgstr "Run terakumulasi = %u\n"
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr "Tidak dapat membaca file stat."
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr "Ukuran file stat buruk.\n"
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr "Tidak dapat menulis file stat."
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr "Tidak dapat membuka file stat untuk ditulisi."
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: option `%s' ambigu\n"
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: option `--%s' tidak membolehkan sebuah argumen\n"
#: lib/getopt.c:746 lib/getopt.c:751
#, 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:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: option `%s' membutuhkan sebuah argumen\n"
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: option tidak dikenal `--%s'\n"
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: option tidak dikenal `%c%s'\n"
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: option ilegal -- %c\n"
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: option tidak valid -- %c\n"
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: option membutuhkan sebuah argumen -- %c\n"
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: option `-W %s' ambigu\n"
#: lib/getopt.c:1056 lib/getopt.c:1068
#, 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:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "memori habis"
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr "program subsider `%s' tidak dapat dipanggil"
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr "program subsider `%s' tidak ditemukan"
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr "program subsider `%s' gagal"
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr "program subsider `%s' gagal (status kegagalan %d)"
#: 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"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d geser/kurangi konflik"
#~ msgstr[1] "%d geser/kurangi konflik"
#~ msgid "and"
#~ msgstr "dan"
#~ msgid "conflicts: "
#~ msgstr "konflik: "
#~ msgid "State %d contains "
#~ msgstr "State %d berisi "
+327 -431
View File
File diff suppressed because it is too large Load Diff
+255 -238
View File
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.30f\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"PO-Revision-Date: 2001-12-10 15:59+0900\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\n"
"PO-Revision-Date: 2002-10-29 01:00-05:00\n"
"Last-Translator: Daisuke Yamashita <[email protected]>\n"
"Language-Team: Japanese <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -14,93 +14,98 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "不明なシステムエラー"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "警告: "
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "致命的エラー: "
#: src/conflicts.c:72
#: src/conflicts.c:75
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d シフト/還元衝突"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "および"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d 還元/還元衝突"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "衝突: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d シフト/還元"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d 還元/還元"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "状態 %d が含むのは "
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "状態 %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "本来 %d 個のシフト/還元衝突であるはずです\n"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d 還元/還元衝突"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "ファイル `%s' を開けません"
#: src/files.c:133
#: src/files.c:115
#, fuzzy
msgid "I/O error"
msgstr "エラー"
#: src/files.c:118
msgid "cannot close file"
msgstr "ファイルを閉じることができません"
#: src/getargs.c:157
#: src/files.c:336
#, fuzzy, c-format
msgid "conflicting outputs to file %s"
msgstr "非結合値 %s と %s で競合が生じています"
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "`%s --help' で詳細情報を参照してください\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison は LALR(1) 文法の構文解析器を生成します。\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "使い方: %s [オプション]... ファイル\n"
#: src/getargs.c:165
#: src/getargs.c:196
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"
@@ -108,7 +113,7 @@ msgstr ""
"ロングオプションで必須の引数が示されていれば、同じ意味のショートオプション\n"
"でも同様に必須の引数となります。必須でない選択的引数でも同様です。\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -120,7 +125,7 @@ msgstr ""
" -V, --version バージョン情報を表示して終了する\n"
" -y, --yacc POSIX yacc をエミュレイトする\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -140,7 +145,7 @@ msgstr ""
" -n, --no-parser テーブルのみを生成する\n"
" -k, --token-table トークン名のテーブルを含める\n"
#: src/getargs.c:190
#: src/getargs.c:221
#, fuzzy
msgid ""
"Output:\n"
@@ -159,7 +164,7 @@ msgstr ""
" -o, --output=FILE 出力先を FILE とする\n"
" -g, --graph オートマトンの VCG 記述子も作成する\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -170,26 +175,26 @@ msgid ""
" `none' disable the report\n"
msgstr ""
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr "バグレポートは <[email protected]> まで。\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr ""
#: src/getargs.c:232
#: src/getargs.c:266
#, 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:234
#: src/getargs.c:268
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"
@@ -200,69 +205,63 @@ msgstr ""
"これはフリーソフトウェアです -- 複製についての条件はソースを見ましょう。\n"
"一切の保証はありません -- 商業性や目的適合性についての保証すらありません。\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "`%s --help' で詳細情報を参照してください\n"
msgid "missing operand after `%s'"
msgstr ""
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: 文法ファイルが指定されていません\n"
msgid "extra operand `%s'"
msgstr ""
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: `%s' の後ろの余分な引数は無視されました\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "空"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "文法"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
#, fuzzy
msgid "warning"
msgstr "警告: "
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "goto の数が多すぎます (最大 %d)"
#: src/main.c:117
#: src/main.c:124
#, fuzzy
msgid "rule never reduced because of conflicts"
msgstr " 1 還元/還元衝突"
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr ""
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " タイプ %d は %s です\n"
#: src/print.c:162
#: src/print.c:164
#, fuzzy, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tシフト、および状態 %d へ\n"
#: src/print.c:164
#: src/print.c:166
#, fuzzy, c-format
msgid "go to state %d\n"
msgstr " $ \t状態 %d へ\n"
#: src/print.c:201
#: src/print.c:203
#, fuzzy
msgid "error (nonassociative)\n"
msgstr "%-4s\tエラー (非結合)"
#: src/print.c:290
#: src/print.c:291
#, fuzzy, c-format
msgid "reduce using rule %d (%s)"
msgstr "$default\t規則 %d を利用して還元 (%s)"
@@ -280,131 +279,112 @@ msgstr ""
msgid "state %d"
msgstr "状態 %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "出現位置の規則による終端"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "出現位置の規則による非終端"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr " 左辺:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " 右辺:"
#: src/print.c:552
#: src/print.c:554
#, fuzzy
msgid "Rules never reduced"
msgstr "%d 個の規則は決して還元されません\n"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "%s が複数個宣言されました"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr ""
#: src/reader.c:239
#: src/reader.c:236
#, c-format
msgid "rule given for %s, which is a token"
msgstr "%s に規則が与えられ、それはトークンとなります"
#: src/reader.c:264
#, c-format
msgid "type clash (`%s' `%s') on default action"
#: src/reader.c:265
#, fuzzy, c-format
msgid "type clash on default action: <%s> != <%s>"
msgstr "初期状態の動作では型 (`%s' `%s') が衝突します"
#: src/reader.c:272
#: src/reader.c:271
msgid "empty rule for typed nonterminal, and no action"
msgstr "空の型付き非終端アイテム用規則であり、動作が起りません"
#: src/reader.c:343
msgid "two @prec's in a row"
msgstr "@prec のもの二つが同列になっています"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr ""
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr ""
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgid "%s must be followed by positive number"
msgstr ""
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "入力した文法に規則が定義されていません"
#: src/reader.c:545
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "シンボルが多すぎます (トークン + 非終端アイテム) -- 最大 %d"
#: src/reduce.c:239
#: src/reduce.c:241
#, fuzzy
msgid "useless rule"
msgstr "%d 個の無意味な規則"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d 個の無意味な非終端子"
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "無意味な非終端子:"
#: src/reduce.c:349
#: src/reduce.c:350
#, fuzzy
msgid "Useless nonterminals"
msgstr "無意味な非終端子:"
#: src/reduce.c:362
#: src/reduce.c:363
#, fuzzy
msgid "Terminals which are not used"
msgstr "利用されない終端子:"
#: src/reduce.c:371
#: src/reduce.c:372
#, fuzzy
msgid "Useless rules"
msgstr "無意味な規則:"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d 個の規則は決して還元されません\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d 個の無意味な非終端子"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr "および"
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -415,81 +395,70 @@ msgstr[0] "%d
msgid "start symbol %s does not derive any sentence"
msgstr "開始シンボル %s はどの文にも由来しません"
#: scan-gram.l:202
#, c-format
msgid ": invalid character: `%c'\n"
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: scan-gram.l:246
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:274 scan-gram.l:412
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:311 scan-gram.l:383
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:332
#: src/scan-gram.l:216
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgid "invalid directive: %s"
msgstr "不適切な入力: %s"
#: scan-gram.l:353
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid "integer out of range: %s"
msgstr ""
#: src/scan-gram.l:281
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgid "invalid character: %s"
msgstr "未知の文字: %s"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, fuzzy, c-format
msgid "invalid escape sequence: %s"
msgstr "不適切な入力: %s"
#: src/scan-gram.l:439
#, fuzzy, c-format
msgid "unrecognized escape sequence: %s"
msgstr "認識できない: %s"
#: scan-gram.l:473
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "予期しないファイルの終端です"
#: src/scan-gram.l:524
#, c-format
msgid "missing `{' in `%s'"
msgstr ""
#: scan-gram.l:502
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "予期しないファイルの終端です"
#: scan-gram.l:560
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "`%s' の $$ に宣言のない型があります"
#: scan-gram.l:577 scan-gram.l:664
#, fuzzy, c-format
msgid "invalid value: %s%d"
msgstr "不適切な $ の値"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d 個の `%s' が宣言された型を持っていません"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#, c-format
msgid "%s is invalid"
msgstr "%s は不適切です"
#: src/scan-gram.l:820 src/scan-gram.l:887
#, fuzzy, c-format
msgid "invalid value: %s"
msgstr "不適切な $ の値"
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "状態が多すぎます (最大 %d)"
#: src/scan-gram.l:978
#, fuzzy, c-format
msgid "missing `%s' at end of file"
msgstr "閉じられていない文字列がファイル末尾にあります"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "不適切な $ の値"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "%s の型が再定義されました"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, fuzzy, c-format
msgid "%s redeclaration for %s"
msgstr "%s の型が再定義されました"
@@ -499,226 +468,259 @@ msgstr "%s
msgid "redefining precedence of %s"
msgstr "%s に先行した再定義です"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "シンボル %s が再定義されました"
#: src/symtab.c:180
#: src/symtab.c:179
#, fuzzy, c-format
msgid "redefining user token number of %s"
msgstr "%s に先行した再定義です"
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"シンボル %s が使われていますが、トークンとして定義されておらず、規則を持ちま"
"せん"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "シンボル `%s' はリテラル文字列として複数回使われました"
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "シンボル `%s' は複数のリテラル文字列が与えられました"
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "先行している %s と %s で競合が生じています"
#: src/symtab.c:293
#: src/symtab.c:282
#, fuzzy, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "非結合値 %s と %s で競合が生じています"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "トークン %s と %s の双方が番号 %d に割り当てられました"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "開始シンボル %s は定義されていません"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "開始シンボル %s はトークンです"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, fuzzy, c-format
msgid "invalid argument %s for %s"
msgstr "不適切な入力: %s"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr ""
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: オプション `%s' は曖昧です\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: オプション `--%s' は引数を許しません\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: オプション `%c%s' は引数を許しません\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: オプション `%s' は引数を要求します\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: 認識できないオプション `--%s' です\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: 認識できないオプション `%c%s' です\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: 定格外のオプション -- %c\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: 不適切なオプション -- %c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: オプションは引数を要求します -- %c\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: オプション `-W %s' は曖昧です\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: オプション `-W %s' は引数を許しません\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "メモリを使い果たしました"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr ""
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr ""
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr ""
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr ""
#: 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 ""
#~ msgid "too many states (max %d)"
#~ msgstr "状態が多すぎます (最大 %d)"
#~ msgid "reduce"
#~ msgstr "還元"
#~ msgid "shift"
#~ msgstr "シフト"
#~ msgid "an error"
#~ msgstr "エラー"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d シフト/還元衝突"
#~ msgid "and"
#~ msgstr "および"
#~ msgid "State %d contains "
#~ msgstr "状態 %d が含むのは "
#~ msgid "conflicts: "
#~ msgstr "衝突: "
#~ msgid "%s contains "
#~ msgstr "%s の中身は"
@@ -742,12 +744,24 @@ msgstr ""
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' は最早サポートされません"
#~ msgid "%s: no grammar file given\n"
#~ msgstr "%s: 文法ファイルが指定されていません\n"
#~ msgid "%s: extra arguments ignored after `%s'\n"
#~ msgstr "%s: `%s' の後ろの余分な引数は無視されました\n"
#~ msgid "too many gotos (max %d)"
#~ msgstr "goto の数が多すぎます (最大 %d)"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "予期しない `/' が見つかり、無視されました"
#~ msgid "unterminated comment"
#~ msgstr "閉じていないコメントです"
#~ msgid "unexpected end of file"
#~ msgstr "予期しないファイルの終端です"
#~ msgid "unescaped newline in constant"
#~ msgstr "定数の中にエスケープされていない改行があります"
@@ -805,12 +819,12 @@ msgstr ""
#~ msgid " Skipping to next %c"
#~ msgstr " 次の %c にスキップ"
#~ msgid "unterminated string at end of file"
#~ msgstr "閉じられていない文字列がファイル末尾にあります"
#~ msgid "unterminated string"
#~ msgstr "閉じられていない文字列"
#~ msgid "%s is invalid"
#~ msgstr "%s は不適切です"
#~ msgid "unterminated `%{' definition"
#~ msgstr "`%{' 定義 が閉じられていません"
@@ -850,9 +864,6 @@ msgstr ""
#~ msgid "no input grammar"
#~ msgstr "文法の入力が無い"
#~ msgid "unknown character: %s"
#~ msgstr "未知の文字: %s"
#~ msgid "unterminated %guard clause"
#~ msgstr "%guard 節が閉じられていません"
@@ -862,12 +873,18 @@ msgstr ""
#~ msgid "grammar starts with vertical bar"
#~ msgstr "文法は縦棒 (|) で始めます"
#~ msgid "two @prec's in a row"
#~ msgstr "@prec のもの二つが同列になっています"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard がありますが %%semantic_parser が指定されていません"
#~ msgid "two actions at end of one rule"
#~ msgstr "一つの規則の終りに二つの動作を指定しています"
#~ msgid "too many symbols (tokens plus nonterminals); maximum %d"
#~ msgstr "シンボルが多すぎます (トークン + 非終端アイテム) -- 最大 %d"
#~ msgid ""
#~ "\n"
#~ "\n"
+310 -473
View File
File diff suppressed because it is too large Load Diff
+236 -328
View File
@@ -4,9 +4,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49b\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"PO-Revision-Date: 2002-08-28 00:20-0300\n"
"Project-Id-Version: bison 1.75b\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\n"
"PO-Revision-Date: 2002-12-14 02:10-0300\n"
"Last-Translator: Alexandre Folle de Menezes <[email protected]>\n"
"Language-Team: Brazilian Portuguese <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -14,96 +14,98 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Erro de sistema desconhecido"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "aviso: "
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "erro fatal: "
#: src/conflicts.c:72
#: src/conflicts.c:75
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr " Conflito entre a regra %d e a token %s resolvido como `shift`."
#: src/conflicts.c:80
#: src/conflicts.c:83
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr " Conflito entre a regra %d e a token %s resolvido como `reduce`."
#: src/conflicts.c:87
#: src/conflicts.c:90
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr " Conflito entre a regra %d e a token %s resolvido como um erro."
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d conflito de deslocamento/redução"
msgstr[1] "%d conflitos de deslocamento/redução"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "e"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d conflito de redução/redução"
msgstr[1] "%d conflitos de redução/redução"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "conflitos: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d deslocamento/redução"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d redução/redução"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "O estado %d contém "
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "estado %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "esperado: %d conflito de deslocamento/redução"
msgstr[1] "esperados: %d conflitos de deslocamento/redução"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d conflito de redução/redução"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "impossível abrir o arquivo `%s'"
#: src/files.c:133
#: src/files.c:115
msgid "I/O error"
msgstr "Erro de E/S"
#: src/files.c:118
msgid "cannot close file"
msgstr "impossível fechar o arquivo"
#: src/getargs.c:157
#: src/files.c:336
#, c-format
msgid "conflicting outputs to file %s"
msgstr ""
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "tente `%s --help' para mais informações.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison gera analisadores para gramáticas LALR(1).\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Uso: %s [OPCAO]... ARQUIVO\n"
#: src/getargs.c:165
#: src/getargs.c:196
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"
@@ -112,7 +114,7 @@ msgstr ""
"obrigatório para a opção curta equivalente também. Igualmente para os\n"
"argumentos opcionais.\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -124,7 +126,7 @@ msgstr ""
" -V, --version mostra informações de versão e sai\n"
" -y, --yacc emula o yacc POSIX\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -144,7 +146,7 @@ msgstr ""
" -n, --no-parser apenas gera as tabelas\n"
" --k, --token-table inclui uma tabela de nomes de tokens\n"
#: src/getargs.c:190
#: src/getargs.c:221
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -163,7 +165,7 @@ msgstr ""
" -o, --output=ARQUIVO armazena a saída em ARQUIVO\n"
" -g, --graph também produz uma descrição em VCG do autômato\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -182,25 +184,25 @@ msgstr ""
" `all' inclui todas as informações acima\n"
" `none' desabilita o relatório\n"
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr "Informe os erros para <[email protected]>.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Escrito por Robert Corbett e Richard Stallman.\n"
#: src/getargs.c:232
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright © %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
#: src/getargs.c:268
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"
@@ -211,66 +213,60 @@ msgstr ""
"ou\n"
"ADEQUAÇÃO À QUALQUER FINALIDADE PARTICULAR.\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "tente `%s --help' para mais informações.\n"
msgid "missing operand after `%s'"
msgstr "falta operando depois de `%s'"
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: nenhum arquivo de gramática foi especificado\n"
msgid "extra operand `%s'"
msgstr "operando `%s' sobrando"
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: os argumentos extra ignorados depois de '%s'\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "vazio"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "Gramática"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
msgid "warning"
msgstr "aviso"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "muitos gotos (máximo %d)"
#: src/main.c:117
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr "regra não reduzida por causa de conflitos"
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr "o POSIX proíbe declarações na gramática"
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " tipo %d é %s\n"
#: src/print.c:162
#: src/print.c:164
#, c-format
msgid "shift, and go to state %d\n"
msgstr "deslocar, e ir ao estado %d\n"
#: src/print.c:164
#: src/print.c:166
#, c-format
msgid "go to state %d\n"
msgstr "ir ao estado %d\n"
#: src/print.c:201
#: src/print.c:203
msgid "error (nonassociative)\n"
msgstr "erro (não associativo)\n"
#: src/print.c:290
#: src/print.c:291
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "reduzir usando a regra %d (%s)"
@@ -288,127 +284,109 @@ msgstr "$padr
msgid "state %d"
msgstr "estado %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Terminais, com as regras onde eles aparecem"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "Não-terminais com as regras onde eles aparecem"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr " à esquerda:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " à direita:"
#: src/print.c:552
#: src/print.c:554
msgid "Rules never reduced"
msgstr "Regras nunca reduzidas"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "declarações de %s múltiplas"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr "tipo de resultado conflita na fução de mescla %s: `%s' vs. `%s'"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr "tipo de resultado conflita na fução de mescla %s: <%s> != <%s>"
#: src/reader.c:239
#: src/reader.c:236
#, 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:265
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "os tipos (`%s' `%s') não concordam na ação padrão"
msgid "type clash on default action: <%s> != <%s>"
msgstr "conflito de tipos na ação padrão: <%s> != <%s>"
#: src/reader.c:272
#: src/reader.c:271
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
msgid "two @prec's in a row"
msgstr "dois @prec em uma linha"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr "apenas um %s é permitido por regra"
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr "%s afeta apenas analisadores GLR"
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr "%%dprec afeta apenas analisadores GLR"
msgid "%s must be followed by positive number"
msgstr "%s deve ser seguido por um número positivo"
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr "%%dprec deve ser seguido por um número positivo"
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr "apenas um %%dprec é permitido por regra"
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr "%%merge afeta apenas analisadores GLR"
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr "apenas um %%merge é permitido por regra"
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "não há regras na gramática de entrada"
#: src/reader.c:545
#, 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
#: src/reduce.c:241
msgid "useless rule"
msgstr "regra inútil"
#: src/reduce.c:302
msgid "useless nonterminal"
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "não-terminal inútil"
#: src/reduce.c:349
#: src/reduce.c:350
msgid "Useless nonterminals"
msgstr "Não-terminais inúteis"
#: src/reduce.c:362
#: src/reduce.c:363
msgid "Terminals which are not used"
msgstr "Terminais que não foram usados"
#: src/reduce.c:371
#: src/reduce.c:372
msgid "Useless rules"
msgstr "Regras inúteis"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d regra que nunca foi reduzida\n"
msgstr[1] "%d regras que nunca foram reduzidas\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d não-terminal inútil"
msgstr[1] "%d não-terminal inútil"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr " e "
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -420,76 +398,70 @@ msgstr[1] "%d regras in
msgid "start symbol %s does not derive any sentence"
msgstr "símbolo de início %s não deriva nenhuma sentença"
#: scan-gram.l:202
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: src/scan-gram.l:216
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ": caractere inválido: `%c'\n"
msgid "invalid directive: %s"
msgstr "diretiva inválida: %s"
#: scan-gram.l:246
msgid ": unexpected end of file in a comment\n"
msgstr ": fim de arquivo inesperado em um comentário\n"
#: scan-gram.l:274 scan-gram.l:412
msgid ": unexpected end of file in a string\n"
msgstr ": fim de arquivo inesperado em uma string\n"
#: scan-gram.l:311 scan-gram.l:383
msgid ": unexpected end of file in a character\n"
msgstr ": fim de arquivo inesperado em um caractere\n"
#: scan-gram.l:332
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid ": invalid escape: %s\n"
msgstr ": escape inválido: %s\n"
msgid "integer out of range: %s"
msgstr "inteiro fora de faixa: %s"
#: scan-gram.l:353
#: src/scan-gram.l:281
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr ": escape não reconhecido: %s\n"
msgid "invalid character: %s"
msgstr "caractere inválido: %s"
#: scan-gram.l:473
msgid ": unexpected end of file in a braced code\n"
msgstr ": fim de arquivo inesperado em código entre chaves\n"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, c-format
msgid "invalid escape sequence: %s"
msgstr "seqüência de escape inválida: %s"
#: scan-gram.l:502
msgid ": unexpected end of file in a prologue\n"
msgstr ": fim de arquivo inesperado em um prólogo\n"
#: src/scan-gram.l:439
#, c-format
msgid "unrecognized escape sequence: %s"
msgstr "seqüência de escape não reconhecida: %s"
#: scan-gram.l:560
#: src/scan-gram.l:524
#, fuzzy, c-format
msgid "missing `{' in `%s'"
msgstr "falta operando depois de `%s'"
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ de `%s' não tem tipo declarado"
#: scan-gram.l:577 scan-gram.l:664
#, c-format
msgid "invalid value: %s%d"
msgstr "valor inválido: %s%d"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d de `%s' não tem tipo declarado"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#: src/scan-gram.l:820 src/scan-gram.l:887
#, c-format
msgid "%s is invalid"
msgstr "%s é inválido"
msgid "invalid value: %s"
msgstr "valor inválido: %s"
#: src/state.c:145
#: src/scan-gram.l:978
#, c-format
msgid "too many states (max %d)"
msgstr "muitos estados (máximo %d)"
msgid "missing `%s' at end of file"
msgstr "`%s' faltando no final do arquivo"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "valor $ inválido"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "redeclaração de tipo para %s"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, c-format
msgid "%s redeclaration for %s"
msgstr "redeclaração de %s para %s"
@@ -499,108 +471,108 @@ msgstr "redeclara
msgid "redefining precedence of %s"
msgstr "redefinindo precedência de %s"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "símbolo %s redefinido"
#: src/symtab.c:180
#: src/symtab.c:179
#, c-format
msgid "redefining user token number of %s"
msgstr "redefinindo número de token de usuário de %s"
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr "símbolo %s usado, mas não definido como uma token e não tem regras"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "símbolo `%s' usado mais the uma vez como uma string literal"
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "símbolo `%s' associado a mais de uma string literal"
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "precedências conflitantes para %s e %s"
#: src/symtab.c:293
#: src/symtab.c:282
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "valores associativos conflitantes para %s (%s) e %s (%s)"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "tokens %s e %s associadas ao mesmo número %d"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "o símbolo de início %s não está definido"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "o símbolo de início %s é um terminal"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, c-format
msgid "invalid argument %s for %s"
msgstr "argumento %s inválido para %s"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr "argumento %s ambíguo para %s"
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr "Argumentos válidos são:"
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr "%d bitset_allocs, %d liberados (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitset_allocs, %u liberados (%.2f%%).\n"
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr "%d bitset_sets, %d em cache (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitset_sets, %u em cache (%.2f%%)\n"
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr "%d bitset_resets, %d em cache (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitset_resets, %u em cache (%.2f%%)\n"
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr "%d bitset_tests, %d em cache (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitset_tests, %u em cache (%.2f%%)\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgstr "%d bitset_lists\n"
msgid "%u bitset_lists\n"
msgstr "%u bitset_lists\n"
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr "histograma de log de contagens\n"
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr "histograma de log de tamanhos\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr "histograma de densidades\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
@@ -608,95 +580,115 @@ msgstr ""
"Estatísticas de bitset:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgstr "Execuções acumuladas = %d\n"
msgid "Accumulated runs = %u\n"
msgstr "Execuções acumuladas = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr "Impossível ler o arquivo de estatísticas."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr "Tamanho do arquivo de estatísticas com erro.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr "Impossível de escrever no arquivo de estatísticas."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr "Impossível abrir arquivo de estatísticas para escrita."
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: a opção `%s' é ambígua\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: a opção `--%s' no admite nenhum argumento\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: a opção `%c%s' não admite nenhum argumento\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: a opção `%s' exige um argumento\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: opção `--%s' não reconhecida\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: opção `%c%s' não reconhecida\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: opção -- %c ilegal\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: opção -- %c inválida\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: a opção -- %c exige um argumento\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: a opção `-W %s' é ambígua\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: a opção `-W %s' não admite nenhum argumento\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "memória esgotada"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr "programa subsidiário `%s' não pôde ser invocado"
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr "programa subsidiário `%s' não foi encontrado"
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr "programa subsidiário `%s' falhou"
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr "programa subsidiário `%s' falhou (estado de saída %d)"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
@@ -704,109 +696,25 @@ msgstr ""
"\n"
"Tempos de execução (segundos)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr " TOTAL :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr "tempo em %s: %ld.%06ld (%ld%%)\n"
#~ msgid "state_list_append (state = %d, symbol = %d (%s))\n"
#~ msgstr "state_list_append (estado = %d, símbolo = %d (%s))\n"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d conflito de deslocamento/redução"
#~ msgstr[1] "%d conflitos de deslocamento/redução"
#~ msgid "Entering new_itemsets, state = %d\n"
#~ msgstr "Entrando new_itemsets, estado = %d\n"
#~ msgid "and"
#~ msgstr "e"
#~ msgid "Entering get_state, symbol = %d (%s)\n"
#~ msgstr "Entrando get_state, símbolo = %d (%s)\n"
#~ msgid "conflicts: "
#~ msgstr "conflitos: "
#~ msgid "Exiting get_state => %d\n"
#~ msgstr "Saindo get_state => %d\n"
#~ msgid "Entering append_states, state = %d\n"
#~ msgstr "Entrando append_states, estado = %d\n"
#~ msgid "Processing state %d (reached by %s)\n"
#~ msgstr "Processando estado %d (alcançado por %s)\n"
#~ msgid "undefined associativity"
#~ msgstr "associatividade indefinida"
#~ msgid "Closure: %s\n"
#~ msgstr "Fechamento: %s\n"
#~ msgid " (rule %d)\n"
#~ msgstr " (regra %d)\n"
#~ msgid "RTC: Firsts Input"
#~ msgstr "RTC: Entradas Antes"
#~ msgid "RTC: Firsts Output"
#~ msgstr "RTC: Saídas Antes"
#~ msgid "input"
#~ msgstr "entrada"
#~ msgid "output"
#~ msgstr "saída"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variáveis\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Valor Sprec Sassoc Tag\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Regras\n"
#~ "------\n"
#~ "\n"
#~ msgid ""
#~ "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
#~ msgstr ""
#~ "Num (Prec, Assoc, Util, Faixa Ritem) Lhs -> Rhs (Faixa Ritem) [Num]\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Regras interpretadas\n"
#~ "--------------------\n"
#~ "\n"
#~ msgid "Lookaheads: BEGIN\n"
#~ msgstr "Previsões: INICIO\n"
#~ msgid "State %d: %d lookaheads\n"
#~ msgstr "Estado %d: %d previsões\n"
#~ msgid " on %d (%s) -> rule %d\n"
#~ msgstr " em %d (%s) -> regra %d\n"
#~ msgid "Lookaheads: END\n"
#~ msgstr "Previsões: FIM\n"
#~ msgid "relation_transpose: input\n"
#~ msgstr "relation_transpose: entrada\n"
#~ msgid "relation_transpose: output\n"
#~ msgstr "relation_transpose: saída\n"
#~ msgid "growing table and check from: %lu to %lu\n"
#~ msgstr "aumentando a tabela e checando origem: %lu para %lu\n"
#~ msgid "base_t too small to hold %d\n"
#~ msgstr "base_t muito pequeno para guardar %d\n"
#~ msgid "State %d contains "
#~ msgstr "O estado %d contém "
+255 -243
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\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,76 +15,57 @@ 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/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: "
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "ÆÁÔÁÌØÎÁÑ ÏÛÉÂËÁ: "
#: src/conflicts.c:72
#: src/conflicts.c:75
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr ""
"ëÏÎÆÌÉËÔ × ÓÏÓÔÏÑÎÉÉ %d ÍÅÖÄÕ ÐÒÁ×ÉÌÏÍ %d É ÌÅËÓÅÍÏÊ %s ÒÁÚÒÅÛÅÎ ËÁË %s.\n"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr ""
"ëÏÎÆÌÉËÔ × ÓÏÓÔÏÑÎÉÉ %d ÍÅÖÄÕ ÐÒÁ×ÉÌÏÍ %d É ÌÅËÓÅÍÏÊ %s ÒÁÚÒÅÛÅÎ ËÁË %s.\n"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
"ëÏÎÆÌÉËÔ × ÓÏÓÔÏÑÎÉÉ %d ÍÅÖÄÕ ÐÒÁ×ÉÌÏÍ %d É ÌÅËÓÅÍÏÊ %s ÒÁÚÒÅÛÅÎ ËÁË %s.\n"
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d ËÏÎÆÌÉËÔ ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
msgstr[1] "%d ËÏÎÆÌÉËÔÁ ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
msgstr[2] "%d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "É"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d ËÏÎÆÌÉËÔ ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
msgstr[1] "%d ËÏÎÆÌÉËÔÁ ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
msgstr[2] "%d ËÏÎÆÌÉËÔÏ× ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "ËÏÎÆÌÉËÔÙ: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d ÓÄ×ÉÇ/×Ù×ÏÄ"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d ×Ù×ÏÄ/×Ù×ÏÄ"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "óÏÓÔÏÑÎÉÅ %d ÓÏÄÅÒÖÉÔ "
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "ÓÏÓÔÏÑÎÉÅ %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
@@ -92,25 +73,45 @@ msgstr[0] "
msgstr[1] "ÏÖÉÄÁÌÏÓØ %d ËÏÎÆÌÉËÔÁ ÓÄ×ÉÇÁ/×Ù×ÏÄÁ\n"
msgstr[2] "ÏÖÉÄÁÌÏÓØ %d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ\n"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d ËÏÎÆÌÉËÔ ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "ÎÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ `%s'"
#: src/files.c:133
#: src/files.c:115
#, fuzzy
msgid "I/O error"
msgstr "ÏÛÉÂËÁ"
#: src/files.c:118
msgid "cannot close file"
msgstr "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ"
#: src/getargs.c:157
#: src/files.c:336
#, fuzzy, c-format
msgid "conflicting outputs to file %s"
msgstr "ÐÒÏÔÉ×ÏÒÅÞÉ×ÙÅ ÚÎÁÞÅÎÉÑ ÁÓÓÏÃÉÁÔÉ×ÎÏÓÔÉ ÄÌÑ %s É %s"
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "éÓÐÏÌØÚÕÊÔÅ `%s --help' ÄÌÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison ÇÅÎÅÒÉÒÕÅÔ ÁÎÁÌÉÚÁÔÏÒÙ ÄÌÑ ÇÒÁÍÍÁÔÉË LALR(1).\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþé]... æáêì\n"
#: src/getargs.c:165
#: src/getargs.c:196
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"
@@ -119,7 +120,7 @@ msgstr ""
"Ñ×ÌÑÅÔÓÑ ÏÂÑÚÁÔÅÌØÎÙÍ ÄÌÑ ËÏÒÏÔËÏÊ ÆÏÒÍÙ. ôÏ ÖÅ ËÁÓÁÅÔÓÑ ÎÅÏÂÑÚÁÔÅÌØÎÙÈ\n"
"ÁÒÇÕÍÅÎÔÏ×.\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -131,7 +132,7 @@ msgstr ""
" -V, --version ×Ù×ÅÓÔÉ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ\n"
" -y, --yacc ÜÍÕÌÉÒÏ×ÁÔØ POSIX yacc\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -151,7 +152,7 @@ msgstr ""
" -n, --no-parser ÇÅÎÅÒÉÒÏ×ÁÔØ ÔÏÌØËÏ ÔÁÂÌÉÃÙ\n"
" -k, --token-table ×ËÌÀÞÉÔØ ÔÁÂÌÉÃÕ ÉÍÅÎ ÌÅËÓÅÍ\n"
#: src/getargs.c:190
#: src/getargs.c:221
#, fuzzy
msgid ""
"Output:\n"
@@ -171,7 +172,7 @@ msgstr ""
" -g, --graph ÓÏÚÄÁÔØ ÔÁËÖÅ ÐÏÑÓÎÅÎÉÑ Ë Á×ÔÏÍÁÔÕ × ×ÉÄÅ \n"
"VCG-ÇÒÁÆÁ\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -182,25 +183,25 @@ msgid ""
" `none' disable the report\n"
msgstr ""
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr "ïÛÉÂËÉ ÓÏÏÂÝÁÊÔÅ ÐÏ ÁÄÒÅÓÕ <[email protected]>.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "á×ÔÏÒÙ: òÏÂÅÒÔ ëÏÒÂÅÔ É òÉÞÁÒÄ óÔÏÌÍÅÎ.\n"
#: src/getargs.c:232
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
#: src/getargs.c:268
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"
@@ -211,69 +212,63 @@ msgstr ""
"ðòéçïäîïóôé\n"
"äìñ ïðòåäåìåîîïê ãåìé.\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "éÓÐÏÌØÚÕÊÔÅ `%s --help' ÄÌÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n"
msgid "missing operand after `%s'"
msgstr ""
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: ÎÅ ÚÁÄÁÎ ÆÁÊÌ Ó ÇÒÁÍÍÁÔÉËÏÊ\n"
msgid "extra operand `%s'"
msgstr ""
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: ÌÉÛÎÉÅ ÁÒÇÕÍÅÎÔÙ ÐÏÓÌÅ `%s' ÉÇÎÏÒÉÒÏ×ÁÎÙ\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "ÐÕÓÔÏ"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "çÒÁÍÍÁÔÉËÁ"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
#, fuzzy
msgid "warning"
msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: "
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ goto (ÍÁËÓÉÍÁÌØÎÏ %d)"
#: src/main.c:117
#: src/main.c:124
#, fuzzy
msgid "rule never reduced because of conflicts"
msgstr " 1 ËÏÎÆÌÉËÔ ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr ""
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " ÔÉÐ %d Ñ×ÌÑÅÔÓÑ %s\n"
#: src/print.c:162
#: src/print.c:164
#, fuzzy, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tÓÄ×ÉÇ, É ÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
#: src/print.c:164
#: src/print.c:166
#, fuzzy, c-format
msgid "go to state %d\n"
msgstr " %-4s\tÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
#: src/print.c:201
#: src/print.c:203
#, fuzzy
msgid "error (nonassociative)\n"
msgstr "%-4s\tÏÛÉÂËÁ (ÎÅÁÓÓÏÃÉÁÔÉ×ÎÁÑ)"
#: src/print.c:290
#: src/print.c:291
#, fuzzy, c-format
msgid "reduce using rule %d (%s)"
msgstr "$default\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)"
@@ -291,116 +286,97 @@ msgstr ""
msgid "state %d"
msgstr "ÓÏÓÔÏÑÎÉÅ %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "ôÅÒÍÉÎÁÌØÎÙÅ ÓÉÍ×ÏÌÙ Ó ÐÒÁ×ÉÌÁÍÉ, × ËÏÔÏÒÙÈ ÏÎÉ ÐÏÑ×ÌÑÀÔÓÑ"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "îÅÔÅÒÍÉÎÁÌØÎÙÅ ÓÉÍ×ÏÌÙ Ó ÐÒÁ×ÉÌÁÍÉ, × ËÏÔÏÒÙÈ ÏÎÉ ÐÏÑ×ÌÑÀÔÓÑ"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr " ÎÁÌÅ×Ï:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " ÎÁÐÒÁ×Ï:"
#: src/print.c:552
#: src/print.c:554
#, fuzzy
msgid "Rules never reduced"
msgstr "%d ÐÒÁ×ÉÌÏ ÎÅ Ó×ÅÄÅÎÏ\n"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "ÍÎÏÖÅÓÔ×ÅÎÎÏÅ ÏÐÉÓÁÎÉÅ %s"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr ""
#: src/reader.c:239
#: src/reader.c:236
#, c-format
msgid "rule given for %s, which is a token"
msgstr "ÐÒÁ×ÉÌÏ ÚÁÄÁÎÏ ÄÌÑ %s, ËÏÔÏÒÙÊ Ñ×ÌÑÅÔÓÑ ÌÅËÓÅÍÏÊ"
#: src/reader.c:264
#, c-format
msgid "type clash (`%s' `%s') on default action"
#: src/reader.c:265
#, fuzzy, c-format
msgid "type clash on default action: <%s> != <%s>"
msgstr "ËÏÎÆÌÉËÔ ÔÉÐÏ× (`%s' `%s') ÎÁ ÄÅÊÓÔ×ÉÉ ÐÏ ÕÍÏÌÞÁÎÉÀ"
#: src/reader.c:272
#: src/reader.c:271
msgid "empty rule for typed nonterminal, and no action"
msgstr ""
"ÐÕÓÔÏÅ ÐÒÁ×ÉÌÏ ÄÌÑ ÔÉÐÉÚÉÒÏ×ÁÎÎÏÇÏ ÎÅÔÅÒÍÉÎÁÌØÎÏÇÏ ÓÉÍ×ÏÌÁ, É ÎÅÔ ÄÅÊÓÔ×ÉÑ"
#: src/reader.c:343
msgid "two @prec's in a row"
msgstr "Ä×Á @prec ÐÏÄÒÑÄ"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr ""
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr ""
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgid "%s must be followed by positive number"
msgstr ""
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "ÏÔÓÕÔÓÔ×ÕÀÔ ÐÒÁ×ÉÌÁ ×Ï ×ÈÏÄÎÏÊ ÇÒÁÍÍÁÔÉËÅ"
#: src/reader.c:545
#, c-format
msgid "too many symbols (tokens plus nonterminals); maximum %d"
msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÉÍ×ÏÌÏ× (ÌÅËÓÅÍÙ ÐÌÀÓ ÎÅÔÅÒÍÉÎÁÌÙ); ÍÁËÓÉÍÁÌØÎÏ %d"
#: src/reduce.c:239
#: src/reduce.c:241
#, fuzzy
msgid "useless rule"
msgstr "%d ÂÅÓÐÏÌÅÚÎÏÅ ÐÒÁ×ÉÌÏ"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d ÂÅÓÐÏÌÅÚÎÙÊ ÎÅÔÅÒÍÉÎÁÌ"
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "âÅÓÐÏÌÅÚÎÙÅ ÎÅÔÅÒÍÉÎÁÌÙ:"
#: src/reduce.c:349
#: src/reduce.c:350
#, fuzzy
msgid "Useless nonterminals"
msgstr "âÅÓÐÏÌÅÚÎÙÅ ÎÅÔÅÒÍÉÎÁÌÙ:"
#: src/reduce.c:362
#: src/reduce.c:363
#, fuzzy
msgid "Terminals which are not used"
msgstr "îÅÉÓÐÏÌØÚÏ×ÁÎÎÙÅ ÔÅÒÍÉÎÁÌÙ:"
#: src/reduce.c:371
#: src/reduce.c:372
#, fuzzy
msgid "Useless rules"
msgstr "âÅÓÐÏÌÅÚÎÙÅ ÐÒÁ×ÉÌÁ:"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
@@ -408,7 +384,7 @@ msgstr[0] "%d
msgstr[1] "%d ÐÒÁ×ÉÌÁ ÎÅ Ó×ÅÄÅÎÏ\n"
msgstr[2] "%d ÐÒÁ×ÉÌ ÎÅ Ó×ÅÄÅÎÏ\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
@@ -416,11 +392,11 @@ msgstr[0] "%d
msgstr[1] "%d ÂÅÓÐÏÌÅÚÎÙÈ ÎÅÔÅÒÍÉÎÁÌÁ"
msgstr[2] "%d ÂÅÓÐÏÌÅÚÎÙÈ ÎÅÔÅÒÍÉÎÁÌÏ×"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr " É "
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -433,81 +409,70 @@ msgstr[2] "%d
msgid "start symbol %s does not derive any sentence"
msgstr "îÁÞÁÌØÎÙÊ ÓÉÍ×ÏÌ %s ÎÅ ×Ù×ÏÄÉÔ ÎÉ ÏÄÎÏÇÏ ÐÒÅÄÌÏÖÅÎÉÑ"
#: scan-gram.l:202
#, c-format
msgid ": invalid character: `%c'\n"
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: scan-gram.l:246
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: scan-gram.l:274 scan-gram.l:412
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: scan-gram.l:311 scan-gram.l:383
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: scan-gram.l:332
#: src/scan-gram.l:216
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgid "invalid directive: %s"
msgstr "ÎÅ×ÅÒÎÙÅ ×ÈÏÄÎÙÅ ÄÁÎÎÙÅ: %s"
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid "integer out of range: %s"
msgstr ""
#: src/scan-gram.l:281
#, fuzzy, c-format
msgid "invalid character: %s"
msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÓÉÍ×ÏÌ: %s"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, fuzzy, c-format
msgid "invalid escape sequence: %s"
msgstr "ÎÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ: %s%d"
#: scan-gram.l:353
#: src/scan-gram.l:439
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgid "unrecognized escape sequence: %s"
msgstr "ÎÅÒÁÓÐÏÚÎÁÎÏ: %s"
#: scan-gram.l:473
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: src/scan-gram.l:524
#, c-format
msgid "missing `{' in `%s'"
msgstr ""
#: scan-gram.l:502
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#: scan-gram.l:560
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ × `%s' ÎÅ ÉÍÅÅÔ ÏÐÉÓÁÎÎÏÇÏ ÔÉÐÁ"
#: scan-gram.l:577 scan-gram.l:664
#, c-format
msgid "invalid value: %s%d"
msgstr "ÎÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ: %s%d"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d ÉÚ `%s' ÎÅ ÉÍÅÅÔ ÏÐÉÓÁÎÎÏÇÏ ÔÉÐÁ"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#, c-format
msgid "%s is invalid"
msgstr "ÎÅ×ÅÒÎÙÊ ÚÎÁË %s"
#: src/scan-gram.l:820 src/scan-gram.l:887
#, fuzzy, c-format
msgid "invalid value: %s"
msgstr "ÎÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ: %s%d"
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÏÓÔÏÑÎÉÊ (ÍÁËÓÉÍÁÌØÎÏ %d)"
#: src/scan-gram.l:978
#, fuzzy, c-format
msgid "missing `%s' at end of file"
msgstr "ÎÅÚÁËÏÎÞÅÎÎÁÑ ÓÔÒÏËÁ × ËÏÎÃÅ ÆÁÊÌÁ"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "ÎÅ×ÅÒÎÏÅ $ ÚÎÁÞÅÎÉÅ"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÉÓÁÎÉÅ ÔÉÐÁ ÄÌÑ %s"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, fuzzy, c-format
msgid "%s redeclaration for %s"
msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÉÓÁÎÉÅ ÔÉÐÁ ÄÌÑ %s"
@@ -517,224 +482,259 @@ msgstr "
msgid "redefining precedence of %s"
msgstr "ÐÅÒÅÏÐÒÅÄÅÌÅÎÉÅ ÐÒÉÏÒÉÔÅÔÁ ÄÌÑ %s"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÓÉÍ×ÏÌÁ %s"
#: src/symtab.c:180
#: src/symtab.c:179
#, fuzzy, c-format
msgid "redefining user token number of %s"
msgstr "ÐÅÒÅÏÐÒÅÄÅÌÅÎÉÅ ÐÒÉÏÒÉÔÅÔÁ ÄÌÑ %s"
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr "ÓÉÍ×ÏÌ %s ÉÓÐÏÌØÚÕÅÔÓÑ, ÎÏ ÎÅ ÏÐÒÅÄÅÌÅÎ ËÁË ÌÅËÓÅÍÁ É ÎÅ ÉÍÅÅÔ ÐÒÁ×ÉÌ"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr ""
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr ""
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "ÐÒÏÔÉ×ÏÒÅÞÉ×ÙÅ ÐÒÉÏÒÉÔÅÔÙ ÄÌÑ %s É %s"
#: src/symtab.c:293
#: src/symtab.c:282
#, fuzzy, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "ÐÒÏÔÉ×ÏÒÅÞÉ×ÙÅ ÚÎÁÞÅÎÉÑ ÁÓÓÏÃÉÁÔÉ×ÎÏÓÔÉ ÄÌÑ %s É %s"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "ÏÂÅÉÍ ÌÅËÓÅÍÁÍ %s É %s ÐÒÉÓ×ÏÅÎ ÎÏÍÅÒ %d"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "ÎÁÞÁÌØÎÙÊ ÓÉÍ×ÏÌ %s ÎÅÏÐÒÅÄÅÌÅÎ"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "ÎÁÞÁÌØÎÙÊ ÓÉÍ×ÏÌ %s Ñ×ÌÑÅÔÓÑ ÌÅËÓÅÍÏÊ"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, fuzzy, c-format
msgid "invalid argument %s for %s"
msgstr "ÎÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ: %s%d"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr ""
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: ÎÅÏÄÎÏÚÎÁÞÎÙÊ ËÌÀÞ `%s'\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: ËÌÀÞ `--%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: ËÌÀÞ `%c%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: ËÌÀÞ `%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ Ó ÁÒÇÕÍÅÎÔÏÍ\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `--%s'\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `%c%s'\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ËÌÀÞ -- %c\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: ÎÅ×ÅÒÎÙÊ ËÌÀÞ -- %c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: ËÌÀÞ ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ Ó ÁÒÇÕÍÅÎÔÏÍ -- %c\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: ÎÅÏÄÎÏÚÎÁÞÎÙÊ ËÌÀÞ `-W %s'\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: ËÌÀÞ `-W %s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr ""
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr ""
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr ""
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr ""
#: 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 ""
#~ msgid "too many states (max %d)"
#~ msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÏÓÔÏÑÎÉÊ (ÍÁËÓÉÍÁÌØÎÏ %d)"
#~ msgid "reduce"
#~ msgstr "×Ù×ÏÄ"
#~ msgid "shift"
#~ msgstr "ÓÄ×ÉÇ"
#~ msgid "an error"
#~ msgstr "ÏÛÉÂËÁ"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d ËÏÎÆÌÉËÔ ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#~ msgstr[1] "%d ËÏÎÆÌÉËÔÁ ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#~ msgstr[2] "%d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#~ msgid "and"
#~ msgstr "É"
#~ msgid "State %d contains "
#~ msgstr "óÏÓÔÏÑÎÉÅ %d ÓÏÄÅÒÖÉÔ "
#~ msgid "conflicts: "
#~ msgstr "ËÏÎÆÌÉËÔÙ: "
#~ msgid "%s contains "
#~ msgstr "%s ÓÏÄÅÒÖÉÔ "
@@ -742,12 +742,24 @@ msgstr ""
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' ÂÏÌØÛÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
#~ msgid "%s: no grammar file given\n"
#~ msgstr "%s: ÎÅ ÚÁÄÁÎ ÆÁÊÌ Ó ÇÒÁÍÍÁÔÉËÏÊ\n"
#~ msgid "%s: extra arguments ignored after `%s'\n"
#~ msgstr "%s: ÌÉÛÎÉÅ ÁÒÇÕÍÅÎÔÙ ÐÏÓÌÅ `%s' ÉÇÎÏÒÉÒÏ×ÁÎÙ\n"
#~ msgid "too many gotos (max %d)"
#~ msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ goto (ÍÁËÓÉÍÁÌØÎÏ %d)"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "×ÓÔÒÅÞÅÎ É ÐÒÏÉÇÎÏÒÉÒÏ×ÁÎ ÎÅÏÖÉÄÁÎÎÙÊ ÓÉÍ×ÏÌ `/'"
#~ msgid "unterminated comment"
#~ msgstr "ÎÅÚÁËÏÎÞÅÎÎÙÊ ËÏÍÍÅÎÔÁÒÉÊ"
#~ msgid "unexpected end of file"
#~ msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅÃ ÆÁÊÌÁ"
#~ msgid "unescaped newline in constant"
#~ msgstr "ÎÅÜËÒÁÎÉÒÏ×ÁÎÎÙÊ ÐÅÒÅ×ÏÄ ÓÔÒÏËÉ × ËÏÎÓÔÁÎÔÅ"
@@ -815,12 +827,12 @@ msgstr ""
#~ msgid " Skipping to next %c"
#~ msgstr " ðÒÏÐÕÓË ÄÏ ÓÌÅÄÕÀÝÅÇÏ %c"
#~ msgid "unterminated string at end of file"
#~ msgstr "ÎÅÚÁËÏÎÞÅÎÎÁÑ ÓÔÒÏËÁ × ËÏÎÃÅ ÆÁÊÌÁ"
#~ msgid "unterminated string"
#~ msgstr "ÎÅÚÁËÏÎÞÅÎÎÁÑ ÓÔÒÏËÁ"
#~ msgid "%s is invalid"
#~ msgstr "ÎÅ×ÅÒÎÙÊ ÚÎÁË %s"
#~ msgid "unterminated `%{' definition"
#~ msgstr "ÎÅÚÁËÏÎÞÅÎÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ `%{'"
@@ -860,9 +872,6 @@ msgstr ""
#~ msgid "no input grammar"
#~ msgstr "ÎÅÔ ×ÈÏÄÎÏÊ ÇÒÁÍÍÁÔÉËÉ"
#~ msgid "unknown character: %s"
#~ msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÓÉÍ×ÏÌ: %s"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "ÎÅ×ÅÒÎÏÅ ÐÒÁ×ÉÌÏ: Ä×ÏÅÔÏÞÉÅ ÎÅ ÓÌÅÄÕÅÔ ÚÁ ÎÁÞÁÌØÎÙÍ ÓÉÍ×ÏÌÏÍ"
@@ -872,14 +881,17 @@ msgstr ""
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "× ÐÒÅÄÙÄÕÝÅÍ ÐÒÁ×ÉÌÅ ÏÔÓÕÔÓÔ×ÕÅÔ ÚÁ×ÅÒÛÁÀÝÁÑ `;'"
#~ msgid "two @prec's in a row"
#~ msgstr "Ä×Á @prec ÐÏÄÒÑÄ"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard ÐÒÉÓÕÔÓÔ×ÕÅÔ, Á %%semantic_parser ÎÅ ÚÁÄÁÎ"
#~ msgid "two actions at end of one rule"
#~ msgstr "Ä×Á ÄÅÊÓÔ×ÉÑ × ËÏÎÃÅ ÏÄÎÏÇÏ ÐÒÁ×ÉÌÁ"
#~ msgid "invalid input: %s"
#~ msgstr "ÎÅ×ÅÒÎÙÅ ×ÈÏÄÎÙÅ ÄÁÎÎÙÅ: %s"
#~ msgid "too many symbols (tokens plus nonterminals); maximum %d"
#~ msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÉÍ×ÏÌÏ× (ÌÅËÓÅÍÙ ÐÌÀÓ ÎÅÔÅÒÍÉÎÁÌÙ); ÍÁËÓÉÍÁÌØÎÏ %d"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "ÐÒÅ×ÙÛÅÎ ÍÁËÓÉÍÁÌØÎÙÊ ÒÁÚÍÅÒ ÔÁÂÌÉÃÙ (%d)"
+236 -333
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49b\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"PO-Revision-Date: 2002-08-24 21:56+0200\n"
"Project-Id-Version: bison 1.75e\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\n"
"PO-Revision-Date: 2002-12-28 20:27+0100\n"
"Last-Translator: Göran Uddeborg <[email protected]>\n"
"Language-Team: Swedish <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -15,96 +15,98 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Okänt systemfel"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "varning: "
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "ödesdigert fel: "
#: src/conflicts.c:72
#: src/conflicts.c:75
#, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr " Konflikt mellan regel %d och element %s löstes som skift"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr " Konflikt mellan regel %d och element %s löstes som reducera"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr " Konflikt mellan regel %d och element %s löstes som ett fel"
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d skifta/reducerakonflikt"
msgstr[1] "%d skifta/reducerakonflikter"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "och"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d reducera/reducerakonflikt"
msgstr[1] "%d reducera/reducerakonflikter"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "konflikter: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d skifta/reducera"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d reducera/reducera"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "Tillstånd %d innehåller "
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "tillstånd %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "förväntade %d skifta/reducerakonflikt"
msgstr[1] "förväntade %d skifta/reducerakonflikter"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d reducera/reducerakonflikt"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "kan inte öppna filen \"%s\""
#: src/files.c:133
#: src/files.c:115
msgid "I/O error"
msgstr "I/O-fel"
#: src/files.c:118
msgid "cannot close file"
msgstr "kan inte stänga fil"
#: src/getargs.c:157
#: src/files.c:336
#, c-format
msgid "conflicting outputs to file %s"
msgstr ""
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Försök med \"%s --help\" för mer information.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison genererar parsrar för LALR(1)-grammatiker.\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Användning: %s [FLAGGA]... FIL\n"
#: src/getargs.c:165
#: src/getargs.c:196
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 +115,7 @@ msgstr ""
"obligatoriskt för den motsvarande korta flaggan också. Motsvarande\n"
"för valfria argument.\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -125,7 +127,7 @@ msgstr ""
" -V, --version visa versionsinformation och avsluta\n"
" -y, --yacc emulera POSIX-yacc\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -145,7 +147,7 @@ msgstr ""
" -n, --no-parser generera endast tabellerna\n"
" -k, --token-table inkludera en tabell över elementnamn\n"
#: src/getargs.c:190
#: src/getargs.c:221
msgid ""
"Output:\n"
" -d, --defines also produce a header file\n"
@@ -164,7 +166,7 @@ msgstr ""
" -o, --output=FIL lägg utdata i FIL\n"
" -g, --graph skapa också en VCG-beskrivning av automaten\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -182,27 +184,27 @@ msgstr ""
" \"all\" inkludera all ovanstående information\n"
" \"none\" avaktivera rapporten\n"
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr ""
"Rapportera fel till <[email protected]>.\n"
"Rapportera synpunkter på översättningen till <[email protected]>.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Skriven av Robert Corbett och Richard Stallman.\n"
#: src/getargs.c:232
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Copyright © %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
#: src/getargs.c:268
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"
@@ -211,66 +213,60 @@ msgstr ""
"finns INGEN garanti, inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR ETT\n"
"SPECIELLT ÄNDAMÅL.\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Försök med \"%s --help\" för mer information.\n"
msgid "missing operand after `%s'"
msgstr "saknad operand efter \"%s\""
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: ingen grammatikfil angiven\n"
msgid "extra operand `%s'"
msgstr "extra operand \"%s\""
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: extra argument ignorerade efter \"%s\"\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "tom"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "Grammatik"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
msgid "warning"
msgstr "varning"
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "för många goto (max %d)"
#: src/main.c:117
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr "regel aldrig reducerad på grund av konflikter"
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr "POSIX förbjuder deklarationer i grammatiken"
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr "identiferare saknas i parameterdeklaration"
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " typ %d är %s\n"
#: src/print.c:162
#: src/print.c:164
#, c-format
msgid "shift, and go to state %d\n"
msgstr "skifta, och gå till tillstånd %d\n"
#: src/print.c:164
#: src/print.c:166
#, c-format
msgid "go to state %d\n"
msgstr "gå till tillstånd %d\n"
#: src/print.c:201
#: src/print.c:203
msgid "error (nonassociative)\n"
msgstr "fel (ickeassociativ)\n"
#: src/print.c:290
#: src/print.c:291
#, c-format
msgid "reduce using rule %d (%s)"
msgstr "reducera med regel %d (%s)"
@@ -288,127 +284,109 @@ msgstr "$standard"
msgid "state %d"
msgstr "tillstånd %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Terminaler, med regler där de förekommer"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "Icketerminaler, med regler där de förekommer"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr " till vänster:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " till höger:"
#: src/print.c:552
#: src/print.c:554
msgid "Rules never reduced"
msgstr "Aldrig reducerade regler"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "flera %s-deklarationer"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgstr "resultattypskonflikt vid sammanslagningsfunktion %s: \"%s\" mot \"%s\""
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr "resultattypskonflikt vid sammanslagningsfunktion %s: <%s> != <%s>"
#: src/reader.c:239
#: src/reader.c:236
#, 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:265
#, c-format
msgid "type clash (`%s' `%s') on default action"
msgstr "typkonflikt (\"%s\" \"%s\") för standardåtgärd"
msgid "type clash on default action: <%s> != <%s>"
msgstr "typkonflikt för standardåtgärd: <%s> <%s>"
#: src/reader.c:272
#: src/reader.c:271
msgid "empty rule for typed nonterminal, and no action"
msgstr "tom regel för typad icketerminal, och ingen åtgärd"
#: src/reader.c:343
msgid "two @prec's in a row"
msgstr "två @prec i rad"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr "endast en %s tillåts per regel"
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr "%s påverkar endast GLR-parsrar"
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgstr "%%dprec påverkar endast GLR-parsrar"
msgid "%s must be followed by positive number"
msgstr "%s måste följas av ett positivt tal"
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr "%%dprec måste följas av ett positivt tal"
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr "endast en %%dprec tillåts per regel"
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr "%%merge påverkar endast GLR-parsrar"
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr "endast en %%merge tillåts per regel"
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "inga regler i ingrammatiken"
#: src/reader.c:545
#, 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
#: src/reduce.c:241
msgid "useless rule"
msgstr "oanvändbar regel"
#: src/reduce.c:302
msgid "useless nonterminal"
msgstr "oanvändbar icketerminal"
#, c-format
msgid "useless nonterminal: %s"
msgstr "oanvändbar icketerminal: %s"
#: src/reduce.c:349
#: src/reduce.c:350
msgid "Useless nonterminals"
msgstr "Oanvändbara icketerminaler"
#: src/reduce.c:362
#: src/reduce.c:363
msgid "Terminals which are not used"
msgstr "Terminaler som inte används"
#: src/reduce.c:371
#: src/reduce.c:372
msgid "Useless rules"
msgstr "Oanvändbara regler"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d regel reduceras aldrig\n"
msgstr[1] "%d regler reduceras aldrig\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d oanvändbar icketerminal"
msgstr[1] "%d oanvändbara icketerminaler"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr " och "
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -420,76 +398,70 @@ msgstr[1] "%d oanv
msgid "start symbol %s does not derive any sentence"
msgstr "startsymbolen %s genererar inga meningar"
#: scan-gram.l:202
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr "vilsekommet \",\" hanterat som blank"
#: src/scan-gram.l:216
#, c-format
msgid ": invalid character: `%c'\n"
msgstr ": ogiltigt tecken: \"%c\"\n"
msgid "invalid directive: %s"
msgstr "ogiltigt direktiv: %s"
#: scan-gram.l:246
msgid ": unexpected end of file in a comment\n"
msgstr ": oväntat filslut i en kommentar\n"
#: scan-gram.l:274 scan-gram.l:412
msgid ": unexpected end of file in a string\n"
msgstr ": oväntat filslut i en sträng\n"
#: scan-gram.l:311 scan-gram.l:383
msgid ": unexpected end of file in a character\n"
msgstr ": oväntat filslut i ett tecken\n"
#: scan-gram.l:332
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid ": invalid escape: %s\n"
msgstr ": ogiltig specialsekvens: %s\n"
msgid "integer out of range: %s"
msgstr "heltal utanför intervall: %s"
#: scan-gram.l:353
#: src/scan-gram.l:281
#, c-format
msgid ": unrecognized escape: %s\n"
msgstr ": okänd specialsekvens: %s\n"
msgid "invalid character: %s"
msgstr "ogiltigt tecken: %s"
#: scan-gram.l:473
msgid ": unexpected end of file in a braced code\n"
msgstr ": oväntat filslut i kod inom klamrar\n"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, c-format
msgid "invalid escape sequence: %s"
msgstr "ogiltig specialsekvens: %s"
#: scan-gram.l:502
msgid ": unexpected end of file in a prologue\n"
msgstr ": oväntat filslut i en prolog\n"
#: src/scan-gram.l:439
#, c-format
msgid "unrecognized escape sequence: %s"
msgstr "okänd specialsekvens: %s"
#: scan-gram.l:560
#: src/scan-gram.l:524
#, c-format
msgid "missing `{' in `%s'"
msgstr "saknad \"{\" i \"%s\""
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "$$ för \"%s\" har ingen deklarerad typ"
#: scan-gram.l:577 scan-gram.l:664
#, c-format
msgid "invalid value: %s%d"
msgstr "felaktigt värde: %s%d"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "$%d för \"%s\" har ingen deklarerad typ"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#: src/scan-gram.l:820 src/scan-gram.l:887
#, c-format
msgid "%s is invalid"
msgstr "%s är felaktigt"
msgid "invalid value: %s"
msgstr "felaktigt värde: %s"
#: src/state.c:145
#: src/scan-gram.l:978
#, c-format
msgid "too many states (max %d)"
msgstr "för många tillstånd (max %d)"
msgid "missing `%s' at end of file"
msgstr "saknat \"%s\" vid filslut"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "felaktigt $-värde"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "typen omdeklarerad för %s"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, c-format
msgid "%s redeclaration for %s"
msgstr "%s-omdeklaration för %s"
@@ -499,110 +471,110 @@ msgstr "%s-omdeklaration f
msgid "redefining precedence of %s"
msgstr "omdefinition av precedens för %s"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "symbolen %s omdefinierad"
#: src/symtab.c:180
#: src/symtab.c:179
#, c-format
msgid "redefining user token number of %s"
msgstr "omdefinition av elementnummer för %s"
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"symbolen %s används, men är inte definierad som ett element och har inga "
"regler"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "symbolen \"%s\" används mer än en gång som en bokstavlig sträng"
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "symbolen \"%s\" har fått mer än en bokstavlig sträng"
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "motstridiga precedenser mellan %s och %s"
#: src/symtab.c:293
#: src/symtab.c:282
#, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "motstridiga associativiteter för %s (%s) och %s (%s)"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "elementen %s och %s har båda fått nummer %d"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "startsymbolen %s är odefinierad"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "startsymbolen %s är ett element"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, c-format
msgid "invalid argument %s for %s"
msgstr "ogiltigt argument %s till %s"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr "tvetydigt argument %s till %s"
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr "Giltiga argument är:"
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgstr "%d bitmängdallokeringar, %d frianden (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr "%u bitmängdallokeringar, %u frianden (%.2f%%).\n"
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgstr "%d bitmängdmängder, %d cachade (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr "%u bitmängdmängder, %u cachade (%.2f%%)\n"
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgstr "%d bitmängdåterställanden, %d cachade (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr "%u bitmängdåterställanden, %u cachade (%.2f%%)\n"
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgstr "%d bitmängdtester, %d cachade (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr "%u bitmängdtester, %u cachade (%.2f%%)\n"
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgstr "%d bitmängdlistor\n"
msgid "%u bitset_lists\n"
msgstr "%u bitmängdlistor\n"
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr "anropslogghistogram\n"
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr "storlekslogghistogram\n"
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr "densitetshistogram\n"
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
@@ -610,98 +582,118 @@ msgstr ""
"Bitmängdsstatistik:\n"
"\n"
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgstr "Accumulerade körningar = %d\n"
msgid "Accumulated runs = %u\n"
msgstr "Ackumulerade körningar = %u\n"
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr "Kunde inte läsa statistikfil."
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr "Dålig statistikfilstorlek.\n"
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr "Kunde inte skriva statistikfil."
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr "Kunde inte öppna statistikfil för skrivning."
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: flaggan \"%s\" är tvetydig\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: flaggan \"--%s\" tar inget argument\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: flaggan \"%c%s\" tar inget argument\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: flaggan \"%s\" behöver ett argument\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: okänd flagga \"--%s\"\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: okänd flagga \"%c%s\"\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: otillåten flagga -- %c\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: ogiltig flagga --%c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: flaggan behöver ett argument -- %c\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: flaggan \"-W %s\" är tvetydig\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "minnet slut"
# När vi går över till Unicode mer allmänt kanske vi bör översätta båda dessa
# med U+201D (RIGHT DOUBLE QUOTATION MARK) på svenska. Eller?
#
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "\""
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "\""
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr "underprogram \"%s\" kunde inte köras"
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr "underprogram \"%s\" hittades inte"
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr "underprogram \"%s\" misslyckades"
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr "underprogram \"%s\" misslyckades (slutstatus %d)"
#: lib/timevar.c:476
msgid ""
"\n"
"Execution times (seconds)\n"
@@ -709,114 +701,25 @@ msgstr ""
"\n"
"Exekveringstider (sekunder)\n"
#: lib/timevar.c:516
#: lib/timevar.c:526
msgid " TOTAL :"
msgstr " TOTALT :"
#: lib/timevar.c:552
#: lib/timevar.c:562
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr "tid i %s: %ld.%06ld (%ld%%)\n"
#~ msgid "state_list_append (state = %d, symbol = %d (%s))\n"
#~ msgstr "state_list_append (tillstånd = %d, symbol = %d (%s))\n"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d skifta/reducerakonflikt"
#~ msgstr[1] "%d skifta/reducerakonflikter"
#~ msgid "Entering new_itemsets, state = %d\n"
#~ msgstr "Går in i new_itemsets, tillstånd = %d\n"
#~ msgid "and"
#~ msgstr "och"
#~ msgid "Entering get_state, symbol = %d (%s)\n"
#~ msgstr "Går in i get_state, symbol = %d (%s)\n"
#~ msgid "conflicts: "
#~ msgstr "konflikter: "
#~ msgid "Exiting get_state => %d\n"
#~ msgstr "Lämnar get_state => %d\n"
#~ msgid "Entering append_states, state = %d\n"
#~ msgstr "Går in i append_states, tillstånd = %d\n"
#~ msgid "Processing state %d (reached by %s)\n"
#~ msgstr "Bearbetar tillstånd %d (nått av %s)\n"
#~ msgid "undefined associativity"
#~ msgstr "odefinierad associativitet"
#~ msgid "Closure: %s\n"
#~ msgstr "Hölje: %s\n"
#~ msgid " (rule %d)\n"
#~ msgstr " (regel %d)\n"
# RTC betyder "reflexive transitive closure"
# Firsts är ett variabelnamn
#~ msgid "RTC: Firsts Input"
#~ msgstr "RTH: Firsts-indata"
#~ msgid "RTC: Firsts Output"
#~ msgstr "RTH: Firsts-utdata"
#~ msgid "input"
#~ msgstr "indata"
#~ msgid "output"
#~ msgstr "utdata"
#~ msgid ""
#~ "Variables\n"
#~ "---------\n"
#~ "\n"
#~ msgstr ""
#~ "Variabler\n"
#~ "---------\n"
#~ "\n"
#~ msgid "Value Sprec Sassoc Tag\n"
#~ msgstr "Värde Sprec Sassoc Tagg\n"
#~ msgid ""
#~ "Rules\n"
#~ "-----\n"
#~ "\n"
#~ msgstr ""
#~ "Regler\n"
#~ "------\n"
#~ "\n"
#~ msgid ""
#~ "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"
#~ msgstr ""
#~ "Num (Prec, Assoc, Användbar, Robjektintervall) Vhs -> Hhs "
#~ "(Hobjektintervall) [Num]\n"
#~ msgid ""
#~ "Rules interpreted\n"
#~ "-----------------\n"
#~ "\n"
#~ msgstr ""
#~ "Tolkade regler\n"
#~ "--------------\n"
#~ "\n"
#~ msgid "Lookaheads: BEGIN\n"
#~ msgstr "Framåtblickar: START\n"
#~ msgid "State %d: %d lookaheads\n"
#~ msgstr "Tillstånd %d: %d framåtblickar\n"
#~ msgid " on %d (%s) -> rule %d\n"
#~ msgstr " vid %d (%s) -> regel %d\n"
#~ msgid "Lookaheads: END\n"
#~ msgstr "Framåtblickar: SLUT\n"
#~ msgid "relation_transpose: input\n"
#~ msgstr "relation_transpose: indata\n"
#~ msgid "relation_transpose: output\n"
#~ msgstr "relation_transpose: utdata\n"
# "table" och "check" är variabelnamn, som bör vara bekanta för den som
# begär denna spårutskrift.
#~ msgid "growing table and check from: %lu to %lu\n"
#~ msgstr "utökar table och check från: %lu till %lu\n"
#~ msgid "base_t too small to hold %d\n"
#~ msgstr "base_t för liten för att hålla %d\n"
#~ msgid "State %d contains "
#~ msgstr "Tillstånd %d innehåller "
+254 -241
View File
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.49a\n"
"POT-Creation-Date: 2002-09-27 16:50+0200\n"
"POT-Creation-Date: 2003-01-01 01:28-0800\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,102 +15,105 @@ msgstr ""
"X-Generator: KBabel 0.9.5\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/complain.c:89 lib/error.c:128 lib/error.c:156
#: src/complain.c:56 lib/error.c:135 lib/error.c:163
msgid "Unknown system error"
msgstr "Bilinmeyen sistem hatasý"
#: src/complain.c:123 src/complain.c:152
#: src/complain.c:79 src/complain.c:94
msgid "warning: "
msgstr "uyarý: "
#: src/complain.c:252 src/complain.c:282
#: src/complain.c:150 src/complain.c:166
msgid "fatal error: "
msgstr "ölümcül hata:"
#: src/conflicts.c:72
#: src/conflicts.c:75
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as shift"
msgstr ""
"%d durumu içinde %d kuralý ve %s andaçý arasýndaki çeliþki %s olarak\n"
"çözümlendi.\n"
#: src/conflicts.c:80
#: src/conflicts.c:83
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as reduce"
msgstr ""
"%d durumu içinde %d kuralý ve %s andaçý arasýndaki çeliþki %s olarak\n"
"çözümlendi.\n"
#: src/conflicts.c:87
#: src/conflicts.c:90
#, fuzzy, c-format
msgid " Conflict between rule %d and token %s resolved as an error"
msgstr ""
"%d durumu içinde %d kuralý ve %s andaçý arasýndaki çeliþki %s olarak\n"
"çözümlendi.\n"
#: src/conflicts.c:402
#: src/conflicts.c:398
#, c-format
msgid "%d shift/reduce conflict"
msgid_plural "%d shift/reduce conflicts"
msgstr[0] "%d öteleme/indirgeme çeliþkisi"
msgstr[1] "%d öteleme/indirgeme çeliþkisi"
msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
msgstr ""
#: src/conflicts.c:409
msgid "and"
msgstr "ve"
#: src/conflicts.c:415
#, c-format
msgid "%d reduce/reduce conflict"
msgid_plural "%d reduce/reduce conflicts"
msgstr[0] "%d indirgeme/indirgeme çeliþkisi"
msgstr[1] "%d indirgeme/indirgeme çeliþkisi"
#: src/conflicts.c:435
msgid "conflicts: "
msgstr "çeliþkiler: "
#: src/conflicts.c:437
#, c-format
msgid " %d shift/reduce"
#: src/conflicts.c:401
#, fuzzy, c-format
msgid "conflicts: %d shift/reduce\n"
msgstr " %d öteleme/indirgeme"
#: src/conflicts.c:441
#, c-format
msgid " %d reduce/reduce"
#: src/conflicts.c:403
#, fuzzy, c-format
msgid "conflicts: %d reduce/reduce\n"
msgstr " %d indirgeme/indirgeme"
#: src/conflicts.c:460
#, c-format
msgid "State %d contains "
msgstr "%d durumu içerir"
#: src/conflicts.c:421
#, fuzzy, c-format
msgid "State %d "
msgstr "durum %d"
#: src/conflicts.c:537
#: src/conflicts.c:498
#, fuzzy, c-format
msgid "expected %d shift/reduce conflict"
msgid_plural "expected %d shift/reduce conflicts"
msgstr[0] "beklenen %d öteleme/indirgeme çeliþkisi\n"
msgstr[1] "beklenen %d öteleme/indirgeme çeliþkisi\n"
#: src/files.c:114
#: src/conflicts.c:503
#, fuzzy
msgid "expected 0 reduce/reduce conflicts"
msgstr "%d indirgeme/indirgeme çeliþkisi"
#: src/files.c:99
#, c-format
msgid "cannot open file `%s'"
msgstr "`%s' dosyasý açýlamadý"
#: src/files.c:133
#: src/files.c:115
#, fuzzy
msgid "I/O error"
msgstr "bir hata"
#: src/files.c:118
msgid "cannot close file"
msgstr "dosya kapatýlamýyor"
#: src/getargs.c:157
#: src/files.c:336
#, fuzzy, c-format
msgid "conflicting outputs to file %s"
msgstr "%s ve %s için çeliþen birleþmeli deðerler"
#: src/getargs.c:182
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Daha fazla bilgi için `%s --help' yazýn.\n"
#: src/getargs.c:188
msgid "GNU bison generates parsers for LALR(1) grammars.\n"
msgstr "GNU bison LALR(1) gramerler için ayrýþtýrýcýlar üretir.\n"
#: src/getargs.c:161
#: src/getargs.c:192
#, c-format
msgid "Usage: %s [OPTION]... FILE\n"
msgstr "Kullaným: %s [SEÇENEK]... DOSYA\n"
#: src/getargs.c:165
#: src/getargs.c:196
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"
@@ -120,7 +123,7 @@ msgstr ""
"seçenek için de geçerlidir. Bu durum, seçimli argümanlar için de "
"geçerlidir.\n"
#: src/getargs.c:171
#: src/getargs.c:202
msgid ""
"Operation modes:\n"
" -h, --help display this help and exit\n"
@@ -132,7 +135,7 @@ msgstr ""
" -V, --version sürüm bilgisini ver ve çýk\n"
" -y, --yacc POSIX yacc öykünmesi\n"
#: src/getargs.c:178
#: src/getargs.c:209
msgid ""
"Parser:\n"
" -S, --skeleton=FILE specify the skeleton to use\n"
@@ -152,7 +155,7 @@ msgstr ""
" -n, --no-parser sadece tablolarý üret\n"
" -k, --token-table andaç isimlerinin bir tablosunu içer\n"
#: src/getargs.c:190
#: src/getargs.c:221
#, fuzzy
msgid ""
"Output:\n"
@@ -171,7 +174,7 @@ msgstr ""
" -o, --output=DOSYA çýktýyý dosyaya býrakýr\n"
" -g, --graph otomatýn bir VCG grafik açýklamasýný da üretir\n"
#: src/getargs.c:201
#: src/getargs.c:232
msgid ""
"THINGS is a list of comma separated words that can include:\n"
" `state' describe the states\n"
@@ -182,27 +185,27 @@ msgid ""
" `none' disable the report\n"
msgstr ""
#: src/getargs.c:212
#: src/getargs.c:243
msgid "Report bugs to <[email protected]>.\n"
msgstr ""
"Hatalarý <[email protected]>'a,\n"
"çeviri hatalarýný <[email protected]>'e bildir.\n"
#: src/getargs.c:226
#: src/getargs.c:260
#, c-format
msgid "bison (GNU Bison) %s"
msgstr "bison (GNU Bison) %s"
#: src/getargs.c:228
#: src/getargs.c:262
msgid "Written by Robert Corbett and Richard Stallman.\n"
msgstr "Yazanlar: Robert Corbett ve Richard Stallman.\n"
#: src/getargs.c:232
#: src/getargs.c:266
#, c-format
msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
msgstr "Telif Hakký (C) %d Free Software Foundation, Inc.\n"
#: src/getargs.c:234
#: src/getargs.c:268
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"
@@ -211,68 +214,62 @@ msgstr ""
"Hiçbir garantisi yoktur; hatta SATILABÝLÝRLÝÐÝ veya ÞAHSÝ KULLANIMINIZA\n"
"UYGUNLUÐU için bile garanti verilmez.\n"
#: src/getargs.c:395
#: src/getargs.c:424
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Daha fazla bilgi için `%s --help' yazýn.\n"
msgid "missing operand after `%s'"
msgstr ""
#: src/getargs.c:402
#: src/getargs.c:426
#, c-format
msgid "%s: no grammar file given\n"
msgstr "%s: gramer dosyasý verilmemiþ\n"
msgid "extra operand `%s'"
msgstr ""
#: src/getargs.c:406
#, c-format
msgid "%s: extra arguments ignored after `%s'\n"
msgstr "%s: '%s' den sonraki argümanlar yoksayýldý\n"
#: src/gram.c:139
#: src/gram.c:142
msgid "empty"
msgstr "boþ"
#: src/gram.c:233
#: src/gram.c:236
msgid "Grammar"
msgstr "Gramer"
#: src/gram.c:321 src/reduce.c:302 src/reduce.c:392
#: src/gram.c:324 src/reduce.c:393
#, fuzzy
msgid "warning"
msgstr "uyarý: "
#: src/lalr.c:91
#, c-format
msgid "too many gotos (max %d)"
msgstr "gotos çok fazla (en fazla %d)"
#: src/main.c:117
#: src/main.c:124
msgid "rule never reduced because of conflicts"
msgstr ""
#: parse-gram.y:347
#: src/parse-gram.y:334
msgid "POSIX forbids declarations in the grammar"
msgstr ""
#: src/print.c:46
#: src/parse-gram.y:457
msgid "missing identifier in parameter declaration"
msgstr ""
#: src/print.c:48
#, c-format
msgid " type %d is %s\n"
msgstr " tip %d %s'dir\n"
#: src/print.c:162
#: src/print.c:164
#, fuzzy, c-format
msgid "shift, and go to state %d\n"
msgstr " %-4s\tötele, ve durum %d'ye git\n"
#: src/print.c:164
#: src/print.c:166
#, fuzzy, c-format
msgid "go to state %d\n"
msgstr " %-4s\tdurum %d'ye git\n"
#: src/print.c:201
#: src/print.c:203
#, fuzzy
msgid "error (nonassociative)\n"
msgstr "%-4s\thata (birleþmeli deðil)"
#: src/print.c:290
#: src/print.c:291
#, fuzzy, c-format
msgid "reduce using rule %d (%s)"
msgstr "$default\tindirgeme kural %d (%s)'i kullanýyor"
@@ -290,134 +287,115 @@ msgstr ""
msgid "state %d"
msgstr "durum %d"
#: src/print.c:453
#: src/print.c:455
msgid "Terminals, with rules where they appear"
msgstr "Sabit simgeler, kurallarýnýn bulunduklarý yerde"
#: src/print.c:480
#: src/print.c:482
msgid "Nonterminals, with rules where they appear"
msgstr "Deðiþken simgeler, kurallarýnýn bulunduklarý yerde"
#: src/print.c:509
#: src/print.c:511
msgid " on left:"
msgstr " solda:"
#: src/print.c:524
#: src/print.c:526
msgid " on right:"
msgstr " saðda:"
#: src/print.c:552
#: src/print.c:554
#, fuzzy
msgid "Rules never reduced"
msgstr "%d kural asla indirgenmedi\n"
#: src/reader.c:52
#: src/reader.c:53
#, c-format
msgid "multiple %s declarations"
msgstr "çoklu %s bildirimleri"
#: src/reader.c:141
#: src/reader.c:138
#, c-format
msgid "result type clash on merge function %s: `%s' vs. `%s'"
msgid "result type clash on merge function %s: <%s> != <%s>"
msgstr ""
#: src/reader.c:239
#: src/reader.c:236
#, c-format
msgid "rule given for %s, which is a token"
msgstr "bir andaç olan %s için verilen kural"
#: src/reader.c:264
#, c-format
msgid "type clash (`%s' `%s') on default action"
#: src/reader.c:265
#, fuzzy, c-format
msgid "type clash on default action: <%s> != <%s>"
msgstr "öntanýmlý eylem üzerinde (`%s' `%s') tip çatýþmasý"
#: src/reader.c:272
#: src/reader.c:271
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
msgid "two @prec's in a row"
msgstr "bir satýrda iki @prec"
#: src/reader.c:341 src/reader.c:355 src/reader.c:368
#, c-format
msgid "only one %s allowed per rule"
msgstr ""
#: src/reader.c:351 src/reader.c:366
#, c-format
msgid "%s affects only GLR parsers"
msgstr ""
#: src/reader.c:353
#, c-format
msgid "%%dprec affects only GLR parsers"
msgid "%s must be followed by positive number"
msgstr ""
#: src/reader.c:355
#, c-format
msgid "%%dprec must be followed by positive number"
msgstr ""
#: src/reader.c:357
#, c-format
msgid "only one %%dprec allowed per rule"
msgstr ""
#: src/reader.c:368
#, c-format
msgid "%%merge affects only GLR parsers"
msgstr ""
#: src/reader.c:370
#, c-format
msgid "only one %%merge allowed per rule"
msgstr ""
#: src/reader.c:513
#: src/reader.c:510
msgid "no rules in the input grammar"
msgstr "girdi grameri içinde kurallar yok"
#: src/reader.c:545
#, 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"
#: src/reduce.c:239
#: src/reduce.c:241
#, fuzzy
msgid "useless rule"
msgstr "%d yararsýz kural"
#: src/reduce.c:302
#, fuzzy
msgid "useless nonterminal"
msgstr "%d yararsýz deðiþken simge"
#, fuzzy, c-format
msgid "useless nonterminal: %s"
msgstr "Yararsýz deðiþken simgeler:"
#: src/reduce.c:349
#: src/reduce.c:350
#, fuzzy
msgid "Useless nonterminals"
msgstr "Yararsýz deðiþken simgeler:"
#: src/reduce.c:362
#: src/reduce.c:363
#, fuzzy
msgid "Terminals which are not used"
msgstr "Kullanýlmayan sabit simgeler:"
#: src/reduce.c:371
#: src/reduce.c:372
#, fuzzy
msgid "Useless rules"
msgstr "Yararsýz kurallar:"
#: src/reduce.c:387
#: src/reduce.c:388
#, c-format
msgid "%d rule never reduced\n"
msgid_plural "%d rules never reduced\n"
msgstr[0] "%d kural asla indirgenmedi\n"
msgstr[1] "%d kural asla indirgenmedi\n"
#: src/reduce.c:395
#: src/reduce.c:396
#, c-format
msgid "%d useless nonterminal"
msgid_plural "%d useless nonterminals"
msgstr[0] "%d yararsýz deðiþken simge"
msgstr[1] "%d yararsýz deðiþken simge"
#: src/reduce.c:401
#: src/reduce.c:402
msgid " and "
msgstr " ve "
#: src/reduce.c:404
#: src/reduce.c:405
#, c-format
msgid "%d useless rule"
msgid_plural "%d useless rules"
@@ -429,81 +407,70 @@ msgstr[1] "%d yarars
msgid "start symbol %s does not derive any sentence"
msgstr "Baþlangýç simgesi %s herhangi bir cümleden türemez"
#: scan-gram.l:202
#, c-format
msgid ": invalid character: `%c'\n"
#: src/scan-gram.l:157
msgid "stray `,' treated as white space"
msgstr ""
#: scan-gram.l:246
#, fuzzy
msgid ": unexpected end of file in a comment\n"
msgstr "beklenmeyen dosya sonu"
#: scan-gram.l:274 scan-gram.l:412
#, fuzzy
msgid ": unexpected end of file in a string\n"
msgstr "beklenmeyen dosya sonu"
#: scan-gram.l:311 scan-gram.l:383
#, fuzzy
msgid ": unexpected end of file in a character\n"
msgstr "beklenmeyen dosya sonu"
#: scan-gram.l:332
#: src/scan-gram.l:216
#, fuzzy, c-format
msgid ": invalid escape: %s\n"
msgid "invalid directive: %s"
msgstr "geçersiz girdi: %s"
#: src/scan-gram.l:236 src/scan-gram.l:785 src/scan-gram.l:853
#, c-format
msgid "integer out of range: %s"
msgstr ""
#: src/scan-gram.l:281
#, fuzzy, c-format
msgid "invalid character: %s"
msgstr "bilinmeyen karakter: %s"
#: src/scan-gram.l:405 src/scan-gram.l:415 src/scan-gram.l:434
#, fuzzy, c-format
msgid "invalid escape sequence: %s"
msgstr "geçersiz deðer: %s%d"
#: scan-gram.l:353
#: src/scan-gram.l:439
#, fuzzy, c-format
msgid ": unrecognized escape: %s\n"
msgid "unrecognized escape sequence: %s"
msgstr "tanýnmayan: %s"
#: scan-gram.l:473
#, fuzzy
msgid ": unexpected end of file in a braced code\n"
msgstr "beklenmeyen dosya sonu"
#: src/scan-gram.l:524
#, c-format
msgid "missing `{' in `%s'"
msgstr ""
#: scan-gram.l:502
#, fuzzy
msgid ": unexpected end of file in a prologue\n"
msgstr "beklenmeyen dosya sonu"
#: scan-gram.l:560
#: src/scan-gram.l:757
#, c-format
msgid "$$ of `%s' has no declared type"
msgstr "`%s''in $$'ý bildirilmiþ tip deðil"
#: scan-gram.l:577 scan-gram.l:664
#, c-format
msgid "invalid value: %s%d"
msgstr "geçersiz deðer: %s%d"
#: scan-gram.l:584
#: src/scan-gram.l:776
#, c-format
msgid "$%d of `%s' has no declared type"
msgstr "`%2$s''in %1$d'i bildirilmiþ tip deðil"
#: scan-gram.l:595 scan-gram.l:612 scan-gram.l:671 scan-gram.l:688
#, c-format
msgid "%s is invalid"
msgstr "%s geçersizdir"
#: src/scan-gram.l:820 src/scan-gram.l:887
#, fuzzy, c-format
msgid "invalid value: %s"
msgstr "geçersiz deðer: %s%d"
#: src/state.c:145
#, c-format
msgid "too many states (max %d)"
msgstr "çok fazla durum (en fazla %d)"
#: src/scan-gram.l:978
#, fuzzy, c-format
msgid "missing `%s' at end of file"
msgstr "dosyanýn sonunda sonlandýrýlmamýþ dizge"
#: src/symlist.c:97 src/symlist.c:109
#: src/symlist.c:97 src/symlist.c:108
msgid "invalid $ value"
msgstr "geçersiz $ deðeri"
#: src/symtab.c:81
#: src/symtab.c:84
#, c-format
msgid "type redeclaration for %s"
msgstr "%s için yeniden tip bildirimi"
#: src/symtab.c:98 src/symtab.c:117
#: src/symtab.c:101 src/symtab.c:119
#, fuzzy, c-format
msgid "%s redeclaration for %s"
msgstr "%s için yeniden tip bildirimi"
@@ -513,225 +480,259 @@ msgstr "%s i
msgid "redefining precedence of %s"
msgstr "%s'in önceliði tekrar tanýmlandý"
#: src/symtab.c:157
#: src/symtab.c:156
#, c-format
msgid "symbol %s redefined"
msgstr "%s simgesi yeniden tanýmlandý"
#: src/symtab.c:180
#: src/symtab.c:179
#, fuzzy, c-format
msgid "redefining user token number of %s"
msgstr "%s'in önceliði tekrar tanýmlandý"
#: src/symtab.c:225
#: src/symtab.c:206
#, c-format
msgid "symbol %s is used, but is not defined as a token and has no rules"
msgstr ""
"simge %s kullanýldý, fakat bir andaç olarak tanýmlanmadý ve kurallarý yok"
#: src/symtab.c:244
#: src/symtab.c:231
#, c-format
msgid "symbol `%s' used more than once as a literal string"
msgstr "simge `%s' bir harfiyen uyumlu dizgi gibi birden fazla kullanýldý"
#: src/symtab.c:247
#: src/symtab.c:234
#, c-format
msgid "symbol `%s' given more than one literal string"
msgstr "simge `%s' bir harfiyen uyumlu dizgi gibi birden fazla verilmiþ"
#: src/symtab.c:281
#: src/symtab.c:270
#, c-format
msgid "conflicting precedences for %s and %s"
msgstr "%s ve %s için çeliþen öncelikler"
#: src/symtab.c:293
#: src/symtab.c:282
#, fuzzy, c-format
msgid "conflicting associativities for %s (%s) and %s (%s)"
msgstr "%s ve %s için çeliþen birleþmeli deðerler"
#: src/symtab.c:363
#: src/symtab.c:367
#, c-format
msgid "tokens %s and %s both assigned number %d"
msgstr "%s ve %s andaçlarýnýn her ikisi %d sayýsýna atandý"
#: src/symtab.c:568
#: src/symtab.c:590
#, c-format
msgid "the start symbol %s is undefined"
msgstr "baþlangýç simgesi %s tanýmlanmadý"
#: src/symtab.c:572
#: src/symtab.c:594
#, c-format
msgid "the start symbol %s is a token"
msgstr "baþlangýç simgesi %s bir andaçtýr"
#: lib/argmatch.c:161
#: lib/argmatch.c:129
#, fuzzy, c-format
msgid "invalid argument %s for %s"
msgstr "geçersiz deðer: %s%d"
#: lib/argmatch.c:162
#: lib/argmatch.c:130
#, c-format
msgid "ambiguous argument %s for %s"
msgstr ""
#: lib/argmatch.c:181
#: lib/argmatch.c:149
msgid "Valid arguments are:"
msgstr ""
#: lib/bitset_stats.c:226
#: lib/bitset_stats.c:178
#, c-format
msgid "%d bitset_allocs, %d freed (%.2f%%).\n"
msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
msgstr ""
#: lib/bitset_stats.c:229
#: lib/bitset_stats.c:181
#, c-format
msgid "%d bitset_sets, %d cached (%.2f%%)\n"
msgid "%u bitset_sets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:232
#: lib/bitset_stats.c:184
#, c-format
msgid "%d bitset_resets, %d cached (%.2f%%)\n"
msgid "%u bitset_resets, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:235
#: lib/bitset_stats.c:187
#, c-format
msgid "%d bitset_tests, %d cached (%.2f%%)\n"
msgid "%u bitset_tests, %u cached (%.2f%%)\n"
msgstr ""
#: lib/bitset_stats.c:239
#: lib/bitset_stats.c:191
#, c-format
msgid "%d bitset_lists\n"
msgid "%u bitset_lists\n"
msgstr ""
#: lib/bitset_stats.c:241
#: lib/bitset_stats.c:193
msgid "count log histogram\n"
msgstr ""
#: lib/bitset_stats.c:244
#: lib/bitset_stats.c:196
msgid "size log histogram\n"
msgstr ""
#: lib/bitset_stats.c:247
#: lib/bitset_stats.c:199
msgid "density histogram\n"
msgstr ""
#: lib/bitset_stats.c:264
#: lib/bitset_stats.c:213
msgid ""
"Bitset statistics:\n"
"\n"
msgstr ""
#: lib/bitset_stats.c:267
#: lib/bitset_stats.c:216
#, c-format
msgid "Accumulated runs = %d\n"
msgid "Accumulated runs = %u\n"
msgstr ""
#: lib/bitset_stats.c:311
#: lib/bitset_stats.c:260 lib/bitset_stats.c:265
msgid "Could not read stats file."
msgstr ""
#: lib/bitset_stats.c:313
#: lib/bitset_stats.c:262
msgid "Bad stats file size.\n"
msgstr ""
#: lib/bitset_stats.c:339
#: lib/bitset_stats.c:288 lib/bitset_stats.c:290
msgid "Could not write stats file."
msgstr ""
#: lib/bitset_stats.c:343
#: lib/bitset_stats.c:293
msgid "Could not open stats file for writing."
msgstr ""
#: lib/getopt.c:662
#: lib/getopt.c:688 lib/getopt.c:700
#, c-format
msgid "%s: option `%s' is ambiguous\n"
msgstr "%s: `%s' seçeneði belirsiz\n"
#: lib/getopt.c:687
#: lib/getopt.c:733 lib/getopt.c:737
#, c-format
msgid "%s: option `--%s' doesn't allow an argument\n"
msgstr "%s: `--%s' seçeneði argümansýz kullanýlýr\n"
#: lib/getopt.c:692
#: lib/getopt.c:746 lib/getopt.c:751
#, c-format
msgid "%s: option `%c%s' doesn't allow an argument\n"
msgstr "%s: seçenek `%c%s' argümansýz kullanýlýr\n"
#: lib/getopt.c:710 lib/getopt.c:883
#: lib/getopt.c:787 lib/getopt.c:800 lib/getopt.c:1089 lib/getopt.c:1102
#, c-format
msgid "%s: option `%s' requires an argument\n"
msgstr "%s: `%s' seçeneði bir argümanla kullanýlýr\n"
#: lib/getopt.c:739
#: lib/getopt.c:838 lib/getopt.c:841
#, c-format
msgid "%s: unrecognized option `--%s'\n"
msgstr "%s: `--%s' seçeneði bilinmiyor\n"
#: lib/getopt.c:743
#: lib/getopt.c:849 lib/getopt.c:852
#, c-format
msgid "%s: unrecognized option `%c%s'\n"
msgstr "%s: `%c%s' seçeneði bilinmiyor\n"
#: lib/getopt.c:769
#: lib/getopt.c:899 lib/getopt.c:902
#, c-format
msgid "%s: illegal option -- %c\n"
msgstr "%s: kuraldýþý seçenek -- %c\n"
#: lib/getopt.c:772
#: lib/getopt.c:908 lib/getopt.c:911
#, c-format
msgid "%s: invalid option -- %c\n"
msgstr "%s: geçersiz seçenek -- %c\n"
#: lib/getopt.c:802 lib/getopt.c:932
#: lib/getopt.c:958 lib/getopt.c:969 lib/getopt.c:1155 lib/getopt.c:1168
#, c-format
msgid "%s: option requires an argument -- %c\n"
msgstr "%s: seçenek bir argümanla kullanýlýr -- %c\n"
#: lib/getopt.c:849
#: lib/getopt.c:1021 lib/getopt.c:1032
#, c-format
msgid "%s: option `-W %s' is ambiguous\n"
msgstr "%s: `-W %s' seçeneði belirsiz\n"
#: lib/getopt.c:867
#: lib/getopt.c:1056 lib/getopt.c:1068
#, c-format
msgid "%s: option `-W %s' doesn't allow an argument\n"
msgstr "%s: `-W %s' seçeneði argümansýz kullanýlýr\n"
#: lib/obstack.c:496 lib/obstack.c:499 lib/xmalloc.c:66
#: lib/obstack.c:487 lib/obstack.c:490 lib/xmalloc.c:63
msgid "memory exhausted"
msgstr "bellek tükendi"
#: lib/quotearg.c:274
#: lib/quotearg.c:236
msgid "`"
msgstr "`"
#: lib/quotearg.c:275
#: lib/quotearg.c:237
msgid "'"
msgstr "'"
#: lib/timevar.c:466
#: lib/subpipe.c:187
#, c-format
msgid "subsidiary program `%s' could not be invoked"
msgstr ""
#: lib/subpipe.c:189
#, c-format
msgid "subsidiary program `%s' not found"
msgstr ""
#: lib/subpipe.c:191
#, c-format
msgid "subsidiary program `%s' failed"
msgstr ""
#: lib/subpipe.c:192
#, c-format
msgid "subsidiary program `%s' failed (exit status %d)"
msgstr ""
#: 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 ""
#~ msgid "too many states (max %d)"
#~ msgstr "çok fazla durum (en fazla %d)"
#~ msgid "reduce"
#~ msgstr "indirgeme"
#~ msgid "shift"
#~ msgstr "shift"
#~ msgid "an error"
#~ msgstr "bir hata"
#~ msgid "%d shift/reduce conflict"
#~ msgid_plural "%d shift/reduce conflicts"
#~ msgstr[0] "%d öteleme/indirgeme çeliþkisi"
#~ msgstr[1] "%d öteleme/indirgeme çeliþkisi"
#~ msgid "and"
#~ msgstr "ve"
#~ msgid "State %d contains "
#~ msgstr "%d durumu içerir"
#~ msgid "conflicts: "
#~ msgstr "çeliþkiler: "
#~ msgid "%s contains "
#~ msgstr "%s içerir"
@@ -739,12 +740,24 @@ msgstr ""
#~ msgid "`%s' is no longer supported"
#~ msgstr "`%s' artýk desteklenmeyecek"
#~ msgid "%s: no grammar file given\n"
#~ msgstr "%s: gramer dosyasý verilmemiþ\n"
#~ msgid "%s: extra arguments ignored after `%s'\n"
#~ msgstr "%s: '%s' den sonraki argümanlar yoksayýldý\n"
#~ msgid "too many gotos (max %d)"
#~ msgstr "gotos çok fazla (en fazla %d)"
#~ msgid "unexpected `/' found and ignored"
#~ msgstr "beklenmeyen `/' bulundu ve yoksayýldý"
#~ msgid "unterminated comment"
#~ msgstr "sonlandýrýlmamýþ açýklama"
#~ msgid "unexpected end of file"
#~ msgstr "beklenmeyen dosya sonu"
#~ msgid "unescaped newline in constant"
#~ msgstr "sabit içinde kaçamayan yeni satýr"
@@ -812,12 +825,12 @@ msgstr ""
#~ msgid " Skipping to next %c"
#~ msgstr " Sonraki %c'ye atlanýyor"
#~ msgid "unterminated string at end of file"
#~ msgstr "dosyanýn sonunda sonlandýrýlmamýþ dizge"
#~ msgid "unterminated string"
#~ msgstr "sonlandýrýlmamýþ dizge"
#~ msgid "%s is invalid"
#~ msgstr "%s geçersizdir"
#~ msgid "unterminated `%{' definition"
#~ msgstr "`%{' tanýmlamasý sonlandýrýlmamýþ"
@@ -857,9 +870,6 @@ msgstr ""
#~ msgid "no input grammar"
#~ msgstr "girdi grameri yok"
#~ msgid "unknown character: %s"
#~ msgstr "bilinmeyen karakter: %s"
#~ msgid "ill-formed rule: initial symbol not followed by colon"
#~ msgstr "kötü-biçemli kural: baþlangýç simgesini takip eden \":\" yok"
@@ -869,14 +879,17 @@ msgstr ""
#~ msgid "previous rule lacks an ending `;'"
#~ msgstr "önceki kuralda bir bitiþ `;' eksik"
#~ msgid "two @prec's in a row"
#~ msgstr "bir satýrda iki @prec"
#~ msgid "%%guard present but %%semantic_parser not specified"
#~ msgstr "%%guard sunulmuþ fakat %%semantic_parser belirlenmemiþ"
#~ msgid "two actions at end of one rule"
#~ msgstr "bir kuralýn sonunda iki eylem"
#~ msgid "invalid input: %s"
#~ msgstr "geçersiz girdi: %s"
#~ msgid "too many symbols (tokens plus nonterminals); maximum %d"
#~ msgstr "çok fazla simge var (andaçlar ve deðiþken simgeler); en fazla %d"
#~ msgid "maximum table size (%d) exceeded"
#~ msgstr "en büyük tablo uzunluðu (%d) aþýldý"

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