]> git.saurik.com Git - bison.git/commitdiff
Improve genericity of bench.pl.
authorAkim Demaille <demaille@gostai.com>
Thu, 17 Jul 2008 09:01:30 +0000 (11:01 +0200)
committerAkim Demaille <demaille@gostai.com>
Mon, 3 Nov 2008 21:00:17 +0000 (22:00 +0100)
* etc/bench.pl.in (&bench_grammar): Take the set of benches as
argument.
(&bench_push_parser): New.
Call it.

ChangeLog
etc/bench.pl.in

index 2c0369bc41d0ce2a2462a38da00ff562c782baeb..c15a1541bc48a4903fce412a48ef44e79012637f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+       Improve genericity of bench.pl.
+       * etc/bench.pl.in (&bench_grammar): Take the set of benches as
+       argument.
+       (&bench_push_parser): New.
+       Call it.
+
 2008-11-03  Akim Demaille  <demaille@gostai.com>
 
        Add documentation to bench.pl.
index 77d9975e733c54b147ec0df346b94a0ace993963..87bb53bc5b3a35574000cb38f01c0e59060ca7b3 100755 (executable)
@@ -398,28 +398,29 @@ sub compile ($)
     or die;
 }
 
-=item C<bench_grammar ($gram)>
+=item C<bench_grammar ($gram, %bench)>
 
 Generate benches for C<$gram>.  C<$gram> should be C<calc> or
-C<triangle>.
+C<triangle>.  C<%bench> is a hash of the form:
+
+  C<$name> => C<$directives>
+
+where C<$name> is the name of the bench, and C<$directives> are the
+Bison directive to use for this bench.  All the benches are compared
+against each other, repeated 50 times.
 
 =cut
 
-sub bench_grammar ($)
+sub bench_grammar ($%)
 {
-  my ($gram) = @_;
-  my %test =
-    (
-     "pull-impure" => '',
-     "pull-pure" => '%define api.pure',
-     "push-impure" => '%define api.push_pull "both"',
-     "push-pure" => '%define api.push_pull "both" %define api.pure',
-    );
+  my ($gram, %test) = @_;
 
+  # Set up the benches as expected by timethese.
   my %bench;
   while (my ($name, $directives) = each %test)
     {
       print STDERR "$name\n";
+      # Call the Bison input file generator.
       my $generator = "$gram" . "_grammar";
       &$generator ($name, 200, $directives);
       compile ($name);
@@ -427,13 +428,36 @@ sub bench_grammar ($)
     }
 
   print "$gram:\n";
+  # Run the benches.
   my $res = timethese (50, \%bench, 'nop');
+  # Output the result.
   cmpthese ($res, 'nop');
 }
 
-print STDERR "Using $bison, $cc.\n";
-calc_input ('calc', 200);
-bench_grammar ('calc');
+
+=item C<bench_push_parser ()>
+
+Bench the C push parser against the pull parser, pure and impure
+interfaces.
+
+=cut
+
+sub bench_push_parser ()
+{
+  print STDERR "Using $bison, $cc.\n";
+  calc_input ('calc', 200);
+  bench_grammar
+    ('calc',
+     (
+      "pull-impure" => '',
+      "pull-pure" => '%define api.pure',
+      "push-impure" => '%define api.push_pull "both"',
+      "push-pure" => '%define api.push_pull "both" %define api.pure',
+     )
+    );
+}
+
+bench_push_parser();
 
 ### Setup "GNU" style for perl-mode and cperl-mode.
 ## Local Variables: