[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] bench: check impact of %debug on variants.
From: |
Akim Demaille |
Subject: |
[PATCH] bench: check impact of %debug on variants. |
Date: |
Mon, 03 Nov 2008 21:00:55 -0000 |
* etc/bench.pl.in (variant_grammar): Fix the computation of
$variant.
Generate a grammar file that can work with or without %debug.
Do use the @directive.
(bench_variant_parser): Check impact of %debug.
(@directives): Rename all the occurrences to...
(@directive): this, for consistency.
---
ChangeLog | 11 +++++++++++
etc/bench.pl.in | 49 +++++++++++++++++++++++++++----------------------
2 files changed, 38 insertions(+), 22 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 1dbff82..a52e053 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2008-11-03 Akim Demaille <address@hidden>
+ bench: check impact of %debug on variants.
+ * etc/bench.pl.in (variant_grammar): Fix the computation of
+ $variant.
+ Generate a grammar file that can work with or without %debug.
+ Do use the @directive.
+ (bench_variant_parser): Check impact of %debug.
+ (@directives): Rename all the occurrences to...
+ (@directive): this, for consistency.
+
+2008-11-03 Akim Demaille <address@hidden>
+
bench: report the size too.
* etc/bench.pl.in ($iterations): Defaults to -3.
(&bench_grammar): Require hireswallclock.
diff --git a/etc/bench.pl.in b/etc/bench.pl.in
index 1d6d90c..481f3dd 100755
--- a/etc/bench.pl.in
+++ b/etc/bench.pl.in
@@ -119,9 +119,9 @@ not a valid directive.
sub directives($@)
{
- my ($bench, @directives) = @_;
+ my ($bench, @directive) = @_;
my $res = "/* Directives for bench `$bench'. */\n";
- for my $d (@directives)
+ for my $d (@directive)
{
$res .= $d . "\n"
unless $d eq '%variant';
@@ -130,7 +130,7 @@ sub directives($@)
return $res;
}
-=item C<triangular_grammar ($base, $max, @directives)>
+=item C<triangular_grammar ($base, $max, @directive)>
Create a large triangular grammar which looks like :
@@ -150,7 +150,7 @@ Create a large triangular grammar which looks like :
C<$base> is the base name for the file to create (F<$base.y>).
C<$max> is the number of such rules (here, 5). You may pass
-additional Bison C<@directives>.
+additional Bison C<@directive>.
The created parser is self contained: it includes its scanner, and
source of input.
@@ -158,8 +158,8 @@ source of input.
sub triangular_grammar ($$$)
{
- my ($base, $max, @directives) = @_;
- my $directives = directives ($base, @directives);
+ my ($base, $max, @directive) = @_;
+ my $directives = directives ($base, @directive);
my $out = new IO::File ">$base.y"
or die;
@@ -267,18 +267,18 @@ sub calc_input ($$)
}
##################################################################
-=item C<calc_grammar ($base, $max, @directives)>
+=item C<calc_grammar ($base, $max, @directive)>
Generate a Bison file F<$base.y> for a calculator parser in C. Pass
-the additional Bison C<@directives>. C<$max> is ignored, but left to
+the additional Bison C<@directive>. C<$max> is ignored, but left to
have the same interface as C<triangular_grammar>.
=cut
sub calc_grammar ($$$)
{
- my ($base, $max, @directives) = @_;
- my $directives = directives ($base, @directives);
+ my ($base, $max, @directive) = @_;
+ my $directives = directives ($base, @directive);
my $out = new IO::File ">$base.y"
or die;
@@ -477,32 +477,32 @@ EOF
##################################################################
-=item C<variant_grammar ($base, $max, @directives)>
+=item C<variant_grammar ($base, $max, @directive)>
Generate a Bison file F<$base.y> that uses, or not, the Boost.Variants
-depending on the C<@directives>.
+depending on the C<@directive>.
=cut
sub variant_grammar ($$$)
{
- my ($base, $max, @directives) = @_;
- my $directives = directives ($base, @directives);
- my $variant = grep { '%variant' } @directives;
+ my ($base, $max, @directive) = @_;
+ my $directives = directives ($base, @directive);
+ my $variant = grep { $_ eq '%variant' } @directive;
my $out = new IO::File ">$base.y"
or die;
print $out <<EOF;
-%debug
%language "C++"
%defines
+$directives
-%code requires // code for the .hh file
+%code requires // variant.h
{
#include <string>
}
-%code // code for the .cc file
+%code // variant.c
{
#include <algorithm>
#include <iostream>
@@ -612,7 +612,9 @@ yy::parser::error(const yy::parser::location_type& yylloc,
int main(int argc, char *argv[])
{
yy::parser p;
+#if YYDEBUG
p.set_debug_level(!!getenv("YYDEBUG"));
+#endif
p.parse();
return 0;
}
@@ -647,9 +649,9 @@ sub compile ($)
Generate benches for C<$gram>. C<$gram> should be C<calc> or
C<triangle>. C<%bench> is a hash of the form:
- $name => @directives
+ $name => @directive
-where C<$name> is the name of the bench, and C<@directives> are the
+where C<$name> is the name of the bench, and C<@directive> are the
Bison directive to use for this bench. All the benches are compared
against each other, repeated 50 times.
@@ -671,6 +673,7 @@ sub bench_grammar ($%)
# Call the Bison input file generator.
my $generator = "$gram" . "_grammar";
&$generator ($name, 200, @$directives);
+ # Compile the executable.
compile ($name);
$bench{$name} = "system ('./$name');";
chop($size{$name} = `wc -c <$name`);
@@ -732,8 +735,10 @@ sub bench_variant_parser ()
bench_grammar
('variant',
(
- "union" => [],
- "variant" => ['%variant'],
+ "union" => [],
+ "variant" => ['%variant'],
+ "union-debug" => ['%debug'],
+ "variant-debug" => ['%debug', '%variant'],
)
);
}
--
1.6.0.2.588.g3102
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] bench: check impact of %debug on variants.,
Akim Demaille <=