]> git.saurik.com Git - bison.git/log
bison.git
16 years agoRegen.
Akim Demaille [Sat, 16 Aug 2008 13:55:49 +0000 (15:55 +0200)] 
Regen.

16 years agoMake parser::yytranslate static.
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.

16 years agoAvoid trailing spaces.
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.

16 years agoComment changes.
Akim Demaille [Sat, 16 Aug 2008 13:01:31 +0000 (15:01 +0200)] 
Comment changes.

16 years agoUse "enum" for integral constants.
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.

16 years agoShortcuts in bench directives.
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/".

16 years agoFormatting changes.
Akim Demaille [Sat, 16 Aug 2008 07:06:00 +0000 (09:06 +0200)] 
Formatting changes.

* data/lalr1.cc: here.

16 years agoAdjust verbose message to using emacs.
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.

16 years agoClassify symbols by type-name.
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_.

16 years agoChange the handling of the symbols in the skeletons.
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.

16 years ago--trace=muscles
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.

16 years agomuscles_output.
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.

16 years agoFormatting changes.
Akim Demaille [Tue, 12 Aug 2008 19:11:00 +0000 (21:11 +0200)] 
Formatting changes.

16 years agoUpdate the variant example.
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.

16 years agoSupport constructor with an argument.
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.

16 years agoTest variants.
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.

16 years agoRegen.
Akim Demaille [Thu, 7 Aug 2008 21:21:44 +0000 (23:21 +0200)] 
Regen.

16 years agoAdd %precedence support.
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.

16 years agoMake benches in a sub dirs.
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.

16 years agofix eof condition
Akim Demaille [Thu, 7 Aug 2008 18:53:08 +0000 (20:53 +0200)] 
fix eof condition

16 years agoFix --help.
Akim Demaille [Thu, 7 Aug 2008 18:49:10 +0000 (20:49 +0200)] 
Fix --help.

16 years agoRequire the generation of parse-gram.output.
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.

16 years agoFormatting changes.
Akim Demaille [Thu, 7 Aug 2008 12:45:17 +0000 (14:45 +0200)] 
Formatting changes.

16 years agoUpdate TODO.
Akim Demaille [Tue, 5 Aug 2008 11:48:03 +0000 (13:48 +0200)] 
Update TODO.

* TODO: Remove obsolete items.
Update others.

16 years agoEnhance bench.pl.
Akim Demaille [Mon, 4 Aug 2008 19:56:21 +0000 (21:56 +0200)] 
Enhance bench.pl.

* etc/bench.pl.in (parse, parse_expr, parse_term, parse_fact)
(@token, $grammar, $bench): New.
(generate_grammar_variant): Rename as...
(generate_grammar_list): this.
(generate_grammar): Adjust.
(bench_grammar): Rename as...
(bench): this.
Use it in the various bench-marking routines.
(-b, -g): New options.

16 years agoUse a static hierarchy for symbols in the C++ parser.
Akim Demaille [Mon, 4 Aug 2008 19:54:26 +0000 (21:54 +0200)] 
Use a static hierarchy for symbols in the C++ parser.

* data/lalr1.cc (symbol_base_type, symbol_type)
(stack_symbol_type): Make it a static hierarchy.
Adjust dependencies.

16 years agobench.pl -d, --directive.
Akim Demaille [Sat, 2 Aug 2008 20:06:49 +0000 (22:06 +0200)] 
bench.pl -d, --directive.

* etc/bench.pl.in (@directive): New.
(&bench_grammar): Use it.
(&bench_list_grammar): New, to provide access to the "variant"
grammar.
Use it.
(getopts): Support -d, --directive.

16 years agoUse inline for small operations.
Akim Demaille [Sat, 2 Aug 2008 20:04:05 +0000 (22:04 +0200)] 
Use inline for small operations.

* data/lalr1.cc (symbol_base_type, symbol_type)
(stack_symbol_type): Declare constructor and other operations as
inline.
(yy_destroy_): Inline.

16 years agoIntroduce a hierarchy for symbols.
Akim Demaille [Sat, 2 Aug 2008 19:42:48 +0000 (21:42 +0200)] 
Introduce a hierarchy for symbols.

