diff options
author | Akim Demaille <demaille@gostai.com> | 2008-08-16 09:40:34 +0200 |
---|---|---|
committer | Akim Demaille <demaille@gostai.com> | 2008-11-10 11:35:54 +0100 |
commit | c17f9a4a6219bfec89530ae38188fd0be660c26d (patch) | |
tree | 063a1db3485464d734caebc0a0ebee3ed9d1e602 /etc | |
parent | b9855ea55b31ff6c05a29f54ae860d06a56695ab (diff) | |
download | bison-c17f9a4a6219bfec89530ae38188fd0be660c26d.tar.gz |
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/".
Diffstat (limited to 'etc')
-rwxr-xr-x | etc/bench.pl.in | 80 |
1 files changed, 59 insertions, 21 deletions
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<directives>: - I<directives> ::= I<directives> | I<directives> -- Alternation - | I<directives> & I<directives> -- Concatenation - | [ I<directives> ] -- Optional - | ( I<directives> ) -- Parentheses - | I<directive> + 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 = @_; @@ -1004,9 +1013,35 @@ sub parse_fact () } 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"; |