# Executing Actions. -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# action.
AT_DATA_GRAMMAR([[input.y]],
-[[%{
+[[%error-verbose
+%debug
+%{
# include <stdio.h>
# include <stdlib.h>
static void yyerror (const char *msg);
static int yylex (void);
-# define YYDEBUG 1
-# define YYERROR_VERBOSE 1
%}
%%
exp: { putchar ('0'); }
AT_SETUP([Exotic Dollars])
AT_DATA_GRAMMAR([[input.y]],
-[[%{
+[[%error-verbose
+%debug
+%{
# include <stdio.h>
# include <stdlib.h>
static void yyerror (const char *msg);
static int yylex (void);
-# define YYDEBUG 1
-# define YYERROR_VERBOSE 1
+# define USE(Var)
%}
%union
exp: a_1 a_2 { $<val>$ = 3; } { $<val>$ = $<val>3 + 1; } a_5
sum_of_the_five_previous_values
{
+ USE (($1, $2, $<foo>3, $<foo>4, $5));
printf ("%d\n", $6);
}
;
}
]])
-AT_CHECK([bison -d -v -o input.c input.y])
+AT_CHECK([bison -d -v -o input.c input.y], 0)
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 0,
[[15
{
int ival;
}])
+AT_LALR1_CC_IF([%define "global_tokens_and_yystype"])
[
%{
]AT_LALR1_CC_IF([typedef yy::location YYLTYPE;
;
%%
/* Alias to ARGV[1]. */
-const char *yysource = 0;
+const char *source = 0;
static int
yylex (]AT_LEX_FORMALS[)
AT_LOC.last_line = AT_LOC.last_column = AT_LOC.first_line + 9;
])[
- if (yysource[c])
- printf ("sending: '%c'", yysource[c]);
+ if (source[c])
+ printf ("sending: '%c'", source[c]);
else
printf ("sending: EOF");
printf (" (%d@%d-%d)\n", c, RANGE (]AT_LOC[));
- return yysource[c];
+ return source[c];
}
]AT_LALR1_CC_IF(
int
main (int argc, const char *argv[])
{
+ int status;
yydebug = !!getenv ("YYDEBUG");
assert (argc == 2);
- yysource = argv[1];
- if (yyparse ())
+ source = argv[1];
+ status = yyparse ();
+ switch (status)
{
- printf ("Parsing FAILED.\n");
- exit (1);
+ case 0: printf ("Successful parse.\n"); break;
+ case 1: printf ("Parsing FAILED.\n"); break;
+ default: printf ("Parsing FAILED (status %d).\n", status); break;
}
- printf ("Successful parse.\n");
- return 0;
+ return status;
}
]])
sending: EOF (3@30-39)
input (0@29-29): /* Nothing */
input (2@0-29): line (0@0-29) input (0@29-29)
+Freeing nterm input (2@0-29)
Successful parse.
]])
sending: EOF (3@30-39)
input (0@29-29): /* Nothing */
input (2@0-29): line (-1@0-29) input (0@29-29)
+Freeing nterm input (2@0-29)
Successful parse.
]])
# Upon stack overflow, all symbols on the stack should be destroyed.
# Only check for yacc.c.
AT_YACC_IF([
-AT_PARSER_CHECK([./input '(x)(x)(x)(x)(x)(x)(x)'], 1,
+AT_PARSER_CHECK([./input '(x)(x)(x)(x)(x)(x)(x)'], 2,
[[sending: '(' (0@0-9)
sending: 'x' (1@10-19)
thing (1@10-19): 'x' (1@10-19)
sending: 'x' (19@190-199)
thing (19@190-199): 'x' (19@190-199)
sending: ')' (20@200-209)
-200-209: parser stack overflow
+200-209: memory exhausted
Freeing nterm thing (19@190-199)
Freeing nterm line (15@150-179)
Freeing nterm line (12@120-149)
Freeing nterm line (6@60-89)
Freeing nterm line (3@30-59)
Freeing nterm line (0@0-29)
-Parsing FAILED.
+Parsing FAILED (status 2).
]])
])