Commit Graph

3336 Commits

Author SHA1 Message Date
Akim Demaille
ccde1f98b0 Regen.
* src/parse-gram.h, src/parse-gram.c: Regen.
2008-11-07 21:28:37 +01:00
Joel E. Denny
58bd33b7fc Fix user actions without a trailing semicolon.
Reported by Sergei Steshenko at
<http://lists.gnu.org/archive/html/bug-bison/2008-11/msg00001.html>.
* THANKS (Sergei Steshenko): Add.
* src/scan-code.l (SC_RULE_ACTION): Fix it.
* tests/regression.at (Fix user actions without a trailing semicolon):
New test case.
2008-11-04 15:58:57 -05:00
Akim Demaille
639867b52f Use b4_copyright_years.
* data/yacc.c (b4_copyright_years): New.
	Fix its value according to the comments in the file.
	Use it and undefine it.
2008-11-04 21:43:55 +01:00
Akim Demaille
3c26260608 Formatting changes.
* data/lalr1-fusion.cc, src/parse-gram.y: here.
2008-11-04 21:43:51 +01:00
Akim Demaille
a2b93d5278 Formatting changes.
* data/lalr1-fusion.cc: here.
2008-11-04 21:43:46 +01:00
Akim Demaille
3a2803df74 Use strict on bench.pl.
* etc/bench.pl.in (&run, &generate_grammar): New.
	Rename the grammar generating functions for consistency.
	Change the interface so that the list of benches to run is passed
	as (optionless) arguments.
	(&compile): Use &run.
2008-11-04 21:43:41 +01:00
Akim Demaille
a0d4650a09 Remove spurious initial empty lines.
* data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java,
	* data/yacc.c: End the @output lines with an @.
2008-11-04 21:43:36 +01:00
Akim Demaille
cac9e09bbf Improve the display of sizes.
* etc/bench.p.in: Higher precision.
	Sort by decreasing size.
2008-11-04 21:43:32 +01:00
Akim Demaille
4af4348a3f Don't memcpy C++ structures.
* data/lalr1-fusion.cc (b4_symbol_variant): Adjust additional
	arguments.
	(variant::build): New overload for
	copy-construction-that-destroys.
	(variant::swap): New.
	(parser::yypush_): Use it in variant mode.
2008-11-04 21:43:28 +01:00
Akim Demaille
ef05c4d6f9 Better defaults for bench.pl.
* etc/bench.pl.in ($verbose, $cflags, $iterations): Change the
	default values.
	Adjust &verbose uses.
	(-q, --quiet): New.
2008-11-04 21:43:24 +01:00
Akim Demaille
9718cfa902 Make variant.yy more complex.
std::list cannot be copied via memcpy, they are more demanding than
std::string.  Use one std::list to strengthen the test.

	* examples/variant.yy: Use lalr1-fusion.cc, not lalr1.cc.
	Adjust.
	Create a list of strings, instead of a single large string.
2008-11-04 21:43:19 +01:00
Akim Demaille
a6df593dfe bench.pl --bench.
* etc/bench.pl.in (--bench, $bench): New.
2008-11-04 21:43:05 +01:00
Akim Demaille
006a030300 Sort methods.
* data/lalr1-fusion.cc (destroy): Use as() in its definition.
	Define it after as().
2008-11-04 21:21:56 +01:00
Akim Demaille
faef34664a Useless parens.
* data/lalr1-fusion.cc (b4_rhs_location): Remove useless parens.
2008-11-04 21:21:51 +01:00
Akim Demaille
2141adedf4 Issue missing synclines after user actions.
* data/c.m4 (b4_case): Issue synclines on the output file.
2008-11-04 21:21:47 +01:00
Akim Demaille
e426d17bc5 Remove trailing empty line.
* data/lalr1-fusion.cc: Don't add an empty line after the user's
	epilogue.
2008-11-04 21:21:43 +01:00
Akim Demaille
a9ce3f5413 Fix output of copyright years.
* data/bison.m4 (b4_copyright): Fix the indentation of the
	copyright year paragraph.
	Use b4_copyright_years when no years are given.
	* data/lalr1.cc, data/lalr1-fusion.cc, data/location.cc
	(b4_copyright_years): New.
	Use it.
2008-11-04 21:21:38 +01:00
Akim Demaille
59c544c268 Avoid the spurious initial empty line.
* data/lalr1-fusion.cc, data/location.cc: Put a trailing "@" at
	the end of @output request to suppress the empty line that
	results.
