Commit Graph

1972 Commits

Author SHA1 Message Date
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 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 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 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
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
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
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 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 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 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
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
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
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
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 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 5c16c6b13a Version 1.75a. 2002-10-25 06:05:50 +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
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
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
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 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
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
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
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