mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-16 07:43:03 +00:00
yacc: fix YYBACKUP.
Reported by David Kastrup: https://lists.gnu.org/archive/html/bug-bison/2011-10/msg00002.html. * data/yacc.c (YYBACKUP): Accept rhs size. Restore the proper state value. * TODO (YYBACKUP): Make it... * tests/actions.at: a new test case. * NEWS, THANKS: Update.
This commit is contained in:
44
TODO
44
TODO
@@ -118,50 +118,6 @@ so both 256 and 257 are "mysterious".
|
||||
** YYFAIL
|
||||
It is seems to be *really* obsolete now, shall we remove it?
|
||||
|
||||
** YYBACKUP
|
||||
There is no test about it, no examples in the doc, and I'm not sure
|
||||
what it should look like. For instance what follows crashes.
|
||||
|
||||
%error-verbose
|
||||
%debug
|
||||
%pure-parser
|
||||
%code {
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <assert.h>
|
||||
|
||||
static void yyerror (const char *msg);
|
||||
static int yylex (YYSTYPE *yylval);
|
||||
}
|
||||
%%
|
||||
exp:
|
||||
'a' { printf ("a: %d\n", $1); }
|
||||
| 'b' { YYBACKUP('a', 123); }
|
||||
;
|
||||
%%
|
||||
static int
|
||||
yylex (YYSTYPE *yylval)
|
||||
{
|
||||
static char const input[] = "b";
|
||||
static size_t toknum;
|
||||
assert (toknum < sizeof input);
|
||||
*yylval = (toknum + 1) * 10;
|
||||
return input[toknum++];
|
||||
}
|
||||
|
||||
static void
|
||||
yyerror (const char *msg)
|
||||
{
|
||||
fprintf (stderr, "%s\n", msg);
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
yydebug = !!getenv("YYDEBUG");
|
||||
return yyparse ();
|
||||
}
|
||||
|
||||
** yychar == yyempty_
|
||||
The code in yyerrlab reads:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user