2008-11-04 21:21:34 +01:00
Akim Demaille
96b15448b9 Remove parser::rhs_number_type.
* data/lalr1-fusion.cc (rhs_number_type): No longer define it.
	(yyrhs_): Use b4_table_define.
2008-11-04 21:21:30 +01:00
Akim Demaille
f063317430 Fix iteration type.
* data/lalr1-fusion.cc: Use an int to iterate up to an int.
2008-11-04 21:21:25 +01:00
Akim Demaille
417b80040b Factor the declaration of the integer tables.
* data/lalr1-fusion.cc (b4_table_define): New.
	Use it.
2008-11-04 21:21:20 +01:00
Akim Demaille
1a5246c66f Fix indentation of tables in lalr1.cc
* data/lalr1-fusion.cc: Fix the indentation.
2008-11-03 22:01:27 +01:00
Akim Demaille
f8a95c9c12 Destroy the lhs symbols after reduction.
* data/lalr1-fusion.cc (parse): After the user action, when in
	variant mode, destroy the lhs symbols.
2008-11-03 22:01:22 +01:00
Akim Demaille
d7f4d82382 Simplify yysyntax_error_ use.
* data/lalr1-fusion.cc (yysyntax_error_): Always pass it the token
	type, but make it unnamed in the declaration when it is not used.
2008-11-03 22:01:18 +01:00
Akim Demaille
8b9c89fb65 Let yy::variant::build return an lvalue.
* data/lalr1-fusion.cc (variant::build): Return a reference to the
	object.
2008-11-03 22:01:14 +01:00
Akim Demaille
83243c24ba Define yy::variant only when needed.
* data/lalr1-fusion.cc (yy::variant): Define only if variants are
	used.
2008-11-03 22:01:10 +01:00
Akim Demaille
429b4848d4 Bench the three-stack lalr1.cc.
* etc/bench.pl.in: Bench the three-stack lalr1.cc vs. the
	one-stack one.
2008-11-03 22:01:06 +01:00
Akim Demaille
414c76a461 Fail on parse error in calc++.
* doc/bison.texinfo (calc++.cc): Propagate failures to the exit
	status.
	* examples/calc++/test ($me, $number, $exit, run): New.
	Use them to propagate errors to the exit status.
2008-11-03 22:01:01 +01:00
Akim Demaille
8a5783fd0c Don't specify the skeleton twice in the example.
* examples/calc++/Makefile.am: Don't pass -S to Bison, the grammar
	file does what is needed.
2008-11-03 22:00:57 +01:00
Akim Demaille
0cc5bead40 bench: Improve output.
* etc/bench.pl.in (bench_grammar): Tune the printf format.
2008-11-03 22:00:53 +01:00
Akim Demaille
5b421a4e8e bench: check impact of %debug on variants.
* etc/bench.pl.in (variant_grammar): Fix the computation of
	$variant.
	Generate a grammar file that can work with or without %debug.
	Do use the @directive.
	(bench_variant_parser): Check impact of %debug.
	(@directives): Rename all the occurrences to...
	(@directive): this, for consistency.
2008-11-03 22:00:48 +01:00
Akim Demaille
d11ee647c3 bench: report the size too.
* etc/bench.pl.in ($iterations): Defaults to -3.
	(&bench_grammar): Require hireswallclock.
	Compute and display the size of the result.
	More comments.
2008-11-03 22:00:44 +01:00
Akim Demaille
e1b74b92a0 bench: More use of the verbosity level.
* etc/bench.pl.in ($verbose, &verbose): New.
	Use them.
	More POD documentation.
2008-11-03 22:00:39 +01:00
Akim Demaille
7e5f9c54c0 bench.pl: a command line interface
* etc/bench.pl.in: More doc.
	Some fixes in the documentation.
	($cflags, $iterations, &help, &getopt): New.
	Use them.
	(&variant_grammar): Let the number of stages be 10 times what is
	specified.
2008-11-03 22:00:34 +01:00
Akim Demaille
7109a18d18 Bench the use of Boost.Variants.
* etc/bench.pl.in ($cxx, &variant_grammar, &bench_variant_parser):
	New.
	(&compile): Be ready to compile C++ parsers.
	(&bench_push_parser): Move debug information to the outermost
	level.
	* THANKS: Add Michiel De Wilde.
