* tests/torture.at (Many lookaheads): New test.

This commit is contained in:
Akim Demaille
2002-05-05 11:56:37 +00:00
parent 5372019fab
commit 39ceb25bdb
2 changed files with 123 additions and 6 deletions

View File

@@ -1,3 +1,7 @@
2002-05-05 Akim Demaille <akim@epita.fr>
* tests/torture.at (Many lookaheads): New test.
2002-05-05 Akim Demaille <akim@epita.fr> 2002-05-05 Akim Demaille <akim@epita.fr>
* src/output.c (GENERATE_OUTPUT_TABLE): Replace with... * src/output.c (GENERATE_OUTPUT_TABLE): Replace with...

View File

@@ -27,9 +27,6 @@ AT_BANNER([[Torture Tests.]])
# ------------------------------------------- # -------------------------------------------
# Create FILE-NAME, containing a self checking parser for a huge # Create FILE-NAME, containing a self checking parser for a huge
# triangular grammar. # triangular grammar.
# FIXME: The `10 *' below are there to avoid clashes with predefined
# tokens. These clashes should be exercised, I'm afraid something
# is broken wrt previous Bisons.
m4_define([AT_DATA_TRIANGULAR_GRAMMAR], m4_define([AT_DATA_TRIANGULAR_GRAMMAR],
[AT_DATA([[gengram.pl]], [AT_DATA([[gengram.pl]],
[[#! /usr/bin/perl -w [[#! /usr/bin/perl -w
@@ -144,9 +141,6 @@ AT_CLEANUP
# ------------------------------------------- # -------------------------------------------
# Create FILE-NAME, containing a self checking parser for a huge # Create FILE-NAME, containing a self checking parser for a huge
# horizontal grammar. # horizontal grammar.
# FIXME: The `10 *' below are there to avoid clashes with predefined
# tokens. These clashes should be exercised, I'm afraid something
# is broken wrt previous Bisons.
m4_define([AT_DATA_HORIZONTAL_GRAMMAR], m4_define([AT_DATA_HORIZONTAL_GRAMMAR],
[AT_DATA([[gengram.pl]], [AT_DATA([[gengram.pl]],
[[#! /usr/bin/perl -w [[#! /usr/bin/perl -w
@@ -242,6 +236,125 @@ AT_CLEANUP
# AT_DATA_LOOKAHEADS_GRAMMAR(FILE-NAME, SIZE)
# -------------------------------------------
# Create FILE-NAME, containing a self checking parser for a grammar
# requiring SIZE lookaheads.
m4_define([AT_DATA_LOOKAHEADS_GRAMMAR],
[AT_DATA([[gengram.pl]],
[[#! /usr/bin/perl -w
use strict;
use Text::Wrap;
my $max = $ARGV[0] || 10;
print <<EOF;
%{
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define YYERROR_VERBOSE 1
#define YYDEBUG 1
static int yylex (void);
static void yyerror (const char *msg);
%}
%union
{
int val;
};
%type <val> input exp
%token token
EOF
print
wrap ("%type <val> ",
" ",
map { "token$_" } (1 .. $max)),
"\n";
for my $count (1 .. $max)
{
print "%token \"$count\" $count\n";
};
print <<EOF;
%%
input:
exp { assert (\@S|@1 == 1); \$\$ = \@S|@1; }
| input exp { assert (\@S|@2 == \@S|@1 + 1); \$\$ = \@S|@2; }
;
exp:
token1 "1" { assert (\@S|@1 == 1); }
EOF
for my $count (2 .. $max)
{
print "| token$count \"$count\" { assert (\@S|@1 == $count); }\n";
};
print ";\n";
for my $count (1 .. $max)
{
print "token$count: token { \$\$ = $count; };\n";
};
print <<EOF;
%%
static int
yylex (void)
{
static int return_token = 1;
static int counter = 1;
if (counter > $max)
return 0;
if (return_token)
{
return_token = 0;
return token;
}
return_token = 1;
return counter++;
}
static void
yyerror (const char *msg)
{
fprintf (stderr, "%s\\n", msg);
}
int
main (void)
{
yydebug = !!getenv ("YYDEBUG");
return yyparse ();
}
EOF
]])
AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout])
mv stdout $1
])
## ----------------- ##
## Many lookaheads. ##
## ----------------- ##
AT_SETUP([Many lookaheads])
AT_DATA_LOOKAHEADS_GRAMMAR([input.y], [1000])
AT_CHECK([bison input.y -v -o input.c])
AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -o input], 0, [], [ignore])
AT_CHECK([./input])
AT_CLEANUP
# AT_DATA_STACK_TORTURE(C-PROLOGUE) # AT_DATA_STACK_TORTURE(C-PROLOGUE)
# --------------------------------- # ---------------------------------
# A parser specialized in torturing the stack size. # A parser specialized in torturing the stack size.