Commit Graph

1934 Commits

Author SHA1 Message Date
Akim Demaille
247efe346c Formatting changes. 2008-11-10 12:01:19 +01:00
Akim Demaille
5d73144067 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.
2008-11-10 11:58:01 +01:00
Akim Demaille
21db118b64 Regen. 2008-11-10 11:54:38 +01:00
Akim Demaille
6ed15cde29 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.
2008-11-10 11:50:57 +01:00
Akim Demaille
30bb2edccf 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.
2008-11-10 11:47:49 +01:00
Akim Demaille
b3a28fd4e9 Comment changes. 2008-11-10 11:44:13 +01:00
Akim Demaille
914202bdac 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.
2008-11-10 11:41:00 +01:00
Akim Demaille
c17f9a4a62 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/".
2008-11-10 11:35:54 +01:00
Akim Demaille
b9855ea55b Formatting changes.
* data/lalr1.cc: here.
2008-11-10 11:32:12 +01:00
Akim Demaille
6e0977873a 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.
2008-11-10 11:29:06 +01:00
Akim Demaille
4c3cc7da5d 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_.
2008-11-10 11:25:36 +01:00
Akim Demaille
d69c9694a7 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.
2008-11-10 11:21:50 +01:00
Akim Demaille
5263bea9f7 --trace=muscles
* src/getargs.h, src/getargs.c (trace_muscle): New.
	(trace_types, trace_args): Support it.
	* src/output.c (output_skeleton): Use it.
2008-11-10 11:18:09 +01:00
Akim Demaille
4175f6bba2 muscles_output.
* src/output.c (muscles_output): New, extracted from...
	(output_skeleton): here.
	Adjust.
2008-11-10 11:15:00 +01:00
Akim Demaille
1de69d6a33 Formatting changes. 2008-11-10 11:11:52 +01:00
Akim Demaille
36db78a733 Update the variant example.
* examples/variant.yy: Formatting changes.
	One stage build.
2008-11-10 11:08:09 +01:00
Akim Demaille
e5eb92e794 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.
2008-11-10 11:04:31 +01:00
Akim Demaille
763074102b Test variants.
* tests/c++.at (AT_CHECK_VARIANTS): New.
	Use it with and without %define assert.
2008-11-10 11:00:58 +01:00
Akim Demaille
d78f0ac9d8 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.
2008-11-10 10:48:15 +01:00
Akim Demaille
c85be41a07 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.
2008-11-09 20:57:06 +01:00
Akim Demaille
db65ca1f12 fix eof condition 2008-11-09 20:54:03 +01:00
Akim Demaille
9b0efa5bc2 Fix --help. 2008-11-09 20:50:39 +01:00
Akim Demaille
432ac57aaa Require the generation of parse-gram.output.
* src/Makefile.am (YACC): Pass --report=all.
2008-11-09 20:10:00 +01:00
Akim Demaille
deef2a0a4d Formatting changes. 2008-11-09 20:06:27 +01:00
Akim Demaille
df72984aa5 Update TODO.
* TODO: Remove obsolete items.
	Update others.
2008-11-09 20:03:30 +01:00
Akim Demaille
f10e19fd1a 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.
2008-11-09 20:00:29 +01:00
Akim Demaille
5de9c59301 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.
2008-11-09 19:57:30 +01:00
Akim Demaille
757f8f98fc 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.
2008-11-09 19:54:29 +01:00
Akim Demaille
d3be4f6d42 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.
2008-11-09 19:51:28 +01:00
Akim Demaille
1f7d007bf6 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.
2008-11-09 19:48:20 +01:00
Akim Demaille
bc0b0477e2 Rename data_type and stack_symbol_type.
* data/lalr1.cc (data_type): Rename as...
	(stack_symbol_type): this.
2008-11-09 19:45:14 +01:00
Akim Demaille
57295d14f9 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.
2008-11-09 19:42:08 +01:00
Akim Demaille
e9b0834e18 Push a complete symbol, not connected parts.
* data/lalr1.cc (yypush_): Take a data_type&, not disconnected
	state, value and location.
	Adjust callers.
2008-11-09 19:39:09 +01:00
Akim Demaille
6082531abb Agregate yylval and yylloc.
* data/lalr1.cc (parser::yylval, parser::yylloc): Replace by...
	(parser::yyla): this.
2008-11-09 19:36:04 +01:00
Akim Demaille
33c195cc37 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.
2008-11-09 19:33:04 +01:00
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