2008-11-03 22:00:27 +01:00
Akim Demaille
922730fe36 bench.pl: Pass directives as a list instead of as a string.
* etc/bench.pl.in (&directives): New.
	(&triangular_grammar, &calc_grammar): Use it to format the Bison
	directives.
	(&triangular_grammar): Do use the directives (were ignored).
	(&bench_grammar, &bench_push_parser): Adjust to pass lists of
	directives.
2008-11-03 22:00:21 +01:00
Akim Demaille
7484f1d4f3 Improve genericity of bench.pl.
* etc/bench.pl.in (&bench_grammar): Take the set of benches as
	argument.
	(&bench_push_parser): New.
	Call it.
2008-11-03 22:00:17 +01:00
Akim Demaille
15129f2525 Add documentation to bench.pl.
* etc/bench.pl.in: Comment changes.
2008-11-03 22:00:12 +01:00
Akim Demaille
0e0ed236ab Fuse the three stacks into a single one.
In order to make it easy to perform benchmarks to ensure that there are no
performance loss, lalr1.cc is forked into lalr1-fusion.cc.  Eventually,
lalr1-fusion.cc will replace lalr1.cc.

Meanwhile, to make sure that lalr1-fusion.cc is correctly exercized by the
test suite, the user must install a symbolic link from lalr1.cc to it.

Instead of having three stacks (state, value, location), use a stack
of triples.  This considerably simplifies the code (and it will be
easier not to require locations as currently does the C++ parser),
and also gives a 10% speedup according to etc/bench (probably mainly since
memory allocation is done once instead of three times).

Another motivation is to make it easier to destruct properly
semantic values: now that they are bound to their state (hence
symbol type) it will be easier to call the appropriate destructor.

These changes should probably benefit the C parser too.

	* data/lalr1.cc: Copy as...  * data/lalr1-fusion.cc: this new
	file.
	(b4_rhs_value, b4_rhs_location): New definitions overriding those
	from c++.m4.
	(state_stack_type, semantic_stack_type, location_stack_type)
	(yystate_stack_, yysemantic_stack_, yylocation_stack_): Remove.
	(data_type, stack_type, yystack_): New.
	(YYLLOC_DEFAULT, yypush_): Adjust.
	(yyerror_range): Now based on data_type, not location_type.
2008-11-03 21:59:59 +01:00
Akim Demaille
7dedf26e55 Push the state, value, and location at the same time.
This is needed to prepare a forthcoming patch that fuses the three
stacks into one.

	* data/lalr1.cc (parser::yypush_): New.
	(parser::yynewstate): Change the semantics: instead of arriving to
	this label when value and location have been pushed, but yystate
	is to be pushed on the state stack, now the three of them must
	have been pushed before.  yystate still must be the new state.
	This allows to use yypush_ everywhere instead of individual
	handling of the stacks.
2008-11-03 21:51:02 +01:00
Akim Demaille
c4585f1e2d Prefer references to pointers.
* data/lalr1.cc (b4_symbol_actions): New, overrides the default C
	definition to use references instead of pointers.
	(yy_symbol_value_print_, yy_symbol_print_, yydestruct_):
	Take the value and location as references.
	Adjust callers.
2008-11-03 21:50:57 +01:00
Akim Demaille
56017c172b stack::size instead of stack::height.
* data/lalr1.cc (stack::height): Rename as...
	(stack::size): this.
	Fix the output type.
	Comment changes.
2008-11-03 21:50:53 +01:00
Akim Demaille
5ab8c47bcf Use variants to support objects as semantic values.
This patch was inspired by work by Michiel De Wilde.  But he used Boost
variants which (i) requires Boost on the user side, (ii) is slow, and
(iii) has useless overhead (the parser knows the type of the semantic value
there is no reason to duplicate this information as Boost.Variants do).

This implementation reserves a buffer large enough to store the largest
objects.  yy::variant implements this buffer.  It was implemented with
Quentin Hocquet.

	* src/output.c (type_names_output): New.
	(output_skeleton): Invoke it.
	* data/c++.m4 (b4_variant_if): New.
	(b4_symbol_value): If needed, provide a definition for variants.
	* data/lalr1.cc (b4_symbol_value, b4_symbol_action_)
	(b4_symbol_variant, _b4_char_sizeof_counter, _b4_char_sizeof_dummy)
	(b4_char_sizeof, yy::variant): New.
	(parser::parse): If variants are requested, define
	parser::union_type, parser::variant, change the definition of
	semantic_type, construct $$ before running the user action instead
	of performing a default $$ = $1.
	* examples/variant.yy: New.
	Based on an example by Michiel De Wilde.