* data/lalr1.cc (symbol_base_type, symbol_type): New.
(data_type): Rename as...
(stack_symbol_type): this.
Derive from symbol_base_type.
(yy_symbol_value_print_): Merge into...
(yy_symbol_print_): this.
Rename as...
(yy_print_): this.
(yydestruct_): Rename as...
(yy_destroy_): this.
(b4_symbols_actions, YY_SYMBOL_PRINT): Adjust.
(parser::parse): yyla is now of symbol_type.
Use its type member instead of yytoken.

16 years agoRename data_type and stack_symbol_type.
Akim Demaille [Sat, 2 Aug 2008 12:29:23 +0000 (14:29 +0200)] 
Rename data_type and stack_symbol_type.

* data/lalr1.cc (data_type): Rename as...
(stack_symbol_type): this.

16 years agoHandle semantic value and location together.
Akim Demaille [Sat, 2 Aug 2008 12:18:48 +0000 (14:18 +0200)] 
Handle semantic value and location together.

* data/lalr1.cc (b4_symbol_actions): Bounce $$ and @$ to
yydata.value and yydata.location.
(yy_symbol_value_print_, yy_symbol_print_, yydestruct_)
(YY_SYMBOL_PRINT): Now take semantic value and location as a
single arg.
Adjust all callers.
(yydestruct_): New overload for a stack symbol.

16 years agoPush a complete symbol, not connected parts.
Akim Demaille [Sat, 2 Aug 2008 12:00:39 +0000 (14:00 +0200)] 
Push a complete symbol, not connected parts.

* data/lalr1.cc (yypush_): Take a data_type&, not disconnected
state, value and location.
Adjust callers.

16 years agoAgregate yylval and yylloc.
Akim Demaille [Sat, 2 Aug 2008 11:54:33 +0000 (13:54 +0200)] 
Agregate yylval and yylloc.

* data/lalr1.cc (parser::yylval, parser::yylloc): Replace by...
(parser::yyla): this.

16 years agoRely on the state stack to display reduction traces.
Akim Demaille [Thu, 31 Jul 2008 10:50:42 +0000 (12:50 +0200)] 
Rely on the state stack to display reduction traces.

To display rhs symbols before a reduction, we used information about the rule
reduced, which required the tables yyrhs and yyprhs.  Now use rely only on the
state stack to get the same information.

* data/lalr1.cc (b4_rhs_data, b4_rhs_state): New.
Use them.
(parser::yyrhs_, parser::yyprhs_): Remove.
(parser::yy_reduce_print_): Use the state stack.

16 years agoFuse yyval and yyloc into yylhs.
Akim Demaille [Thu, 31 Jul 2008 09:57:45 +0000 (11:57 +0200)] 
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.

16 years agoRemove unused variable.
Di-an Jan [Sun, 9 Nov 2008 11:26:01 +0000 (12:26 +0100)] 
Remove unused variable.

* src/output.c (type_names_output): Remove unused variable sep.

16 years agoChange tests/output.at quoting.
Paolo Bonzini [Mon, 3 Nov 2008 10:04:40 +0000 (11:04 +0100)] 
Change tests/output.at quoting.

* tests/output.at (AT_CHECK_OUTPUT): Use conventional m4 quoting when
expanding arguments.

16 years agoDon't add a semicolon to actions for %skeleton or %language.
Joel E. Denny [Fri, 7 Nov 2008 22:21:23 +0000 (17:21 -0500)] 
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.

16 years agoClean up %skeleton and %language priority implementation.
Joel E. Denny [Fri, 7 Nov 2008 22:20:44 +0000 (17:20 -0500)] 
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.

16 years agoMoving push traces into yypush_.
Akim Demaille [Thu, 31 Jul 2008 09:23:34 +0000 (11:23 +0200)] 
Moving push traces into yypush_.

* data/lalr1.cc (yypush_): Now takes a optional trace message.
Adjust all uses.

16 years agoThe single-stack C++ parser is now the standard one.
Akim Demaille [Thu, 31 Jul 2008 09:03:04 +0000 (11:03 +0200)] 
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.

16 years agoAvoid empty-if warnings.
Akim Demaille [Wed, 30 Jul 2008 09:03:52 +0000 (11:03 +0200)] 
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.

