From c17f9a4a6219bfec89530ae38188fd0be660c26d Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 16 Aug 2008 09:40:34 +0200 Subject: [PATCH] Shortcuts in bench directives. * etc/bench.pl.in (parse_dirs): New. Use it. (bench_variant_parser, bench_fusion_parser): Use %s and %d. Create the benches in "benches/". --- ChangeLog | 8 +++++ etc/bench.pl.in | 80 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 67 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 036491a2..84f378a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-11-10 Akim Demaille + + Shortcuts in bench directives. + * etc/bench.pl.in (parse_dirs): New. + Use it. + (bench_variant_parser, bench_fusion_parser): Use %s and %d. + Create the benches in "benches/". + 2008-11-10 Akim Demaille Formatting changes. diff --git a/etc/bench.pl.in b/etc/bench.pl.in index 0679046c..d058ce19 100755 --- a/etc/bench.pl.in +++ b/etc/bench.pl.in @@ -30,11 +30,14 @@ bench.pl - bench marks for Bison parsers. Specify the set of benches to run. The following grammar defines the I: - I ::= I | I -- Alternation - | I & I -- Concatenation - | [ I ] -- Optional - | ( I ) -- Parentheses - | I + directives ::= + directives | directives -- Alternation + | directives & directives -- Concatenation + | [ directives> ] -- Optional + | ( directives> ) -- Parentheses + | %s skeleton -- %skeleton "skeleton" + | #d definition -- %code { #define definition } + | directive Parentheses only group to override precedence. For instance: @@ -887,17 +890,19 @@ Bench the C++ lalr1.cc parser using Boost.Variants or %union. sub bench_variant_parser () { bench ('list', - ('%skeleton "lalr1.cc"', - '&', - '[', '%debug', ']', - '&', - '[', '%define variant', - '&', - '[', "%code {\n#define VARIANT_DESTROY\n}", ']', - '&', - '[', "%code {\n#define ONE_STAGE_BUILD\n}", ']', - ']' - )); + qw( + %s lalr1.cc + & + [ %debug ] + & + [ %define variant + & + [ #d VARIANT_DESTROY ] + & + [ #d ONE_STAGE_BUILD ] + ] + ) + ); } ###################################################################### @@ -911,9 +916,12 @@ Bench the C++ lalr1.cc parser using Boost.Variants or %union. sub bench_fusion_parser () { bench ('list', - ('%skeleton "lalr1-split.cc"', - '|', - '%skeleton "lalr1.cc"')); + qw( + %s lalr1-split.cc + | + %s lalr1.cc + ) + ); } ############################################################################ @@ -938,6 +946,7 @@ my @token; # expr: term (| term)* # term: fact (& fact)* # fact: ( expr ) | [ expr ] | dirs +# dirs: %s SKELETON | #d DEFINE | directive sub parse (@) { @token = @_; @@ -1002,11 +1011,37 @@ sub parse_fact () unless $token[0] eq ']'; shift @token; } + else + { + @res = parse_dirs (); + } + return @res; +} + +sub parse_dirs () +{ + my @res; + die "unexpected end of expression" + unless defined $token[0]; + + if ($token[0] eq '#d') + { + shift @token; + @res = ("%code {\n#define\n}"); + shift @token; + } + elsif ($token[0] eq '%s') + { + shift @token; + @res = ("%skeleton \"$token[0]\""); + shift @token; + } else { @res = $token[0]; shift @token; } + return @res; } @@ -1035,14 +1070,17 @@ sub getopt () getopt; # Create the directory we work in. +mkdir "benches" or die "cannot create benches" + unless -d "benches"; my $count = 1; ++$count - while -d "bench-$count"; -my $dir = "bench-$count"; + while -d "benches/$count"; +my $dir = "benches/$count"; mkdir $dir or die "cannot create $dir"; chdir $dir or die "cannot chdir $dir"; + # The following message is tailored to please Emacs' compilation-mode. verbose 1, "Entering directory `$dir'\n"; verbose 1, "Using bison=$bison.\n"; -- 2.45.2