# Create FILE-NAME, containing a self checking parser for a huge
# triangular grammar.
m4_define([AT_DATA_TRIANGULAR_GRAMMAR],
-[AT_DATA([[gengram.pl]],
+[AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[gengram.pl]],
[[#! /usr/bin/perl -w
use strict;
%{
#include <stdio.h>
#include <stdlib.h>
-
+#include <assert.h>
+#define MAX $max
]AT_YYLEX_DECLARE[
]AT_YYERROR_DECLARE[
%}
print <<EOF;
%%
input:
- exp { if (\@S|@1 != 0) abort (); \$\$ = \@S|@1; }
-| input exp { if (\@S|@2 != \@S|@1 + 1) abort (); \$\$ = \@S|@2; }
+ exp { assert (\@S|@1 == 0); \$\$ = \@S|@1; }
+| input exp { assert (\@S|@2 == \@S|@1 + 1); \$\$ = \@S|@2; }
;
exp:
};
print ";\n";
-print <<EOF;
+print <<\EOF;
%%
+]AT_YYERROR_DEFINE[
static int
yylex (void)
{
static int inner = 1;
static int outer = 0;
- if (outer > $max)
+ if (outer > MAX)
return 0;
else if (inner > outer)
{
}
return inner++;
}
-
-static void
-yyerror (const char *msg)
-{
- fprintf (stderr, "%s\\n", msg);
-}
-
int
main (void)
{
}
EOF
]])
+AT_BISON_OPTION_POPDEFS
AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout])
mv stdout $1
# Create FILE-NAME, containing a self checking parser for a huge
# horizontal grammar.
m4_define([AT_DATA_HORIZONTAL_GRAMMAR],
-[AT_DATA([[gengram.pl]],
+[AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[gengram.pl]],
[[#! /usr/bin/perl -w
use strict;
%{
#include <stdio.h>
#include <stdlib.h>
-
+#define MAX $max
]AT_YYLEX_DECLARE[
]AT_YYERROR_DECLARE[
%}
(map { "\"$_\"" } (1 .. $max)), ";"),
"\n";
-print <<EOF;
+print <<\EOF;
%%
+#include <assert.h>
+]AT_YYERROR_DEFINE[
static int
yylex (void)
{
static int counter = 1;
- if (counter <= $max)
+ if (counter <= MAX)
return counter++;
- if (counter++ != $max + 1)
- abort ();
+ assert (counter++ == MAX + 1);
return 0;
}
-static void
-yyerror (const char *msg)
-{
- fprintf (stderr, "%s\\n", msg);
-}
-
int
main (void)
{
AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout])
mv stdout $1
+AT_BISON_OPTION_POPDEFS
])
# Create FILE-NAME, containing a self checking parser for a grammar
# requiring SIZE lookahead tokens.
m4_define([AT_DATA_LOOKAHEAD_TOKENS_GRAMMAR],
-[AT_DATA([[gengram.pl]],
+[AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[gengram.pl]],
[[#! /usr/bin/perl -w
use strict;
# include <stdio.h>
# include <stdlib.h>
# include <assert.h>
-
+# define MAX $max
]AT_YYLEX_DECLARE[
]AT_YYERROR_DECLARE[
%}
print "n$count: token { \$\$ = $count; };\n";
};
-print <<EOF;
+print <<\EOF;
%%
+]AT_YYERROR_DEFINE[
static int
yylex (void)
{
static int return_token = 1;
static int counter = 1;
- if (counter > $max)
+ if (counter > MAX)
{
- if (counter++ != $max + 1)
- abort ();
+ assert (counter++ == MAX + 1);
return 0;
}
if (return_token)
return counter++;
}
-static void
-yyerror (const char *msg)
-{
- fprintf (stderr, "%s\\n", msg);
-}
-
int
main (void)
{
AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout])
mv stdout $1
+AT_BISON_OPTION_POPDEFS
])
exp: WAIT_FOR_EOF exp | ;
%%
]AT_YYERROR_DEFINE[
+#include <assert.h>
static int
yylex (void)
{
- if (yylval < 0)
- abort ();
+ assert (0 <= yylval);
if (yylval--)
return WAIT_FOR_EOF;
else
{
char *endp;
YYSTYPE yylval_init;
- if (argc != 2)
- abort ();
+ assert (argc == 2);
yylval_init = strtol (argv[1], &endp, 10);
- if (! (argv[1] != endp
- && 0 <= yylval_init && yylval_init <= INT_MAX
- && errno != ERANGE))
- abort ();
+ assert (argv[1] != endp);
+ assert (0 <= yylval_init);
+ assert (yylval_init <= INT_MAX);
+ assert (errno != ERANGE);
yydebug = 1;
{
int count;
[[ new_status = yypull_parse (ps);
]],
[[ new_status = yyparse ();
-]])[ if (count > 0 && new_status != status)
- abort ();
+]])[ assert (0 <= count || new_status == status);
status = new_status;
}
]m4_bmatch([$2], [%push-],