16 years agoPass command line location to skeleton_arg and language_argmatch.
Akim Demaille [Tue, 29 Jul 2008 11:30:02 +0000 (13:30 +0200)] 
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.

16 years ago-D, --define.
Akim Demaille [Tue, 29 Jul 2008 10:52:19 +0000 (12:52 +0200)] 
-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.

16 years agoInitialize the muscle table before parsing the command line.
Akim Demaille [Tue, 29 Jul 2008 10:47:41 +0000 (12:47 +0200)] 
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.

16 years agoLocations without columns for command line arguments.
Akim Demaille [Tue, 29 Jul 2008 10:45:21 +0000 (12:45 +0200)] 
Locations without columns for command line arguments.

* src/location.c (location_print): Don't display negative columns.
* src/location.h: Document this.

16 years agoFix --help.
Akim Demaille [Tue, 29 Jul 2008 10:44:28 +0000 (12:44 +0200)] 
Fix --help.

* src/getargs.c (usage): Fix help string for -W.

16 years agoHandle more general types of option arguments.
Akim Demaille [Tue, 29 Jul 2008 10:41:48 +0000 (12:41 +0200)] 
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.

16 years agoDestroy the variants that remain on the stack in case of error.
Akim Demaille [Mon, 28 Jul 2008 14:01:57 +0000 (16:01 +0200)] 
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.

16 years agoAdd "%define assert" to variants.
Akim Demaille [Fri, 25 Jul 2008 20:48:42 +0000 (22:48 +0200)] 
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.

16 years agoUse "%define variant" in bench.pl.
Akim Demaille [Wed, 22 Oct 2008 10:57:46 +0000 (05:57 -0500)] 
Use "%define variant" in bench.pl.

* etc/bench.pl.in: No longer use the pseudo directive %variants,
just use %define variants.

16 years agoRegen.
Akim Demaille [Fri, 25 Jul 2008 19:45:51 +0000 (21:45 +0200)] 
Regen.

* src/parse-gram.h, src/parse-gram.c: Regen.

16 years agoFix user actions without a trailing semicolon.
Joel E. Denny [Tue, 4 Nov 2008 20:03:00 +0000 (15:03 -0500)] 
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.

16 years agoUse b4_copyright_years.
Akim Demaille [Fri, 25 Jul 2008 20:00:31 +0000 (22:00 +0200)] 
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.

16 years agoFormatting changes.
Akim Demaille [Fri, 25 Jul 2008 19:29:43 +0000 (21:29 +0200)] 
Formatting changes.

* data/lalr1-fusion.cc, src/parse-gram.y: here.

16 years agoFormatting changes.
Akim Demaille [Tue, 22 Jul 2008 09:16:15 +0000 (11:16 +0200)] 
Formatting changes.

* data/lalr1-fusion.cc: here.

16 years agoUse strict on bench.pl.
Akim Demaille [Tue, 22 Jul 2008 08:43:59 +0000 (10:43 +0200)] 
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.

16 years agoRemove spurious initial empty lines.
Akim Demaille [Tue, 22 Jul 2008 08:24:53 +0000 (10:24 +0200)] 
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 @.

16 years agoImprove the display of sizes.
Akim Demaille [Tue, 22 Jul 2008 07:33:34 +0000 (09:33 +0200)] 
Improve the display of sizes.

* etc/bench.p.in: Higher precision.
Sort by decreasing size.

16 years agoDon't memcpy C++ structures.
Akim Demaille [Mon, 21 Jul 2008 20:02:36 +0000 (22:02 +0200)] 
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.

16 years agoBetter defaults for bench.pl.
Akim Demaille [Mon, 21 Jul 2008 20:00:35 +0000 (22:00 +0200)] 
Better defaults for bench.pl.

* etc/bench.pl.in ($verbose, $cflags, $iterations): Change the
default values.
Adjust &verbose uses.
(-q, --quiet): New.

16 years agoMake variant.yy more complex.
Akim Demaille [Mon, 21 Jul 2008 19:23:42 +0000 (21:23 +0200)] 
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.

