Commit Graph

1899 Commits

Author SHA1 Message Date
Akim Demaille
e1f93869da Fuse yyval and yyloc into yylhs.
* data/lalr1.cc (b4_lhs_value, b4_lhs_location): Adjust to using
	yylhs.
	(parse): Replace yyval and yyloc with yylhs.value and
	yylhs.location.
	After a user action, compute yylhs.state earlier.
	(yyerrlab1): Do not play tricks with yylhs.location, rather, use a
	fresh error_token.
2008-11-09 19:29:38 +01:00
Di-an Jan
2935744b3a Remove unused variable.
* src/output.c (type_names_output): Remove unused variable sep.
2008-11-09 12:28:59 +01:00
Paolo Bonzini
bbf9ca3740 Change tests/output.at quoting.
* tests/output.at (AT_CHECK_OUTPUT): Use conventional m4 quoting when
expanding arguments.
2008-11-09 12:28:50 +01:00
Joel E. Denny
d9a9b96bb5 Don't add a semicolon to actions for %skeleton or %language.
It breaks Java test cases as reported by Akim Demaille.
* src/scan-code.l: Implement.
2008-11-07 17:21:23 -05:00
Joel E. Denny
5136519230 Clean up %skeleton and %language priority implementation.
* src/getargs.c (skeleton_prio): Use default_prio rather than 2, and
remove static qualifier because others will soon need to see it.
(language_prio): Likewise.
(getargs): Use command_line_prio rather than 0.
* src/getargs.h (command_line_prio, grammar_prio, default_prio): New
enum fields.
(skeleton_prio): Extern it.
(language_prio): Extern it.
* src/parse-gram.y: Use grammar_prio rather than 1.
2008-11-07 17:20:44 -05:00
Akim Demaille
9380cfd008 Moving push traces into yypush_.
* data/lalr1.cc (yypush_): Now takes a optional trace message.
	Adjust all uses.
2008-11-07 21:38:54 +01:00
Akim Demaille
8901f32e4a The single-stack C++ parser is now the standard one.
* data/lalr1.cc: Rename as...
	* data/lalr1-split.cc: this.
	* data/lalr1-fusion.cc: Rename as...
	* data/lalr1.cc: this.
	* etc/bench.pl.in: Adjust.
2008-11-07 21:38:45 +01:00
Akim Demaille
8cdabf02ea Avoid empty-if warnings.
Reported by Quentin Hocquet.

	* data/lalr1-fusion.cc (YY_SYMBOL_PRINT, YY_REDUCE_PRINT)
	(YY_STACK_PRINT): Provide some contents even when !YYDEBUG.
2008-11-07 21:38:40 +01:00
Akim Demaille
5a893c2b26 Pass command line location to skeleton_arg and language_argmatch.
* src/getargs.h, src/getargs.c (skeleton_arg, language_argmatch):
	The location argument is now mandatory.
	Adjust all dependencies.
	(getargs): Use command_line_location.
2008-11-07 21:38:36 +01:00
Akim Demaille
58697c6d89 -D, --define.
* src/getargs.c (usage): Document -D.
	Fix help string for --locations.
	(command_line_location): New.
	(short_options, long_options, getargs): Support -D, --define.
	(getargs): Move -d support at the right place.
	* doc/bison.texinfo (Bison Options): Update.
	* tests/input.at (%define, --define): New.
2008-11-07 21:38:31 +01:00
Akim Demaille
9fe5a4571e Initialize the muscle table before parsing the command line.
* src/getargs.c (quotearg.h, muscle_tab.h): Include.
	(getargs): Define file_name.
	* src/main.c (main): Initialize muscle_tab before calling
	getargs.
	* src/muscle_tab.c (muscle_init): No longer define file_name, as
	its value is not available yet.
2008-11-07 21:38:27 +01:00
Akim Demaille
56c5eca973 Locations without columns for command line arguments.
* src/location.c (location_print): Don't display negative columns.
	* src/location.h: Document this.
2008-11-07 21:38:23 +01:00
Akim Demaille
9b9e0a7d46 Fix --help.
* src/getargs.c (usage): Fix help string for -W.
2008-11-07 21:38:19 +01:00
Akim Demaille
74eae918c3 Handle more general types of option arguments.
* build-aux/cross-options.pl: The argument ends at the first
	space, not the first non-symbol character.
	Use @var for each word appearing the argument description.
2008-11-07 21:38:14 +01:00
Akim Demaille
a3d4c6fbb1 Destroy the variants that remain on the stack in case of error.
* data/lalr1-fusion.cc (yydestruct_): Invoke the variant's
	destructor.
	Display the value only if yymsg is nonnull.
	(yyreduce): Invoke yydestruct_ when popping lhs symbols.
2008-11-07 21:38:10 +01:00
Akim Demaille
2d32fc9fe2 Add "%define assert" to variants.
This is used to help the user catch cases where some value gets
ovewritten by a new one.  This should not happen, as this will
probably leak.

Unfortunately this uncovered a bug in the C++ parser itself: the
lookahead value was not destroyed between two calls to yylex.  For
instance if the previous lookahead was a std::string, and then an int,
then the value of the std::string was correctly taken (i.e., the
lookahead was now an empty string), but std::string structure itself
was not reclaimed.

This is now done in variant::build(other&) (which is used to take the
value of the lookahead): other is not only stolen from its value, it
is also destroyed.  This incurs a new performance penalty of a few
percent, and union becomes faster again.

	* data/lalr1-fusion.cc (variant::build(other&)): Destroy other.
	(b4_variant_if): New.
	(variant::built): New.
	Use it whereever the status of the variant changes.
	* etc/bench.pl.in: Check the penalty of %define assert.
2008-11-07 21:38:06 +01:00
Akim Demaille
f6038cb8c3 Use "%define variant" in bench.pl.
* etc/bench.pl.in: No longer use the pseudo directive %variants,
	just use %define variants.
2008-11-07 21:37:56 +01:00
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