From 7484f1d4f3a173a2d8a5f08b8b561d31118c29e1 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 17 Jul 2008 11:01:30 +0200 Subject: [PATCH] Improve genericity of bench.pl. * etc/bench.pl.in (&bench_grammar): Take the set of benches as argument. (&bench_push_parser): New. Call it. --- ChangeLog | 8 ++++++++ etc/bench.pl.in | 52 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c0369bc..c15a1541 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-11-03 Akim Demaille + + 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 Add documentation to bench.pl. diff --git a/etc/bench.pl.in b/etc/bench.pl.in index 77d9975e..87bb53bc 100755 --- a/etc/bench.pl.in +++ b/etc/bench.pl.in @@ -398,28 +398,29 @@ sub compile ($) or die; } -=item C +=item C Generate benches for C<$gram>. C<$gram> should be C or -C. +C. 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 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: -- 2.45.2