16 years agobench.pl --bench.
Akim Demaille [Mon, 21 Jul 2008 19:22:19 +0000 (21:22 +0200)] 
bench.pl --bench.

* etc/bench.pl.in (--bench, $bench): New.

16 years agoSort methods.
Akim Demaille [Mon, 21 Jul 2008 19:21:04 +0000 (21:21 +0200)] 
Sort methods.

* data/lalr1-fusion.cc (destroy): Use as() in its definition.
Define it after as().

16 years agoUseless parens.
Akim Demaille [Mon, 21 Jul 2008 19:20:45 +0000 (21:20 +0200)] 
Useless parens.

* data/lalr1-fusion.cc (b4_rhs_location): Remove useless parens.

16 years agoIssue missing synclines after user actions.
Akim Demaille [Mon, 21 Jul 2008 13:34:48 +0000 (15:34 +0200)] 
Issue missing synclines after user actions.

* data/c.m4 (b4_case): Issue synclines on the output file.

16 years agoRemove trailing empty line.
Akim Demaille [Mon, 21 Jul 2008 12:39:12 +0000 (14:39 +0200)] 
Remove trailing empty line.

* data/lalr1-fusion.cc: Don't add an empty line after the user's
epilogue.

16 years agoFix output of copyright years.
Akim Demaille [Mon, 21 Jul 2008 12:30:16 +0000 (14:30 +0200)] 
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.

16 years agoAvoid the spurious initial empty line.
Akim Demaille [Mon, 21 Jul 2008 12:19:14 +0000 (14:19 +0200)] 
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.

16 years agoRemove parser::rhs_number_type.
Akim Demaille [Mon, 21 Jul 2008 11:46:06 +0000 (13:46 +0200)] 
Remove parser::rhs_number_type.

* data/lalr1-fusion.cc (rhs_number_type): No longer define it.
(yyrhs_): Use b4_table_define.

16 years agoFix iteration type.
Akim Demaille [Mon, 21 Jul 2008 11:49:54 +0000 (13:49 +0200)] 
Fix iteration type.

* data/lalr1-fusion.cc: Use an int to iterate up to an int.

16 years agoFactor the declaration of the integer tables.
Akim Demaille [Mon, 21 Jul 2008 11:49:11 +0000 (13:49 +0200)] 
Factor the declaration of the integer tables.

* data/lalr1-fusion.cc (b4_table_define): New.
Use it.

16 years agoFix indentation of tables in lalr1.cc
Akim Demaille [Mon, 21 Jul 2008 11:18:17 +0000 (13:18 +0200)] 
Fix indentation of tables in lalr1.cc

* data/lalr1-fusion.cc: Fix the indentation.

16 years agoDestroy the lhs symbols after reduction.
Akim Demaille [Mon, 21 Jul 2008 09:39:55 +0000 (11:39 +0200)] 
Destroy the lhs symbols after reduction.

* data/lalr1-fusion.cc (parse): After the user action, when in
variant mode, destroy the lhs symbols.

16 years agoSimplify yysyntax_error_ use.
Akim Demaille [Mon, 21 Jul 2008 09:13:43 +0000 (11:13 +0200)] 
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.

16 years agoLet yy::variant::build return an lvalue.
Akim Demaille [Fri, 18 Jul 2008 16:37:40 +0000 (18:37 +0200)] 
Let yy::variant::build return an lvalue.

* data/lalr1-fusion.cc (variant::build): Return a reference to the
object.

16 years agoDefine yy::variant only when needed.
Akim Demaille [Fri, 18 Jul 2008 15:56:53 +0000 (17:56 +0200)] 
Define yy::variant only when needed.

* data/lalr1-fusion.cc (yy::variant): Define only if variants are
used.

16 years agoBench the three-stack lalr1.cc.
Akim Demaille [Mon, 25 Aug 2008 14:31:23 +0000 (16:31 +0200)] 
Bench the three-stack lalr1.cc.

* etc/bench.pl.in: Bench the three-stack lalr1.cc vs. the
one-stack one.

16 years agoFail on parse error in calc++.
Akim Demaille [Fri, 18 Jul 2008 08:20:31 +0000 (10:20 +0200)] 
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.

