Di-an Jan [Mon, 17 Nov 2008 10:01:41 +0000 (11:01 +0100)]
Handles several --enable-gcc-warnings.
* src/getargs.c (command_line_location): Set parameters to void.
* src/output.c (symbol_type_name_cmp): Make static.
(symbols_by_type_name): Set parameters to void.
(symbol_definitions_output): Remove unused parameter. Rename as...
(prepare_symbol_definitions): this.
(muscles_output): Move symbol_definitions_output to...
(output): here as prepare_symbol_definitions.
* tests/c++.at (AT_CHECK_VARIANTS): Remove unused parameters of main.
(AT_CHECK_NAMESPACE): Make unused parameter lloc unnamed.
Di-an Jan [Mon, 17 Nov 2008 09:59:49 +0000 (10:59 +0100)]
Use AT_DATA_GRAMMAR for C++ variants compiled tests.
* tests/c++.at (AT_CHECK_VARIANTS): Fixes tests 198-202.
Use AT_DATA_GRAMMAR instead of AT_DATA for compiled tests.
Akim Demaille [Sun, 16 Nov 2008 18:52:33 +0000 (19:52 +0100)]
Fix ChangeLog.
Akim Demaille [Sun, 16 Nov 2008 18:49:35 +0000 (19:49 +0100)]
Add missing $(EXEEXT).
* doc/local.mk ($(CROSS_OPTIONS_TEXI)): The target is
"src/bison$(EXEEXT)".
Reported by Di-an Jan.
Akim Demaille [Sun, 16 Nov 2008 18:46:16 +0000 (19:46 +0100)]
Update ignores.
* data/.cvsignore, data/.gitignore, examples/.cvsignore,
* examples/.gitignore:
Remove.
* build-aux/.cvsignore, build-aux/.gitignore, doc/.cvsignore,
* doc/.gitignore, etc/.cvsignore, etc/.gitignore, src/.cvsignore,
* src/.gitignore, tests/.cvsignore, tests/.gitignore:
Remove MAkefile and Makefile.in.
Akim Demaille [Sat, 15 Nov 2008 13:56:21 +0000 (14:56 +0100)]
Update TODO.
* TODO: Update.
Akim Demaille [Fri, 24 Oct 2008 01:05:27 +0000 (20:05 -0500)]
Formatting changes.
* tests/input.at: here.
Akim Demaille [Fri, 24 Oct 2008 01:02:52 +0000 (20:02 -0500)]
Remove duplicate header inclusion.
* src/LR0.c: here.
Akim Demaille [Sat, 15 Nov 2008 13:42:37 +0000 (14:42 +0100)]
Regen.
* src/parse-gram.h, src/parse-gram.c: Regen.
Akim Demaille [Sat, 15 Nov 2008 13:41:58 +0000 (14:41 +0100)]
Fixes.
Akim Demaille [Fri, 24 Oct 2008 01:01:48 +0000 (20:01 -0500)]
Support parametric types.
There are two issues to handle: first scanning nested angle bracket pairs
to support types such as std::pair< std::string, std::list<std::string> > >.
Another issue is to address idiosyncracies of C++: do not glue two closing
angle brackets together (otherwise it's operator>>), and avoid sticking
blindly a TYPE to the opening <, as it can result in '<:' which is a
digraph for '['.
* src/scan-gram.l (brace_level): Rename as...
(nesting): this.
(SC_TAG): New.
Implement support for complex tags.
(tag): Accept \n, but not <.
* data/lalr1.cc (b4_symbol_value, b4_symbol_value_template)
(b4_symbol_variant): Leave space around types as parameters.
* examples/variant.yy: Use nested template types and leading ::.
* src/parse-gram.y (TYPE, TYPE_TAG_ANY, TYPE_TAG_NONE, type.opt):
Rename as...
(TAG, TAG_ANY, TAG_NONE, tag.opt): these.
* tests/c++.at: Test parametric types.
Akim Demaille [Fri, 10 Oct 2008 15:04:23 +0000 (17:04 +0200)]
Test token.prefix.
This is not sufficient, but we test at least that the make_SYMBOL
interface is not affected by token.prefix. A more general test
will be implemented when the support of token.prefix is generalized
to more skeletons.
* tests/c++.at: One more variant test, using token.prefix.
Akim Demaille [Fri, 10 Oct 2008 14:58:22 +0000 (16:58 +0200)]
Test the make_TOKEN interface.
* tests/c++.at (AT_CHECK_VARIANTS): Require and use locations.
Factor the common code in yylex.
Use it to test "%define lex_symbol".
Akim Demaille [Fri, 10 Oct 2008 14:58:19 +0000 (16:58 +0200)]
Formatting change.
Akim Demaille [Fri, 10 Oct 2008 14:56:00 +0000 (16:56 +0200)]
Simplify code for variants bench marks.
* etc/bench.pl.in (&generate_grammar_list): Define and use
location_type.
Factor the common code in yylex.
Akim Demaille [Wed, 22 Oct 2008 12:15:25 +0000 (07:15 -0500)]
Better error message.
* bootstrap (find_tool): Fix the error message.
Akim Demaille [Wed, 22 Oct 2008 11:27:42 +0000 (06:27 -0500)]
Update variant.yy to newest interface.
* examples/variant.yy: Define lex_symbol.
Adjust.
Akim Demaille [Wed, 22 Oct 2008 11:23:34 +0000 (06:23 -0500)]
Don't use locations in variant.yy.
* examples/variant.yy: Adjust to not using locations.
Akim Demaille [Tue, 23 Sep 2008 16:18:07 +0000 (18:18 +0200)]
Comment changes.
* data/local.mk, etc/local.mk, examples/local.mk: Use Automake
comments for the license.
Akim Demaille [Tue, 23 Sep 2008 14:25:45 +0000 (16:25 +0200)]
Remove tests/Makefile.am.
* tests/Makefile.am: Rename as...
* tests/local.mk: this.
* Makefile.am, configure.ac: Adjust.
* Makefile.am (DISTCLEANFILES): Define.
(maintainer-check, maintainer-xml-check, maintainer-push-check):
Remove, we no longer need to bounce to the real targets.
Akim Demaille [Tue, 23 Sep 2008 14:19:21 +0000 (16:19 +0200)]
Comment changes.
Akim Demaille [Tue, 23 Sep 2008 14:18:36 +0000 (16:18 +0200)]
djgpp/local.mk.
* Makefile.am (EXTRA_DIST): Move djgpp related part to...
* djgpp/local.mk: this new file.
Akim Demaille [Tue, 23 Sep 2008 14:15:19 +0000 (16:15 +0200)]
Remove doc/Makefile.am.
* doc/Makefile.am: Rename as...
* doc/local.mk: this.
Adjust paths
* Makefile.am, configure.ac: Adjust.
* Makefile.am (MOSTLYCLEANFILES): New.
* src/local.mk: Adjust.
Akim Demaille [Tue, 23 Sep 2008 14:05:52 +0000 (16:05 +0200)]
Move sc_tight_scope into maint.mk.
It does not work, and I don't know how it was supposed to work: it seems
to be looking for sources in the build tree. I just moved it at a better
place, fixing it is still required.
* src/local.mk (echo): Remove.
(sc_tight_scope): Move to...
* maint.mk: here.
Akim Demaille [Sat, 15 Nov 2008 10:03:37 +0000 (11:03 +0100)]
Regen.
* src/parse-gram.h, src/parse-gram.c: Regen.
Akim Demaille [Tue, 23 Sep 2008 13:54:56 +0000 (15:54 +0200)]
Remove src/Makefile.am.
* src/Makefile.am: Rename as...
* src/local.mk: this.
Prefix all the paths with src/.
(AUTOMAKE_OPTIONS): Build object files in the sub dirs.
(AM_CPPFLAGS): Find find in builddir/src.
(YACC): Move the flags into...
(AM_YFLAGS): here.
* maint.mk (sc_tight_scope): Disable.
It used to bounce to the version in src/Makefile.am which is now
part of this very Makefile.
* Makefile.am, configure.ac: Adjust.
* src/scan-code-c.c, src/scan-code.l: We can no longer rely on
include "..." to find files "here": we are no longer in src/, so
qualify the includes with src/.
* doc/Makefile.am (PREPATH): No longer include the top_builddir
prefix.
(.x.1): Adjust to be able to create src/foo from the top level
Makefile, instead of going bounce to src/Makefile the creation of
foo.
Akim Demaille [Tue, 23 Sep 2008 13:45:03 +0000 (15:45 +0200)]
Remove useless variable.
* doc/Makefile.am (srcsrcdir): Remove.
Akim Demaille [Tue, 23 Sep 2008 13:05:51 +0000 (15:05 +0200)]
Remove data/Makefile.am.
* data/Makefile.am: Rename as...
* data/local.mk: this.
Adjust paths.
* Makefile.am, configure.ac: Adjust.
Akim Demaille [Tue, 23 Sep 2008 13:02:44 +0000 (15:02 +0200)]
Remove etc/Makefile.am.
* etc/Makefile.am: Rename as...
* etc/local.mk: this.
Adjust.
* Makefile.am, configure.ac: Adjust.
Akim Demaille [Tue, 23 Sep 2008 13:00:06 +0000 (15:00 +0200)]
Remove examples/local.mk.
examples/calc++/Makefile.am might be interesting to keep as is, since
it is an example in itself.
* examples/Makefile.am: Rename as...
* examples/local.mk: this.
Adjust.
* Makefile.am, configure.ac: Adjust.
Akim Demaille [Tue, 23 Sep 2008 12:48:11 +0000 (14:48 +0200)]
Remove build-aux/Makefile.am.
Recursive Makefiles are really way too slow, let's get rid of some of
them.
* build-aux/Makefile.am: Rename as...
* build-aux/local.mk: this.
Adjust paths.
* Makefile.am, configure.ac: Adjust.
Akim Demaille [Tue, 23 Sep 2008 11:49:41 +0000 (13:49 +0200)]
Provide convenience constructors for locations and positions.
* data/location.cc (position::position): Accept file, line and
column as arguments with default values.
Always qualify initial line and column literals as unsigned.
(location::location): Provide convenience constructors.
Akim Demaille [Thu, 4 Sep 2008 20:41:01 +0000 (22:41 +0200)]
Instead of using make_symbol<TOK_FOO>, generate make_FOO for each token type.
Using template buys us nothing, and makes it uselessly complex to
construct a symbol. Besides, it could not be generalized to other
languages, while make_FOO would work in C/Java etc.
* data/lalr1.cc (b4_symbol_): New.
(b4_symbol): Use it.
(b4_symbol_constructor_declaration_)
(b4_symbol_constructor_definition_): Instead of generating
specializations of an overloaded template function, just generate
several functions whose names are forged from the token names
without the token.prefix.
(b4_symbol_constructor_declarations): Generate them for all the
symbols, not just by class of symbol type, now that instead of
specializing a function template by the token, we generate a
function named after the token.
(b4_symbol_constructor_specialization_)
(b4_symbol_constructor_specializations): Remove.
* etc/bench.pl.in: Adjust to this new API.
Akim Demaille [Mon, 1 Sep 2008 14:58:13 +0000 (16:58 +0200)]
%define token.prefix.
Provide a means to add a prefix to the name of the tokens as output in the
generated files. Because of name clashes, it is good to have such a
prefix such as TOK_ that protects from names such as EOF, FILE etc.
But it clutters the grammar itself.
* data/bison.m4 (token.prefix): Empty by default.
* data/c.m4 (b4_token_enum, b4_token_define): Use it.
* data/lalr1.cc (b4_symbol): Ditto.
Akim Demaille [Mon, 1 Sep 2008 09:39:41 +0000 (11:39 +0200)]
Compute at M4 time some of the subtractions.
* data/lalr1.cc (b4_substract): New.
(b4_rhs_data): Use it.
Akim Demaille [Mon, 1 Sep 2008 08:51:46 +0000 (10:51 +0200)]
symbol::token.
This is allows the user to get the type of a token return by
yylex.
* data/lalr1.cc (symbol::token): New.
(yytoknum_): Define when %define lex_symbol, independently of
%debug.
(yytoken_number_): Move into...
(symbol::token): here, since that's the only use.
The other one is YYPRINT which was not officially supported
by lalr1.cc, and anyway it did not work since YYPRINT uses this
array under a different name (yytoknum).
Akim Demaille [Fri, 29 Aug 2008 18:29:20 +0000 (20:29 +0200)]
YYERRCODE.
* TODO (YYERRCODE): Mention the case of $undef.
Akim Demaille [Fri, 29 Aug 2008 18:11:22 +0000 (20:11 +0200)]
TODO: YYPRINT.
* TODO (YYPRINT): New.
Akim Demaille [Fri, 29 Aug 2008 17:48:50 +0000 (19:48 +0200)]
Comment changes.
* data/lalr1.cc, data/yacc.c: Fix the description of the
yytranslate and yytoknum tables.
Akim Demaille [Thu, 28 Aug 2008 09:50:09 +0000 (11:50 +0200)]
Define make_symbol in the header.
To reach good performances these functions should be inlined (yet this is
to measure precisely). To this end they must be available to the caller.
* data/lalr1.cc (b4_symbol_constructor_definition_): Qualify
location_type with the class name.
Since will now be output in the header, declare "inline".
No longer use b4_symbol_constructor_specializations, but
b4_symbol_constructor_definitions in the header.
Don't call it in the *.cc file.
Akim Demaille [Thu, 28 Aug 2008 12:07:29 +0000 (14:07 +0200)]
Define yytranslate in the header for lex_symbol.
* data/lalr1.cc: Move the invocation of b4_yytranslate_definition
into the header file when using %define lex_symbol.
(yytranslate_): Declare inline.
Akim Demaille [Thu, 28 Aug 2008 11:31:56 +0000 (13:31 +0200)]
Define the constructors of symbol_type in b4_symbol_constructor_definitions.
The constructors are called by the make_symbol functions, which a
forthcoming patch will move elsewhere. Hence the interest of putting them
together.
The stack_symbol_type does not need to be moved, it is used only by the
parser.
* data/lalr1.cc: Move symbol_type and symbol_base_type
constructors into...
(b4_symbol_constructor_definitions): here.
Adjust.
Akim Demaille [Thu, 28 Aug 2008 11:00:26 +0000 (13:00 +0200)]
Make it easier to move the definition of yytranslate_.
Forthcoming changes will make it possible to use yytranslate_
from outside the parser implementation file.
* data/lalr1.cc (b4_yytranslate_definition): New.
Use it.
Akim Demaille [Thu, 28 Aug 2008 09:50:14 +0000 (11:50 +0200)]
Remove useless class specification.
* data/lalr1.cc (b4_symbol_constructor_specialization_): No need
to refer to the class name to use a type defined by the class for
arguments of member functions.
Akim Demaille [Thu, 28 Aug 2008 08:32:14 +0000 (10:32 +0200)]
Finer input type for yytranslate.
This patch is debatable: the tradition expects yylex to return an int
which happens to correspond to token_number (which is an enum). This
allows for instance to return characters (such as '*' etc.). But this
goes against the stronger typing I am trying to have with the new
lex interface which return a symbol_type. So in this case, feed
yytranslate_ with a token_type.
* data/lalr1.cc (yytranslate_): When in %define lex-symbol,
expect a token_type.
Akim Demaille [Tue, 26 Aug 2008 20:09:30 +0000 (22:09 +0200)]
Honor lex-params in %define lex_symbol mode.
* data/lalr1.cc: Use b4_lex_param.
Akim Demaille [Tue, 26 Aug 2008 18:30:40 +0000 (20:30 +0200)]
Simplify names.
* src/output.c (symbol_definitions_output): Rename symbol
attributes type_name and has_type_name as type and has_type.
* data/lalr1.cc: Adjust uses.
Akim Demaille [Tue, 26 Aug 2008 18:25:58 +0000 (20:25 +0200)]
Use b4_type_names for the union type.
The union used to compute the size of the variant used to iterate over the
type of all the symbols, with a lot of redundancy. Now iterate over the
lists of symbols having the same type-name.
* data/lalr1.cc (b4_char_sizeof_): New.
(b4_char_sizeof): Use it.
Adjust to be called with a list of numbers instead of a single
number.
Adjust its caller for new-line issues.
Akim Demaille [Tue, 26 Aug 2008 18:10:03 +0000 (20:10 +0200)]
Define the "identifier" of a symbol.
Symbols may have several string representations, for instance if they
have an alias. What I call its "id" is a string that can be used as
an identifier. May not exist.
Currently the symbols which have the "tag_is_id" flag set are those that
don't have an alias. Look harder for the id.
* src/output.c (is_identifier): Move to...
* src/symtab.c (is_identifier): here.
* src/symtab.h, src/symtab.c (symbol_id_get): New.
* src/output.c (symbol_definitions_output): Use it to define "id"
and "has_id".
Remove the definition of "tag_is_id".
* data/lalr1.cc: Use the "id" and "has_id" whereever "tag" and
"tag_is_id" were used to produce code.
We still use "tag" for documentation.
Akim Demaille [Tue, 11 Nov 2008 15:41:28 +0000 (16:41 +0100)]
Regen.
* src/parse-gram.h, src/parse-gram.c: Regen.
Akim Demaille [Mon, 25 Aug 2008 11:52:51 +0000 (13:52 +0200)]
Locations are no longer required by lalr1.cc.
* data/lalr1.cc (_b4_args, b4_args): New.
Adjust all uses of locations to make them optional.
* tests/c++.at (AT_CHECK_VARIANTS): No longer use the locations.
(AT_CHECK_NAMESPACE): Check the use of locations.
* tests/calc.at (_AT_DATA_CALC_Y): Adjust to be usable with or
without locations with lalr1.cc.
Test these cases.
* tests/output.at: Check lalr1.cc with and without location
support.
* tests/regression.at (_AT_DATA_EXPECT2_Y, _AT_DATA_DANCER_Y):
Don't use locations.
Akim Demaille [Mon, 25 Aug 2008 11:43:00 +0000 (13:43 +0200)]
AT_FULL_COMPILE.
* tests/local.at (AT_FULL_COMPILE): New.
* tests/actions.at, tests/calc.at, tests/regression.at: Use it.
Akim Demaille [Thu, 21 Aug 2008 20:39:01 +0000 (22:39 +0200)]
Support parens in calc++.
* doc/bison.texinfo (Calc++ Scanner, Calc++ Parser): Support parens.
* examples/calc++/test (run): Check the expected output.
Adjust callers.
Check parens too.
Akim Demaille [Thu, 21 Aug 2008 20:12:35 +0000 (22:12 +0200)]
Simplify lalr1.cc since %defines is mandatory.
* data/lalr1.cc: Remove useless calls to b4_defines_if.
Akim Demaille [Thu, 21 Aug 2008 20:06:17 +0000 (22:06 +0200)]
TODO: yyfmt.
* TODO (yysyntax_error): New item.
Akim Demaille [Thu, 21 Aug 2008 20:04:27 +0000 (22:04 +0200)]
Prefer M4 to CPP.
* data/lalr1.cc: Use b4_error_verbose_if instead of #if
YYERROR_VERBOSE.
Akim Demaille [Thu, 21 Aug 2008 19:46:13 +0000 (21:46 +0200)]
Support i18n of the parse error messages.
* TODO (lalr1.cc/I18n): Remove.
* data/lalr1.cc (yysyntax_error_): Support the translation of the
error messages, as done in yacc.c.
Stay within the yy* pseudo namespace.
Akim Demaille [Thu, 21 Aug 2008 19:43:05 +0000 (21:43 +0200)]
More TODO.
* TODO (single stack, yysyntax_error): New.
Akim Demaille [Tue, 19 Aug 2008 19:39:03 +0000 (21:39 +0200)]
Make it possible to return a symbol_type from yylex.
* data/lalr1.cc (b4_lex_symbol_if): New.
(parse): When lex_symbol is defined, expected yylex to return the
complete lookahead.
* etc/bench.pl.in (generate_grammar_list): Extend to support this
yylex interface.
(bench_variant_parser): Exercise it.
Akim Demaille [Mon, 18 Aug 2008 20:54:57 +0000 (22:54 +0200)]
Remove useless bench case.
* etc/bench.pl.in (bench_variant_parser): VARIANT_DESTROY is
no longer used.
Akim Demaille [Mon, 18 Aug 2008 20:54:06 +0000 (22:54 +0200)]
Improve display of directives.
* etc/bench.pl.in (parse_term): Don't add useless eol.
Akim Demaille [Mon, 18 Aug 2008 20:53:15 +0000 (22:53 +0200)]
Use string_cast in the bench.
* etc/bench.pl.in (generate_grammar_list): Define and use
string_cast.
Akim Demaille [Mon, 18 Aug 2008 20:31:13 +0000 (22:31 +0200)]
Replace yychar with a Boolean.
* data/lalr1.cc (parse::yychar): Replace by...
(parse::yyempty): this.
Akim Demaille [Mon, 18 Aug 2008 20:21:17 +0000 (22:21 +0200)]
Factor the tables.
* TODO: New item.
Akim Demaille [Mon, 18 Aug 2008 20:16:40 +0000 (22:16 +0200)]
Let yytranslate handle the eof case.
* data/lalr1.cc (yytranslate_): Handle the EOF case.
Adjust callers.
No longer expect yychar to be equal to yyeof_, rather, test the
lookahead's (translated) kind.
Akim Demaille [Mon, 18 Aug 2008 19:31:06 +0000 (21:31 +0200)]
yychar cannot be empty in yyerrlab.
* TODO (yychar == yyempty_): New.
* data/lalr1.cc: Remove the handling of this case.
This eases forthcoming changes related to yychar and yytranslate.
Akim Demaille [Mon, 18 Aug 2008 18:21:13 +0000 (20:21 +0200)]
Bench: syntactic sugar for %define/#define.
* etc/bench.pl.in (parse_dirs): Support %d and #d with arguments.
(&bench_push_parser, bench_variant_parser): Use this feature.
(&eat): New.
Use it.
Akim Demaille [Mon, 18 Aug 2008 18:20:09 +0000 (20:20 +0200)]
Less memory pressure on the "list" bench.
* etc/bench.pl.in (generate_grammar_list): Do not accumulate all
the values, to limit memory pressure.
Akim Demaille [Mon, 18 Aug 2008 13:48:36 +0000 (15:48 +0200)]
Introduce make_symbol.
make_symbol provides a means to construct a full symbol (kind, value,
location) in a single shot. It is meant to be a Symbol constructor,
parameterized by the symbol kind so that overloading would prevent
incorrect kind/value pairs. Unfortunately parameterized constructors do
not work well in C++ (unless the parameter also appears as an argument,
which is not acceptable), hence the use of a function instead of a
constructor.
* data/lalr1.cc (b4_symbol_constructor_declaration_)
(b4_symbol_constructor_declarations)
(b4_symbol_constructor_specialization_)
(b4_symbol_constructor_specializations)
(b4_symbol_constructor_definition_)
(b4_symbol_constructor_definitions): New.
Use them where appropriate to generate declaration, declaration of
the specializations, and implementations of the templated
overloaded function "make_symbol".
(variant::variant): Always define a default ctor.
Also provide a copy ctor.
(symbol_base_type, symbol_type): New ctor overloads for value-less
symbols.
(symbol_type): Now public, so that functions such as yylex can use
it.
Akim Demaille [Mon, 18 Aug 2008 13:48:45 +0000 (15:48 +0200)]
Inform m4 whether a tag is a valid id.
* src/output.c (is_identifier): New.
(symbol_definitions_output): Use it to define tag_is_id.
But maybe this should be done at m4 level?
Akim Demaille [Tue, 11 Nov 2008 13:48:56 +0000 (14:48 +0100)]
Add ChangeLog entry for the previous checkin.
Akim Demaille [Tue, 11 Nov 2008 13:42:35 +0000 (14:42 +0100)]
Get rid of tabulations in the Java output.
Test 214 was failing: it greps with a pattern containing [ ]* which
obviously meant to catch spaces and tabs, but contained only tabs.
Tabulations in sources are a nuisance, so to simplify the matter, get rid
of all the tabulations in the Java sources. The other skeletons will be
treated equally later.
* data/java.m4, data/lalr1.java: Untabify.
* tests/java.at: Simplify AT_CHECK_JAVA_GREP invocations:
tabulations are no longer generated.
Paolo Bonzini [Tue, 11 Nov 2008 12:37:36 +0000 (13:37 +0100)]
Replace m4/warning.m4 with warnings module.
* bootstrap.conf: Replace m4/warning.m4 with warnings module.
* configure.ac: Adjust usage.
* lib/Makefile.am: Replace $(WARNING_CFLAGS) with $(WARN_CFLAGS).
* src/Makefile.am: Replace $(WARNING_CFLAGS) with $(WARN_CFLAGS).
* tests/atlocal.in: Replace $(WARNING_*FLAGS) with $(WARN_*FLAGS).
Di-an Jan [Mon, 10 Nov 2008 13:34:36 +0000 (14:34 +0100)]
Work around Java's ``code too large'' problem for parser tables.
* data/java.m4 (b4_typed_parser_table, b4_integral_parser_table): New.
* data/lalr1.java (yypact_, yydefact_, yypgoto_, yydefgoto_,
yytable_, yycheck_, yystos_, yytoken_number_, yyr1_, yyr2_, yyrhs_
yyprhs_, yyrline_, yytranslate_table_): Use b4_integral_parser_table.
(yytname_): Use b4_typed_parser_table.
* doc/bison.texinfo (Java Bison Interface): Add note on Java's
``code too large'' error.
Di-an Jan [Mon, 10 Nov 2008 13:29:07 +0000 (14:29 +0100)]
Various Java skeleton improvements.
* NEWS: Document them.
General Java skeleton improvements.
* configure.ac (gt_JAVACOMP): Request target of 1.4, which allows
using gcj < 4.3 in the testsuite, according to comments in
gnulib/m4/javacomp.m4.
* data/java.m4 (stype, parser_class_name, lex_throws, throws,
location_type, position_type): Remove extraneous brackets from
b4_percent_define_default.
(b4_lex_param, b4_parse_param): Remove extraneous brackets from
m4_define and m4_define_default.
* data/lalr1.java (b4_pre_prologue): Change to b4_user_post_prologue,
which marks the end of user code with appropriate syncline, like all
the other skeletons.
(b4_user_post_prologue): Add. Don't silently drop.
(yylex): Remove.
(parse): Inline yylex.
* doc/bison.texinfo (bisonVersion, bisonSkeleton): Document.
(%{...%}): Fix typo of %code imports.
* tests/java.at (AT_JAVA_COMPILE): Add "java" keyword.
Support annotations on parser class with %define annotations.
* data/lalr1.java (annotations): Add to parser class modifier.
* doc/bison.texinfo (Java Parser Interface): Document
%define annotations.
(Java Declarations Summary): Document %define annotations.
* tests/java.at (Java parser class modifiers): Test annotations.
Do not generate code for %error-verbose unless requested.
* data/lalr1.java (errorVerbose): Rename to yyErrorVerbose.
Make private. Make conditional on %error-verbose.
(getErrorVerbose, setErrorVerbose): New.
(yytnamerr_): Make conditional on %error-verbose.
(yysyntax_error): Make some code conditional on %error-verbose.
* doc/bison.texinfo (Java Bison Interface): Remove the parts
about %error-verbose having no effect.
(getErrorVerbose, setErrorVerbose): Document.
Move constants for token names to Lexer interface.
* data/lalr1.java (Lexer): Move EOF, b4_token_enums(b4_tokens) here.
* data/java.m4 (b4_token_enum): Indent for move to Lexer interface.
(parse): Qualify EOF to Lexer.EOF.
* doc/bison.texinfo (Java Parser Interface): Move documentation of
EOF and token names to Java Lexer Interface.
* tests/java.at (_AT_DATA_JAVA_CALC_Y): Remove Calc qualifier.
Make yyerror public.
* data/lalr1.java (Lexer.yyerror): Use longer parameter name.
(yyerror): Change to public. Add Javadoc comments. Use longer
parameter names. Make the body rather than the declarator
conditional on %locations.
* doc/bison.texinfo (yyerror): Document. Don't mark as protected.
Allow user to add code to the constructor with %code init.
* data/java.m4 (b4_init_throws): New, for %define init_throws.
* data/lalr1.java (YYParser.YYParser): Add b4_init_throws.
Add %code init to the front of the constructor body.
* doc/bison.texinfo (YYParser.YYParser): Document %code init
and %define init_throws.
(Java Declarations Summary): Document %code init and
%define init_throws.
* tests/java.at (Java %parse-param and %lex-param): Adjust grep.
(Java constructor init and init_throws): Add tests.
Akim Demaille [Mon, 18 Aug 2008 12:44:05 +0000 (14:44 +0200)]
Update TODO.
* TODO (-D): is implemented.
(associativity): Same precedence must have the same associativity.
For instance, how can a * b / c be parsed if * is %left and / is
%right?
(YYERRORCODE, YYFAIL, YYBACKUP): New.
Akim Demaille [Sat, 16 Aug 2008 21:18:50 +0000 (23:18 +0200)]
Formatting changes.
Akim Demaille [Sat, 16 Aug 2008 18:32:37 +0000 (20:32 +0200)]
More information about the symbols.
* src/output.c (type_names_output): Document all the symbols,
including those that don't have a type-name.
(symbol_definitions_output): Define "is_token" and
"has_type_name".
* data/lalr1.cc (b4_type_action_): Skip symbols that have an empty
type-name, now that they are defined too in b4_type_names.
Akim Demaille [Sat, 16 Aug 2008 13:55:49 +0000 (15:55 +0200)]
Regen.
Akim Demaille [Sat, 16 Aug 2008 13:47:30 +0000 (15:47 +0200)]
Make parser::yytranslate static.
Small speedup (1%) on the list grammar. And makes yytranslate_ available
in non member functions.
* data/lalr1.cc (yytranslate_): Does not need to be a instance
function.
Akim Demaille [Sat, 16 Aug 2008 13:29:30 +0000 (15:29 +0200)]
Avoid trailing spaces.
* data/c.m4: b4_comment(TEXT): Don't indent empty lines.
* data/lalr1.cc: Don't indent before rule and symbol actions, as
they can be empty, and anyway this incorrectly indents the first
action.
Akim Demaille [Sat, 16 Aug 2008 13:01:31 +0000 (15:01 +0200)]
Comment changes.
Akim Demaille [Sat, 16 Aug 2008 08:22:09 +0000 (10:22 +0200)]
Use "enum" for integral constants.
This is just nicer to read, I observed no speedup.
* data/lalr1.cc (yyeof_, yylast_, yynnts_, yyempty_, yyfinal_)
(yterror_, yyerrcode_, yyntokens_): Define as members of an enum.
(yyuser_token_number_max_, yyundef_token_): Move into...
(yytranslate_): here.
Akim Demaille [Sat, 16 Aug 2008 07:40:34 +0000 (09:40 +0200)]
Shortcuts in bench directives.
* etc/bench.pl.in (parse_dirs): New.
Use it.
(bench_variant_parser, bench_fusion_parser): Use %s and %d.
Create the benches in "benches/".
Akim Demaille [Sat, 16 Aug 2008 07:06:00 +0000 (09:06 +0200)]
Formatting changes.
* data/lalr1.cc: here.
Akim Demaille [Wed, 13 Aug 2008 11:18:22 +0000 (13:18 +0200)]
Adjust verbose message to using emacs.
* etc/bench.pl.in: Inform compilation-mode when we change the
directory.
(generate_grammar_list): Recognize %define "variant" in addition
to %define variant.
Akim Demaille [Tue, 12 Aug 2008 20:46:36 +0000 (22:46 +0200)]
Classify symbols by type-name.
* src/uniqstr.h (UNIQSTR_CMP): New.
* src/output.c (symbol_type_name_cmp, symbols_by_type_name)
(type_names_output): New.
(muscles_output): Use it.
* data/lalr1.cc (b4_symbol_action_): Remove.
(b4_symbol_case_, b4_type_action_): New.
Adjust uses of b4_symbol_action_ to use b4_type_action_.
Akim Demaille [Tue, 12 Aug 2008 19:48:53 +0000 (21:48 +0200)]
Change the handling of the symbols in the skeletons.
Before we were using tables which lines were the symbols and which
columns were things like number, tag, type-name etc. It is was
difficult to extend: each time a column was added, all the numbers had
to be updated (you asked for colon $2, not for "tag"). Also, it was
hard to filter these tables when only a subset of the symbols (say the
tokens, or the nterms, or the tokens that have and external number
*and* a type-name) was of interest.
Now instead of monolithic tables, we define one macro per cell. For
instance "b4_symbol(0, tag)" is a macro name which contents is
self-decriptive. The macro "b4_symbol" provides easier access to
these cells.
* src/output.c (type_names_output): Remove.
(symbol_numbers_output, symbol_definitions_output): New.
(muscles_output): Call them.
(prepare_symbols): Define b4_symbols_number.
Akim Demaille [Tue, 12 Aug 2008 19:48:44 +0000 (21:48 +0200)]
--trace=muscles
* src/getargs.h, src/getargs.c (trace_muscle): New.
(trace_types, trace_args): Support it.
* src/output.c (output_skeleton): Use it.
Akim Demaille [Tue, 12 Aug 2008 19:11:53 +0000 (21:11 +0200)]
muscles_output.
* src/output.c (muscles_output): New, extracted from...
(output_skeleton): here.
Adjust.
Akim Demaille [Tue, 12 Aug 2008 19:11:00 +0000 (21:11 +0200)]
Formatting changes.
Akim Demaille [Sat, 9 Aug 2008 12:59:34 +0000 (14:59 +0200)]
Update the variant example.
* examples/variant.yy: Formatting changes.
One stage build.
Akim Demaille [Thu, 7 Aug 2008 22:38:07 +0000 (00:38 +0200)]
Support constructor with an argument.
This improves the "list" bench by 2%.
* data/lalr1.cc (variant::build): Add an overloaded version with
an argument.
* tests/c++.at (AT_CHECK_VARIANT): Check it.
Akim Demaille [Thu, 7 Aug 2008 21:40:09 +0000 (23:40 +0200)]
Test variants.
* tests/c++.at (AT_CHECK_VARIANTS): New.
Use it with and without %define assert.
Akim Demaille [Thu, 7 Aug 2008 21:21:44 +0000 (23:21 +0200)]
Regen.
Akim Demaille [Thu, 7 Aug 2008 21:15:34 +0000 (23:15 +0200)]
Add %precedence support.
Unfortunately it is not possible to reuse the %prec directive. This
is because to please POSIX, we do not require to end the rules with a
semicolon. As a result,
foo: bar %prec baz
is ambiguous: either a rule which precedence is that of baz, or a rule,
and then a declaration of the precedence of the token baz.
* doc/bison.texinfo: Document %precedence.
(Precedence Only): New.
* src/assoc.h, src/assoc.c (precedence_assoc): New.
* src/conflicts.c (resolve_sr_conflict): Support it.
* src/scan-gram.l, src/parse-gram.y (%precedence): New token.
Parse it.
* tests/calc.at: Use %precedence for NEG.
* tests/conflicts.at (%precedence does not suffice)
(%precedence suffices): New tests.
Akim Demaille [Thu, 7 Aug 2008 19:23:41 +0000 (21:23 +0200)]
Make benches in a sub dirs.
* etc/bench.pl.in ($dir): New.
Use it.
Check the use of constructors with an argument.
(bench_variant_parser): Fix.
Akim Demaille [Thu, 7 Aug 2008 18:53:08 +0000 (20:53 +0200)]
fix eof condition
Akim Demaille [Thu, 7 Aug 2008 18:49:10 +0000 (20:49 +0200)]
Fix --help.
Akim Demaille [Thu, 7 Aug 2008 18:46:28 +0000 (20:46 +0200)]
Require the generation of parse-gram.output.
* src/Makefile.am (YACC): Pass --report=all.