]> git.saurik.com Git - bison.git/commitdiff
bench.pl --bench.
authorAkim Demaille <demaille@gostai.com>
Mon, 21 Jul 2008 19:22:19 +0000 (21:22 +0200)
committerAkim Demaille <demaille@gostai.com>
Tue, 4 Nov 2008 20:43:05 +0000 (21:43 +0100)
* etc/bench.pl.in (--bench, $bench): New.

ChangeLog
etc/bench.pl.in

index 051dced2c49d685ad5ac7ccf08a1ad9bf4f72064..dac5861243487551dc44de6e9c22f8efe7d28fe0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        Sort methods.
index ae50516fe6931e9de593da526f79dd5741b78a93..28003ea167a41ca547777a8cee1e49abe7df8958 100755 (executable)
@@ -29,6 +29,27 @@ bench.pl - perform benches on Bison parsers.
 
 =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>
 
 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;
   else if (stage % 2)
     {
-      IF_VARIANTS(*yylval, yylval->ival) = stage;
+      IF_VARIANTS(yylval->build<int>(), yylval->ival) = stage;
       return yy::parser::token::NUMBER;
     }
   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;
     }
   abort();
@@ -741,10 +762,12 @@ sub bench_variant_parser ()
   bench_grammar
     ('variant',
      (
-      "union"         => [],
-      "variant"       => ['%variant'],
-      "union-debug"   => ['%debug'],
-      "variant-debug" => ['%debug', '%variant'],
+      "f-union"         => ['%skeleton "lalr1-fusion.cc"'],
+      "f-uni-deb"   => ['%skeleton "lalr1-fusion.cc"', '%debug'],
+      "f-var"       => ['%skeleton "lalr1-fusion.cc"', '%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 ()
 {
   use Getopt::Long;
-  %option = ("h|help"     => sub { help ($verbose) },
-            "v|verbose"  => sub { ++$verbose },
-             "c|cflags=s" => \$cflags,
-             "i|iterations=i" => \$iterations);
+  %option = (
+    "b|bench=s"      => \$bench,
+    "c|cflags=s"     => \$cflags,
+    "h|help"         => sub { help ($verbose) },
+    "i|iterations=i" => \$iterations,
+    "v|verbose"      => sub { ++$verbose },
+    );
   Getopt::Long::Configure ("bundling", "pass_through");
   GetOptions (%option)
     or exit 1;
@@ -798,9 +824,10 @@ verbose 1, "Using bison=$bison.\n";
 verbose 1, "Using cc=$cc.\n";
 verbose 1, "Using cxx=$cxx.\n";
 verbose 1, "Using cflags=$cflags.\n";
-# bench_push_parser();
-# bench_variant_parser();
-bench_fusion_parser();
+
+bench_fusion_parser()  if $bench eq "fusion";
+bench_push_parser()    if $bench eq "push";
+bench_variant_parser() if $bench eq "variant";
 
 ### Setup "GNU" style for perl-mode and cperl-mode.
 ## Local Variables: