Akim Demaille [Fri, 3 Nov 2000 16:52:45 +0000 (16:52 +0000)]
Don't use `atexit'.
* src/files.c (obstack_save): New function.
(done): Rename as...
(output_files): this.
Use `obstack_save'.
* src/main.c (main): Don't use `atexit' to register `done', since
it no longer has to remove tmp files, just call `output_files'
when there are no errors.
Akim Demaille [Thu, 2 Nov 2000 13:38:12 +0000 (13:38 +0000)]
Remove the last uses of mktemp and unlink/delete.
* src/files.c (fdefines, ftable): Removed.
(defines_ostack, table_obstack): New.
Adjust dependencies of the former into uses of the latter.
* src/output.c (output_short_or_char_table, output_short_table):
Convert to using obstacks.
* src/reader.c (copy_comment2): Accept one FILE * and two
obstacks.
(output_token_defines, reader_output_yylsp): Use obstacks.
* src/system.h (obstack_fgrow3): New.
Akim Demaille [Wed, 1 Nov 2000 17:05:54 +0000 (17:05 +0000)]
Change each use of `fattrs' into a use of `attrs_obstack'.
* src/reader.c (copy_at): Typo: s/yylloc/yyloc/.
* src/files.c (fattrs): Remove.
(attrs_obstack): New.
Adjust all dependencies.
(done): If SEMANTIC_PARSER, dump attrs_obstack into attrsfile.
Akim Demaille [Wed, 1 Nov 2000 16:03:50 +0000 (16:03 +0000)]
Introduce obstacks.
Change each use of `faction' into a use of `action_obstack'.
* lib/obstack.h, lib/obstack.c: New files.
* src/files.c (faction): Remove.
(action_obstack): New.
Adjust all dependencies.
Akim Demaille [Mon, 16 Oct 2000 18:33:38 +0000 (18:33 +0000)]
* src/output.c (output_short_or_char_table): New function.
(output_short_table, output_token_translations): Use it.
(goto_actions): Use output_short_table.
Akim Demaille [Mon, 16 Oct 2000 18:10:46 +0000 (18:10 +0000)]
* src/symtab.c (bucket_new): New function.
(getsym): Use it.
* src/output.c (output_short_table): New argument to display the
comment associated with the table.
Adjust dependencies.
(output_gram): Use it.
(output_rule_data): Nicer output layout for YYTNAME.
Akim Demaille [Mon, 16 Oct 2000 18:06:29 +0000 (18:06 +0000)]
* src/reader.c (copy_comment2): Expect the input stream to be on
the `/' which is suspected to open a comment, instead of being
called after `//' or `/*' was read.
(copy_comment, copy_definition, parse_union_decl, copy_action)
(copy_guard): Adjust.
Akim Demaille [Wed, 4 Oct 2000 11:52:53 +0000 (11:52 +0000)]
When a literal string is used to define two different tokens,
`bison -v' segfaults.
Reported by Piotr Gackiewicz, and fixed by Neil Booth.
* tests/regression.m4: New file.
Include the core of the sample provided by Piotr Gackiewicz.
* src/reader.c (parse_token_decl): Diagnose bad cases, and proceed
properly.
Akim Demaille [Mon, 2 Oct 2000 10:20:59 +0000 (10:20 +0000)]
The location tracking mechanism is precious for parse error
messages. Nevertheless, it is enabled only when `@n' is used in
the grammar, which is a different issue (you can use it in error
message, but not in the grammar per se). Therefore, there should
be another means to enable it.
* src/getargs.c (getargs): Support `--locations'.
(usage): Report it.
* src/getargs.h (locationsflag): Export it.
* src/lex.c (percent_table): Support `%locations'.
* src/reader.c (yylsp_needed): Remove this variable, now replaced
with `locationsflag'.
* doc/bison.texinfo: Document `--locations' and `%locations'.
Sort the options.
* tests/calc.m4: Test it.
For regularity of the names, replace each
(nolineflag, toknumflag, rawtokenumflag, noparserflag): with...
(no_lineflag, token_tableflag, rawflag, no_parserflag): this.
In addition replace each `flag' with `_flag'.
Akim Demaille [Mon, 2 Oct 2000 09:05:32 +0000 (09:05 +0000)]
Also test parse error messages, including with YYERROR_VERBOSE.
* tests/calc.m4 (calc.y): Add support for `exp = exp' (non
associative).
Use it to check the computations.
Use it to check `nonassoc' is honored.
(AT_DATA_CALC_Y): Equip `calc.y' with YYERROR_VERBOSE when passed
`--yyerror-verbose'.
(_AT_CHECK_CALC): Adjust to this option.
(_AT_CHECK_CALC_ERROR): New macro to check parse error messages.
Akim Demaille [Mon, 2 Oct 2000 09:04:40 +0000 (09:04 +0000)]
Test also `--verbose', `--defines' and `--name-prefix'. Testing
the latter demonstrates a flaw in the handling of non debugging
parsers introduced by myself on 2000-03-16: `#define yydebug 0'
was used in order to simplify:
#if YYDEBUG
if (yydebug)
{
...
}
#endif
into
if (yydebug)
{
...
}
unfortunately this leads to a CPP conflict when
`--name-prefix=foo' is used since it produces `#define yydebug
foodebug'.
* src/bison.s1 [!YYDEBUG]: Do not define yydebug.
(YYDPRINTF): New macro.
Spread its use.
* tests/calc.m4 (AT_CHECK_CALC): Do require a title, build it from
the bison options.
Also test `--verbose', `--defines' and `--name-prefix'.
Akim Demaille [Mon, 2 Oct 2000 09:03:20 +0000 (09:03 +0000)]
Improve the readability of the produced parsers.
* src/bison.s1: Formatting changes.
Improve the comment related to the `$' mark.
(yydefault): Don't fall through to `yyresume': `goto' there.
* src/output.c (output_parser): When the `$' is met, skip the end
of its line.
New variable, `number_of_dollar_signs', to check there's exactly
one `$' in the parser skeleton.
Akim Demaille [Mon, 2 Oct 2000 08:51:00 +0000 (08:51 +0000)]
* src/gram.h (associativity): New enum type which replaces the
former CPP macros `RIGHT_ASSOC', `LEFT_ASSOC' and `NON_ASSOC' with
`right_assoc', `left_assoc' and `non_assoc'.
Adjust all dependencies.
* src/reader.c: Formatting changes.
(LTYPESTR): Don't define it, use it as a literal in
`reader_output_yylsp'.
* src/symtab.h (symbol_class): New enum type which replaces the
former CPP macros `SUNKNOWN', `STOKEN and `SNTERM' with
`sunknown', `stoken and `snterm'.
Akim Demaille [Mon, 2 Oct 2000 08:48:32 +0000 (08:48 +0000)]
Use the more standard files `xalloc.h' and `xmalloc.c' instead of
Bison's `allocate.c' and `alloc.h'. This patch was surprisingly
difficult and introduced a lot of core dump. It turns out that
Bison used an implementation of `xmalloc' based on `calloc', and
at various places it does depend upon the initialization to 0. I
have not tried to isolate the pertinent places, and all the former
calls to Bison's `xmalloc' are now using `XCALLOC'. Someday,
someone should address this issue.
* src/allocate.c, src/alloc.h, m4/bison-decl.m4: Remove.
* lib/xmalloc.c, lib/xalloc.h, m4/malloc.m4, m4/realloc.m4: New
files.
Adjust dependencies.
* src/warshall.h: New file.
Propagate.
Akim Demaille [Mon, 2 Oct 2000 08:22:23 +0000 (08:22 +0000)]
* src/state.h (nstates, final_state, first_state, first_shift)
(first_reduction): Move their exportation from here...
* src/LR0.h: to here.
Adjust dependencies.
* src/getargs.c (statisticsflag): New variable.
Add support for `--statistics'.
Adjust dependencies.
Remove a lot of now useless `extern' statements in most files.
Akim Demaille [Mon, 2 Oct 2000 08:10:26 +0000 (08:10 +0000)]
* src/print.h: New file.
Propagate its use.
* src/print.c: Formatting and ordering changes.
(verbose, terse): Replace with...
(print_results): this new function.
Adjust dependencies.
Akim Demaille [Mon, 2 Oct 2000 08:04:25 +0000 (08:04 +0000)]
* src/reduce.h: New file.
Propagate its inclusion.
* src/reduce.c: Topological sort and other formatting changes.
(bool, TRUE, FALSE): Move their definition to...
* src/system.h: here.
Akim Demaille [Mon, 2 Oct 2000 08:00:34 +0000 (08:00 +0000)]
* src/reader.h: New file.
Propagate its use instead of tedious list of `extern' and
prototypes.
* src/reader.c: Formatting changes, topological sort,
s/register//.
Akim Demaille [Mon, 2 Oct 2000 07:53:36 +0000 (07:53 +0000)]
`user_toknums' is output as a `short[]' in `output.c', while it is
defined as a `int[]' in `reader.c'. For consistency with the
other output tables, `user_toknums' is now defined as a table of
shorts.
* src/reader.c (user_toknums): Be a short table instead of an int
table.
Adjust dependencies.
Factor the short table outputs.
* src/output.c (output_short_table): New function.
* src/output.c (output_gram, output_stos, output_rule_data)
(output_base, output_table, output_check): Use it.
Akim Demaille [Mon, 2 Oct 2000 07:50:14 +0000 (07:50 +0000)]
* src/output.c (output): Topological sort of the functions, in
order to get rid of the `static' prototypes.
No longer use `register'.
* src/output.h: New file.
Propagate its inclusion in files explicitly prototyping functions
from output.c.
* src/acconfig.h: Don't protect config.h against multiple
inclusion.
Don't define PARAMS.
* src/system.h: Define PARAMS.
Remove some of the ad-hoc CPP magic for DOS, VMS etc.: this is the
purpose of config.h. system.h must not try to fix wrong
definitions in config.h.
* tests/atgeneral.m4: Update from Autoconf.
* tests/calc.m4 (_AT_DATA_CALC_Y, AT_DATA_CALC_Y, _AT_CHECK_CALC)
(AT_CHECK_CALC): New macros.
Use these macros to test bison with options `', `--raw',
`--debug', `--yacc', `--yacc --debug'.
* src/output.c: Formatting changes.
* src/machine.h: Remove, leaving its contents in...
* src/system.h: here.
Include stdio.h.
Adjust all dependencies on stdio.h and machine.h.
* src/getargs.h: New file.
Let all `extern' declarations about getargs.c be replaced with
inclusion of `getargs.h'.
* src/Makefile.am (noinst_HEADERS): Adjust.
* tests/calc.m4 (yyin): Be initialized in main, not on the global
scope.
(yyerror): Returns void, not int.
* doc/bison.texinfo: Formatting changes.
First set of tests: use the `calc' example from the documentation.
* src/bison.s1 (yyparse): Condition the code using `yytname' which
is defined only when YYDEBUG is.
* m4/atconfig.m4 (AT_CONFIG): Adjust to Autoconf 2.13.
* src/files.c (tryopen, tryclose): Formatting changes.
Move to the top and be static.
* src/reader.c (read_signed_integer): Likewise.
* tests/calc.m4: New file.
* Makefile.am, suite.m4: Adjust.
* m4/atconfig.m4: Set BISON_SIMPLE and BISON_HAIRY.
* m4/m4.m4, m4/atconfig.m4: New files.
* m4/Makefile.am (EXTRA_DIST): Adjust.
* tests/suite.m4, tests/Makefile.am, tests/atgeneral.m4: New
files.
* src/getargs.c: Display a more standard --version message.
* src/reader.c (reader): Formatting changes.
No longer depend upon VERSION_STRING.
* configure.in: No longer use `dnl'.
Set up the test suite and the new directory `tests/.
(VERSION_STRING): Remove.
* src/reader.c (copy_comment2): New function, same as former
`copy_comment', but outputs into two FILE *.
(copy_comment): Use it.
(parse_union_decl): Use it.
(get_type, parse_start_decl): Use the same `invalid' message.
(parse_start_decl, parse_union_decl): Use the same `multiple'
message.
(parse_union_decl, copy_guard, copy_action): Use the same
`unmatched' message.
* m4/Makefile.am (EXTRA_DIST): Add `warning.m4'.
Akim Demaille [Fri, 17 Mar 2000 11:37:09 +0000 (11:37 +0000)]
* reader.c (copy_definition): Use copy_string and copy_comment.
Removed now unused `match', `ended', `cplus_comment'.
(copy_comment, copy_string): Moved, to be visible from
copy_definition.
Akim Demaille [Fri, 17 Mar 2000 11:32:28 +0000 (11:32 +0000)]
* reader.c (copy_comment): New function, factored out from:
(copy_action): Use it. Removed now unused `match', `ended',
`cplus_comment'.
(copy_guard): Likewise.
Akim Demaille [Fri, 17 Mar 2000 11:30:24 +0000 (11:30 +0000)]
Change the handling of @s so that they behave exactly like $s.
There is now a pseudo variable @$ (readble and writable), location
of the lhs of the rule (by default ranging from the location of
the first symbol of the rhs, to the location of the last symbol,
or, if the rhs is empty, YYLLOC).
* src/bison.s1 [YYLSP_NEEDED] (yyloc): New variable, twin of
yyval.
(yyparse): When providing a default semantic action, provide a
default location action.
(after the $): No longer change `*YYLSP', just stack YYLOC the
same way you stack YYVAL.
* src/reader.c (read_declarations): Use warns.
(copy_guard, case '@'): Also recognize `@$', expanded as `YYLOC'.
(copy_action, case '@'): Likewise.
Use a standard error message, to save useless work from
translators.
Akim Demaille [Thu, 16 Mar 2000 16:02:16 +0000 (16:02 +0000)]
* src/bison.s1 [!YYDEBUG]: Define yydebug to 0. This allows to
remove most `#if YYDEBUG != 0', since `if (yydebug)' is enough.
One `#if YYDEBUG' remains, since it uses variables which are
defined only if `YYDEBUG != 0'.
Akim Demaille [Thu, 16 Mar 2000 15:54:46 +0000 (15:54 +0000)]
Do not hard code values of directories in `configure.in'.
Update the `configure' tool chain.
* configure.in (XPFILE, XPFILE1, LOCALEDIR): Remove, handled by
src/makefile.am.
(VERSION_STRING): Use the third arg of AC_DEFINE_UNQUOTED.
(AC_OUTPUT): Add m4/Makefile.
Bump to bison 1.28a, 1.29 has never been released.
* acconfig.h (XPFILE, XPFILE1, LOCALEDIR): Remove, since they are
handled via src/Makefile.am.
(VERSION_STRING, PROTOTYPES, ENABLE_NLS, HAVE_CATGETS,
HAVE_GETTEXT, HAVE_LC_MESSAGES, HAVE_STPCPY): Remove, handled by
autoheader.
* Makefile.am (SUBDIRS): Add m4.
(ACLOCAL_AM_FLAGS): New variable.
(AUTOMAKE_OPTIONS): Add check-news.
* src/Makefile.am (bison.simple): Use awk to replace #line lines with
the proper line number and file name.
(DEFS): Propagate the location of bison library files and of the
locale files.
(INCLUDES): Added `-I ..' so that one can compile with srcdir !=
builddir.
* acinclude.m4: Remove, replaced by the directory m4.
* m4/Makefile.am (EXTRA_DIST): New variable.
* m4/gettext.m4: New file, from the fileutils.
* m4/lcmessage.m4: Likewise
* m4/progtest.m4: Likewise.
* m4/bison-decl.m4: New file, extracted from former acinclude.m4.