16 years agoDon't specify the skeleton twice in the example.
Akim Demaille [Fri, 18 Jul 2008 07:17:00 +0000 (09:17 +0200)] 
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.

16 years agobench: Improve output.
Akim Demaille [Thu, 17 Jul 2008 14:06:20 +0000 (16:06 +0200)] 
bench: Improve output.

* etc/bench.pl.in (bench_grammar): Tune the printf format.

16 years agobench: check impact of %debug on variants.
Akim Demaille [Thu, 17 Jul 2008 13:54:30 +0000 (15:54 +0200)] 
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.

16 years agobench: report the size too.
Akim Demaille [Thu, 17 Jul 2008 13:23:46 +0000 (15:23 +0200)] 
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.

16 years agobench: More use of the verbosity level.
Akim Demaille [Thu, 17 Jul 2008 12:51:06 +0000 (14:51 +0200)] 
bench: More use of the verbosity level.

* etc/bench.pl.in ($verbose, &verbose): New.
Use them.
More POD documentation.

16 years agobench.pl: a command line interface
Akim Demaille [Thu, 17 Jul 2008 12:22:53 +0000 (14:22 +0200)] 
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.

16 years agoBench the use of Boost.Variants.
Akim Demaille [Thu, 17 Jul 2008 11:46:28 +0000 (13:46 +0200)] 
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.

16 years agobench.pl: Pass directives as a list instead of as a string.
Akim Demaille [Thu, 17 Jul 2008 09:21:21 +0000 (11:21 +0200)] 
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.

16 years agoImprove genericity of bench.pl.
Akim Demaille [Thu, 17 Jul 2008 09:01:30 +0000 (11:01 +0200)] 
Improve genericity of bench.pl.

* etc/bench.pl.in (&bench_grammar): Take the set of benches as
argument.
(&bench_push_parser): New.
Call it.

16 years agoAdd documentation to bench.pl.
Akim Demaille [Thu, 17 Jul 2008 08:44:03 +0000 (10:44 +0200)] 
Add documentation to bench.pl.

* etc/bench.pl.in: Comment changes.

16 years agoFuse the three stacks into a single one.
Akim Demaille [Wed, 22 Oct 2008 10:25:11 +0000 (05:25 -0500)] 
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.

16 years agoPush the state, value, and location at the same time.
Akim Demaille [Wed, 22 Oct 2008 10:17:07 +0000 (05:17 -0500)] 
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.

16 years agoPrefer references to pointers.
Akim Demaille [Wed, 22 Oct 2008 09:16:34 +0000 (04:16 -0500)] 
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.

16 years agostack::size instead of stack::height.
Akim Demaille [Tue, 21 Oct 2008 23:04:46 +0000 (18:04 -0500)] 
stack::size instead of stack::height.

* data/lalr1.cc (stack::height): Rename as...
(stack::size): this.
Fix the output type.
Comment changes.

16 years agoUse variants to support objects as semantic values.
Akim Demaille [Tue, 21 Oct 2008 23:00:29 +0000 (18:00 -0500)] 
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.

16 years agoParameterize the extraction of semantic values.
Akim Demaille [Tue, 21 Oct 2008 22:20:22 +0000 (17:20 -0500)] 
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.

16 years agoPrepare easier M4 changes.
Akim Demaille [Tue, 21 Oct 2008 22:08:52 +0000 (17:08 -0500)] 
Prepare easier M4 changes.

* data/lalr1.cc: Use escaped [] instead of literals to prepare
future changes.

16 years agoInitiate further development.
Joel E. Denny [Sun, 2 Nov 2008 23:16:13 +0000 (18:16 -0500)] 
Initiate further development.

* NEWS: Create an empty section for new entries.
* gnulib: Update submodule to HEAD.

16 years ago* NEWS: Version 2.4. v2.4
Joel E. Denny [Sun, 2 Nov 2008 21:55:49 +0000 (16:55 -0500)] 
* NEWS: Version 2.4.

16 years agoPrepare for next release.
Joel E. Denny [Sun, 2 Nov 2008 21:55:14 +0000 (16:55 -0500)] 
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.

16 years agoSay %language is experimental.
Joel E. Denny [Sun, 2 Nov 2008 21:54:45 +0000 (16:54 -0500)] 
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.