* tests/regression.at (input.y): s/YYEOF/MYEOF/, as the skeleton

defines it.
* data/glr.c (yystos): New.
(b4_yysymprint_generate, b4_yydestruct_generate): Invoke.
(YYDSYMPRINT): New.
(yyval): Don't define it, it is handled via M4.
(yyrecoverParseError): Free verbosely the discarded symbols.
* data/yacc.c (yysymprint): Remove, rather...
(b4_yysymprint_generate): invoke.
* data/c.m4 (b4_yysymprint_generate): New.
Accept pointers as arguments, as opposed to the version from
yacc.c.
(b4_yydestruct_generate): Likewise.
* tests/cations.at (Printers and Destructors): Use Bison directives
instead of CPP macros.
Don't rely on internal details.
This commit is contained in:
Akim Demaille
2002-11-12 09:03:13 +00:00
parent b0400cc6ef
commit 7bd6c77e5e
7 changed files with 156 additions and 77 deletions

View File

@@ -327,8 +327,8 @@ m4_define([b4_syncline],
# SYMBOL-ACTION, SYMBOL-TYPENAME)
# -------------------------------------------------
m4_define([b4_symbol_actions],
[m4_pushdef([b4_dollar_dollar], [yyvalue.$6])dnl
m4_pushdef([b4_at_dollar], [yylocation])dnl
[m4_pushdef([b4_dollar_dollar], [yyvaluep->$6])dnl
m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl
case $4: /* $3 */
b4_syncline([$2], [$1])
$5;
@@ -351,13 +351,13 @@ m4_define([b4_yydestruct_generate],
]$1([yydestruct],
[static void],
[[int yytype], [yytype]],
[[YYSTYPE yyvalue], [yyvalue]]b4_location_if([,
[[YYLTYPE yylocation], [yylocation]]]))[
[[int yytype], [yytype]],
[[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([,
[[YYLTYPE *yylocationp], [yylocationp]]]))[
{
/* Pacify ``unused variable'' warnings. */
(void) yyvalue;
]b4_location_if([ (void) yylocation;
(void) yyvaluep;
]b4_location_if([ (void) yylocationp;
])[
switch (yytype)
{
@@ -367,3 +367,46 @@ m4_define([b4_yydestruct_generate],
}
}]dnl
])
# b4_yysymprint_generate(FUNTION-DECLARATOR)
# ------------------------------------------
# Generate the "yysymprint" function, which declaration is issued using
# FUNTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C
# or "b4_c_function_def" for K&R.
m4_define([b4_yysymprint_generate],
[[/*-----------------------------.
| Print this symbol on YYOUT. |
`-----------------------------*/
]$1([yysymprint],
[static void],
[[FILE *yyout], [yyout]],
[[int yytype], [yytype]],
[[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([,
[[YYLTYPE *yylocationp], [yylocationp]]]))
{
/* Pacify ``unused variable'' warnings. */
(void) yyvaluep;
b4_location_if([ (void) yylocationp;
])dnl
if (yytype < YYNTOKENS)
{
YYFPRINTF (yyout, "token %s (", yytname[[yytype]]);
# ifdef YYPRINT
YYPRINT (yyout, yytoknum[[yytype]], yyvalue);
# endif
}
else
YYFPRINTF (yyout, "nterm %s (", yytname[[yytype]]);
switch (yytype)
{
m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
default:
break;
}
YYFPRINTF (yyout, ")");
}
])