2008-11-03 21:50:48 +01:00
Akim Demaille
1fa5d8bbf9 Parameterize the extraction of semantic values.
To make future changes easier, no longer rely on ".TYPE" being the
way to get a semantic value.

	* data/c.m4 (b4_symbol_value): New.
	Use it.
	* data/c++.m4, data/yacc.c: Use it.
	* data/glr.c: Use b4_symbol_value.
	(b4_rhs_data): New.
	Use it.
2008-11-03 21:50:38 +01:00
Akim Demaille
91ba8a55b1 Prepare easier M4 changes.
* data/lalr1.cc: Use escaped [] instead of literals to prepare
	future changes.
2008-11-03 21:50:11 +01:00
Joel E. Denny
c9ba9e5978 Initiate further development.
* NEWS: Create an empty section for new entries.
* gnulib: Update submodule to HEAD.
2008-11-02 18:16:13 -05:00
Joel E. Denny
bfb40910e3 * NEWS: Version 2.4. v2.4 2008-11-02 16:55:49 -05:00
Joel E. Denny
241fda7a8d Prepare for next release.
* NEWS: Briefly mention changes since 2.3b.
* README: Say GNU m4 1.4.6, which we've been requiring in release
announcements already, not 1.4.3, which breaks the build.
2008-11-02 16:55:14 -05:00
Joel E. Denny
ed4d67dcbe Say %language is experimental.
We're thinking of extending it's effect on output file naming.  See the
thread at
<http://lists.gnu.org/archive/html/bison-patches/2008-10/msg00003.html>.
* NEWS: Say it's experimental.
* doc/bison.texinfo (Decl Summary): Say it's experimental, and so don't
recommend it over %skeleton for now.
(Bison Options): Likewise.
(C++ Bison Interface): Use %skeleton not %language.
(Calc++ Parser): Use %skeleton not %language.
* src/getargs.c (usage): Say it's experimental.
2008-11-02 16:54:45 -05:00
Di-an Jan
e254a580b5 Java parser improvements
2008-11-01  Di-an Jan  <dianj@freeshell.org>
	    Paolo Bonzini  <bonzini@gnu.org>

	Support all Java parser class modifiers.
	* data/java.m4 (b4_percent_define_get3): New.
	(b4_final_if, b4_strictfp_if): New.
	* data/lalr1.java (final, strictfp, extends, implements): Support.
	* doc/bison.texinfo (final, strictfp, extends, implements): Add
	documentation.
	* tests/java.at (AT_CHECK_JAVA_MINIMAL): New.
	(AT_CHECK_JAVA_MINIMAL_W_LEXER): New.
	(AT_CHECK_JAVA_GREP): New.
	(Java parser class modifiers): New test.
	(Java parser class extends and implements): New test.

	Model exception propagation better with throws and lex_throws.
	* data/java.m4 (b4_list2): New.
	(throws): Change default.
	* data/lalr1.java (yyaction): Add throws.
	(parse): Add lex_throws in addition to throws.
	* doc/bison.texinfo (throws, lex_throws): Add documentation.
	* tests/java.at (Java throws specifications): New test.

	Improve documentation for Java parsers.
	* doc/bison.texinfo (Java Parsers): Add subsections.
	Don't quote first argument of %define.
	(Java Bison Interface): Document output files.  Move documentation
	of parser class and merge into Java Parser Interface.  Document
	features that error out.  Document directives with no effect.
	Move note about Javadoc higher.
	(Java Semantic Values): Explicitly mention stype.
	Document that generic types cannot be used.
	(Java Location Values): Use @deftypeivar.  Document constructors.
	Correct return value for toString.
	(Java Parser Interface): List undocumented constants/fields.
	Move documentation of fields added by %parse-param closer to list
	of members.  Document that token names are added as fields.
	Document constructors accurately.  Remove error method.
	(Java Scanner Interface): Move note on %pure-parser to Java Bison
	Interface.  Describe %code lexer and yylex accutately.
	Remove documentation that does not match the code.
	(Java Action Features): New.
	(Java Differences): Add reference.  Add item on semantic values.
	Add note about @{ ... @}.  Clarify %% epilogue placement.
	(Java Declarations Summary): New.

	Fix Java skeleton.
	* data/java.m4 (b4_prefix): Correct quoting for m4_define_default.
	(b4_remove_comma): Quote test argument.
	* tests/java.at (Java parser class and package names): New test.
	(Java %parse-param and %lex-param): New test.
	(Java stype, position_class and location_class): New test.
2008-11-01 20:00:01 +01:00