bench.pl --bench.

* etc/bench.pl.in (--bench, $bench): New.
This commit is contained in:
Akim Demaille
2008-07-21 21:22:19 +02:00
parent 006a030300
commit a6df593dfe
2 changed files with 45 additions and 13 deletions

View File

@@ -1,3 +1,8 @@
2008-11-04 Akim Demaille <demaille@gostai.com>
bench.pl --bench.
* etc/bench.pl.in (--bench, $bench): New.
2008-11-04 Akim Demaille <demaille@gostai.com> 2008-11-04 Akim Demaille <demaille@gostai.com>
Sort methods. Sort methods.

View File

@@ -29,6 +29,27 @@ bench.pl - perform benches on Bison parsers.
=over 4 =over 4
=item B<-b>, B<--bench>=I<bench-name>
Specify the set of benches to run. I<bench-name> should be one of:
=over 4
=item I<fusion>
Test F<lalr1.cc> with three stacks against F<lalr1-fusion.cc> which
uses a single one.
=item I<push>
Test the push parser vs. the pull interface. Use the C parser.
=item I<variant>
Test the use of variants instead of union in the C++ parser.
=back
=item B<-c>, B<--cflags>=I<flags> =item B<-c>, B<--cflags>=I<flags>
Flags to pass to the C or C++ compiler. Flags to pass to the C or C++ compiler.
@@ -590,12 +611,12 @@ yylex(yy::parser::semantic_type* yylval)
return yy::parser::token::END_OF_FILE; return yy::parser::token::END_OF_FILE;
else if (stage % 2) else if (stage % 2)
{ {
IF_VARIANTS(*yylval, yylval->ival) = stage; IF_VARIANTS(yylval->build<int>(), yylval->ival) = stage;
return yy::parser::token::NUMBER; return yy::parser::token::NUMBER;
} }
else else
{ {
IF_VARIANTS(*yylval =, yylval->sval = new) std::string("A string."); IF_VARIANTS(yylval->build<std::string>() =, yylval->sval = new) std::string("A string.");
return yy::parser::token::TEXT; return yy::parser::token::TEXT;
} }
abort(); abort();
@@ -741,10 +762,12 @@ sub bench_variant_parser ()
bench_grammar bench_grammar
('variant', ('variant',
( (
"union" => [], "f-union" => ['%skeleton "lalr1-fusion.cc"'],
"variant" => ['%variant'], "f-uni-deb" => ['%skeleton "lalr1-fusion.cc"', '%debug'],
"union-debug" => ['%debug'], "f-var" => ['%skeleton "lalr1-fusion.cc"', '%variant'],
"variant-debug" => ['%debug', '%variant'], "f-var-deb" => ['%skeleton "lalr1-fusion.cc"', '%debug', '%variant'],
"f-var-dtr" => ['%skeleton "lalr1-fusion.cc"', '%variant', "%code {\n#define VARIANT_DESTROY\n}"],
"f-var-deb-dtr" => ['%skeleton "lalr1-fusion.cc"', '%debug', '%variant', "%code {\n#define VARIANT_DESTROY\n}"],
) )
); );
} }
@@ -782,10 +805,13 @@ sub help ($)
sub getopt () sub getopt ()
{ {
use Getopt::Long; use Getopt::Long;
%option = ("h|help" => sub { help ($verbose) }, %option = (
"v|verbose" => sub { ++$verbose }, "b|bench=s" => \$bench,
"c|cflags=s" => \$cflags, "c|cflags=s" => \$cflags,
"i|iterations=i" => \$iterations); "h|help" => sub { help ($verbose) },
"i|iterations=i" => \$iterations,
"v|verbose" => sub { ++$verbose },
);
Getopt::Long::Configure ("bundling", "pass_through"); Getopt::Long::Configure ("bundling", "pass_through");
GetOptions (%option) GetOptions (%option)
or exit 1; or exit 1;
@@ -798,9 +824,10 @@ verbose 1, "Using bison=$bison.\n";
verbose 1, "Using cc=$cc.\n"; verbose 1, "Using cc=$cc.\n";
verbose 1, "Using cxx=$cxx.\n"; verbose 1, "Using cxx=$cxx.\n";
verbose 1, "Using cflags=$cflags.\n"; verbose 1, "Using cflags=$cflags.\n";
# bench_push_parser();
# bench_variant_parser(); bench_fusion_parser() if $bench eq "fusion";
bench_fusion_parser(); bench_push_parser() if $bench eq "push";
bench_variant_parser() if $bench eq "variant";
### Setup "GNU" style for perl-mode and cperl-mode. ### Setup "GNU" style for perl-mode and cperl-mode.
## Local Variables: ## Local Variables: