mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-10 12:53:03 +00:00
Improve the readability of the produced parsers.
* src/bison.s1: Formatting changes. Improve the comment related to the `$' mark. (yydefault): Don't fall through to `yyresume': `goto' there. * src/output.c (output_parser): When the `$' is met, skip the end of its line. New variable, `number_of_dollar_signs', to check there's exactly one `$' in the parser skeleton.
This commit is contained in:
174
src/bison.s1
174
src/bison.s1
@@ -25,10 +25,10 @@
|
||||
This special exception was added by the Free Software Foundation
|
||||
in version 1.24 of Bison. */
|
||||
|
||||
/* This is the parser code that is written into each bison parser
|
||||
when the %semantic_parser declaration is not specified in the grammar.
|
||||
It was written by Richard Stallman by simplifying the hairy parser
|
||||
used when %semantic_parser is specified. */
|
||||
/* This is the parser code that is written into each bison parser when
|
||||
the %semantic_parser declaration is not specified in the grammar.
|
||||
It was written by Richard Stallman by simplifying the hairy parser
|
||||
used when %semantic_parser is specified. */
|
||||
|
||||
#ifndef YYSTACK_USE_ALLOCA
|
||||
# ifdef alloca
|
||||
@@ -91,55 +91,59 @@
|
||||
#define YYACCEPT goto yyacceptlab
|
||||
#define YYABORT goto yyabortlab
|
||||
#define YYERROR goto yyerrlab1
|
||||
/* Like YYERROR except do call yyerror.
|
||||
This remains here temporarily to ease the
|
||||
transition to the new meaning of YYERROR, for GCC.
|
||||
/* Like YYERROR except do call yyerror. This remains here temporarily
|
||||
to ease the transition to the new meaning of YYERROR, for GCC.
|
||||
Once GCC version 2 has supplanted version 1, this can go. */
|
||||
#define YYFAIL goto yyerrlab
|
||||
#define YYRECOVERING() (!!yyerrstatus)
|
||||
#define YYBACKUP(token, value) \
|
||||
#define YYBACKUP(Token, Value) \
|
||||
do \
|
||||
if (yychar == YYEMPTY && yylen == 1) \
|
||||
{ yychar = (token), yylval = (value); \
|
||||
{ \
|
||||
yychar = (Token); \
|
||||
yylval = (Value); \
|
||||
yychar1 = YYTRANSLATE (yychar); \
|
||||
YYPOPSTACK; \
|
||||
goto yybackup; \
|
||||
} \
|
||||
else \
|
||||
{ yyerror ("syntax error: cannot back up"); YYERROR; } \
|
||||
{ \
|
||||
yyerror ("syntax error: cannot back up"); \
|
||||
YYERROR; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define YYTERROR 1
|
||||
#define YYERRCODE 256
|
||||
|
||||
#ifndef YYPURE
|
||||
# define YYLEX yylex()
|
||||
# define YYLEX yylex ()
|
||||
#endif
|
||||
|
||||
#ifdef YYPURE
|
||||
# ifdef YYLSP_NEEDED
|
||||
# ifdef YYLEX_PARAM
|
||||
# define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
|
||||
# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
|
||||
# else
|
||||
# define YYLEX yylex(&yylval, &yylloc)
|
||||
# define YYLEX yylex (&yylval, &yylloc)
|
||||
# endif
|
||||
# else /* not YYLSP_NEEDED */
|
||||
# else /* !YYLSP_NEEDED */
|
||||
# ifdef YYLEX_PARAM
|
||||
# define YYLEX yylex(&yylval, YYLEX_PARAM)
|
||||
# define YYLEX yylex (&yylval, YYLEX_PARAM)
|
||||
# else
|
||||
# define YYLEX yylex(&yylval)
|
||||
# define YYLEX yylex (&yylval)
|
||||
# endif
|
||||
# endif /* not YYLSP_NEEDED */
|
||||
# endif /* !YYLSP_NEEDED */
|
||||
#endif
|
||||
|
||||
/* If nonreentrant, generate the variables here. */
|
||||
|
||||
#ifndef YYPURE
|
||||
/* The lookahead symbol. */
|
||||
int yychar;
|
||||
int yychar;
|
||||
|
||||
/* The semantic value of the lookahead symbol. */
|
||||
YYSTYPE yylval;
|
||||
YYSTYPE yylval;
|
||||
|
||||
# ifdef YYLSP_NEEDED
|
||||
/* Location data for the lookahead symbol. */
|
||||
@@ -148,7 +152,7 @@ YYLTYPE yylloc;
|
||||
|
||||
/* Number of parse errors so far. */
|
||||
int yynerrs;
|
||||
#endif /* not YYPURE */
|
||||
#endif /* !YYPURE */
|
||||
|
||||
|
||||
#if YYDEBUG
|
||||
@@ -186,7 +190,7 @@ int yydebug; /* nonzero means print parse trace */
|
||||
of type size_t, but it can handle unsigned int. */
|
||||
|
||||
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
|
||||
# define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
|
||||
# define __yy_memcpy(To,From,Count) __builtin_memcpy (To,From,Count)
|
||||
#else /* not GNU C or C++ */
|
||||
# ifndef __cplusplus
|
||||
|
||||
@@ -236,14 +240,14 @@ __yy_memcpy (char *to, char *from, unsigned int count)
|
||||
# ifdef __cplusplus
|
||||
# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
|
||||
# define YYPARSE_PARAM_DECL
|
||||
# else /* not __cplusplus */
|
||||
# else /* !__cplusplus */
|
||||
# define YYPARSE_PARAM_ARG YYPARSE_PARAM
|
||||
# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
|
||||
# endif /* not __cplusplus */
|
||||
#else /* not YYPARSE_PARAM */
|
||||
# endif /* !__cplusplus */
|
||||
#else /* !YYPARSE_PARAM */
|
||||
# define YYPARSE_PARAM_ARG
|
||||
# define YYPARSE_PARAM_DECL
|
||||
#endif /* not YYPARSE_PARAM */
|
||||
#endif /* !YYPARSE_PARAM */
|
||||
|
||||
/* Prevent warning if -Wstrict-prototypes. */
|
||||
#ifdef __GNUC__
|
||||
@@ -255,7 +259,7 @@ int yyparse (void);
|
||||
#endif
|
||||
|
||||
int
|
||||
yyparse(YYPARSE_PARAM_ARG)
|
||||
yyparse (YYPARSE_PARAM_ARG)
|
||||
YYPARSE_PARAM_DECL
|
||||
{
|
||||
register int yystate;
|
||||
@@ -339,17 +343,21 @@ yyparse(YYPARSE_PARAM_ARG)
|
||||
yylsp = yyls;
|
||||
#endif
|
||||
|
||||
/* Push a new state, which is found in yystate . */
|
||||
/* In all cases, when you get here, the value and location stacks
|
||||
have just been pushed. so pushing a state here evens the stacks. */
|
||||
yynewstate:
|
||||
|
||||
/*------------------------------------------------------------.
|
||||
| yynewstate -- Push a new state, which is found in yystate. |
|
||||
`------------------------------------------------------------*/
|
||||
yynewstate:
|
||||
/* In all cases, when you get here, the value and location stacks
|
||||
have just been pushed. so pushing a state here evens the stacks.
|
||||
*/
|
||||
*++yyssp = yystate;
|
||||
|
||||
if (yyssp >= yyss + yystacksize - 1)
|
||||
{
|
||||
/* Give user a chance to reallocate the stack */
|
||||
/* Use copies of these so that the &'s don't force the real ones into memory. */
|
||||
/* Give user a chance to reallocate the stack. Use copies of
|
||||
these so that the &'s don't force the real ones into memory.
|
||||
*/
|
||||
YYSTYPE *yyvs1 = yyvs;
|
||||
short *yyss1 = yyss;
|
||||
#ifdef YYLSP_NEEDED
|
||||
@@ -385,7 +393,7 @@ yynewstate:
|
||||
/* Extend the stack our own way. */
|
||||
if (yystacksize >= YYMAXDEPTH)
|
||||
{
|
||||
yyerror("parser stack overflow");
|
||||
yyerror ("parser stack overflow");
|
||||
if (yyfree_stacks)
|
||||
{
|
||||
free (yyss);
|
||||
@@ -432,7 +440,12 @@ yynewstate:
|
||||
fprintf (stderr, "Entering state %d\n", yystate);
|
||||
|
||||
goto yybackup;
|
||||
yybackup:
|
||||
|
||||
|
||||
/*-----------.
|
||||
| yybackup. |
|
||||
`-----------*/
|
||||
yybackup:
|
||||
|
||||
/* Do appropriate processing given the current state. */
|
||||
/* Read a lookahead token if we need one and don't already have one. */
|
||||
@@ -468,7 +481,7 @@ yynewstate:
|
||||
}
|
||||
else
|
||||
{
|
||||
yychar1 = YYTRANSLATE(yychar);
|
||||
yychar1 = YYTRANSLATE (yychar);
|
||||
|
||||
#if YYDEBUG
|
||||
/* We have to keep this `#if YYDEBUG', since we use variables
|
||||
@@ -527,21 +540,30 @@ yynewstate:
|
||||
*++yylsp = yylloc;
|
||||
#endif
|
||||
|
||||
/* count tokens shifted since error; after three, turn off error status. */
|
||||
if (yyerrstatus) yyerrstatus--;
|
||||
/* Count tokens shifted since error; after three, turn off error
|
||||
status. */
|
||||
if (yyerrstatus)
|
||||
yyerrstatus--;
|
||||
|
||||
yystate = yyn;
|
||||
goto yynewstate;
|
||||
|
||||
/* Do the default action for the current state. */
|
||||
yydefault:
|
||||
|
||||
/*-----------------------------------------------------------.
|
||||
| yydefault -- do the default action for the current state. |
|
||||
`-----------------------------------------------------------*/
|
||||
yydefault:
|
||||
yyn = yydefact[yystate];
|
||||
if (yyn == 0)
|
||||
goto yyerrlab;
|
||||
goto yyreduce;
|
||||
|
||||
/* Do a reduction. yyn is the number of a rule to reduce with. */
|
||||
|
||||
/*-----------------------------.
|
||||
| yyreduce -- Do a reduction. |
|
||||
`-----------------------------*/
|
||||
yyreduce:
|
||||
/* yyn is the number of a rule to reduce with. */
|
||||
yylen = yyr2[yyn];
|
||||
/* Implement default value of the action:
|
||||
`{dollar}{dollar} = {dollar}1'. */
|
||||
@@ -581,7 +603,7 @@ yyreduce:
|
||||
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
|
||||
}
|
||||
#endif
|
||||
$ /* the action file gets copied in in place of this dollarsign */
|
||||
$ /* The action file replaces this line marked with this dollarsign. */
|
||||
#line
|
||||
|
||||
yyvsp -= yylen;
|
||||
@@ -618,10 +640,13 @@ $ /* the action file gets copied in in place of this dollarsign */
|
||||
|
||||
goto yynewstate;
|
||||
|
||||
yyerrlab: /* here on detecting error */
|
||||
|
||||
if (! yyerrstatus)
|
||||
/* If not already recovering from an error, report this error. */
|
||||
/*------------------------------------.
|
||||
| yyerrlab -- here on detecting error |
|
||||
`------------------------------------*/
|
||||
yyerrlab:
|
||||
/* If not already recovering from an error, report this error. */
|
||||
if (!yyerrstatus)
|
||||
{
|
||||
++yynerrs;
|
||||
|
||||
@@ -637,9 +662,9 @@ yyerrlab: /* here on detecting error */
|
||||
count = 0;
|
||||
/* Start X at -yyn if nec to avoid negative indexes in yycheck. */
|
||||
for (x = (yyn < 0 ? -yyn : 0);
|
||||
x < (sizeof(yytname) / sizeof(char *)); x++)
|
||||
x < (sizeof (yytname) / sizeof (char *)); x++)
|
||||
if (yycheck[x + yyn] == x)
|
||||
size += strlen(yytname[x]) + 15, count++;
|
||||
size += strlen (yytname[x]) + 15, count++;
|
||||
size += strlen ("parse error, unexpected `") + 1;
|
||||
size += strlen (yytname[YYTRANSLATE (yychar)]);
|
||||
msg = (char *) malloc (size);
|
||||
@@ -653,7 +678,7 @@ yyerrlab: /* here on detecting error */
|
||||
{
|
||||
count = 0;
|
||||
for (x = (yyn < 0 ? -yyn : 0);
|
||||
x < (sizeof(yytname) / sizeof(char *)); x++)
|
||||
x < (sizeof (yytname) / sizeof (char *)); x++)
|
||||
if (yycheck[x + yyn] == x)
|
||||
{
|
||||
strcat (msg, count == 0 ? ", expecting `" : " or `");
|
||||
@@ -672,13 +697,17 @@ yyerrlab: /* here on detecting error */
|
||||
#endif /* YYERROR_VERBOSE */
|
||||
yyerror ("parse error");
|
||||
}
|
||||
|
||||
goto yyerrlab1;
|
||||
yyerrlab1: /* here on error raised explicitly by an action */
|
||||
|
||||
|
||||
/*--------------------------------------------------.
|
||||
| yyerrlab1 -- error raised explicitly by an action |
|
||||
`--------------------------------------------------*/
|
||||
yyerrlab1:
|
||||
if (yyerrstatus == 3)
|
||||
{
|
||||
/* if just tried and failed to reuse lookahead token after an error, discard it. */
|
||||
/* If just tried and failed to reuse lookahead token after an
|
||||
error, discard it. */
|
||||
|
||||
/* return failure if at end of input */
|
||||
if (yychar == YYEOF)
|
||||
@@ -691,25 +720,37 @@ yyerrlab1: /* here on error raised explicitly by an action */
|
||||
yychar = YYEMPTY;
|
||||
}
|
||||
|
||||
/* Else will try to reuse lookahead token
|
||||
after shifting the error token. */
|
||||
/* Else will try to reuse lookahead token after shifting the error
|
||||
token. */
|
||||
|
||||
yyerrstatus = 3; /* Each real token shifted decrements this */
|
||||
|
||||
goto yyerrhandle;
|
||||
|
||||
yyerrdefault: /* current state does not do anything special for the error token. */
|
||||
|
||||
/*-------------------------------------------------------------------.
|
||||
| yyerrdefault -- current state does not do anything special for the |
|
||||
| error token. |
|
||||
`-------------------------------------------------------------------*/
|
||||
yyerrdefault:
|
||||
#if 0
|
||||
/* This is wrong; only states that explicitly want error tokens
|
||||
should shift them. */
|
||||
yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
|
||||
if (yyn) goto yydefault;
|
||||
|
||||
/* If its default is to accept any token, ok. Otherwise pop it. */
|
||||
yyn = yydefact[yystate];
|
||||
if (yyn)
|
||||
goto yydefault;
|
||||
#endif
|
||||
|
||||
yyerrpop: /* pop the current state because it cannot handle the error token */
|
||||
|
||||
if (yyssp == yyss) YYABORT;
|
||||
/*---------------------------------------------------------------.
|
||||
| yyerrpop -- pop the current state because it cannot handle the |
|
||||
| error token |
|
||||
`---------------------------------------------------------------*/
|
||||
yyerrpop:
|
||||
if (yyssp == yyss)
|
||||
YYABORT;
|
||||
yyvsp--;
|
||||
yystate = *--yyssp;
|
||||
#ifdef YYLSP_NEEDED
|
||||
@@ -725,8 +766,11 @@ yyerrpop: /* pop the current state because it cannot handle the error token */
|
||||
fprintf (stderr, "\n");
|
||||
}
|
||||
|
||||
yyerrhandle:
|
||||
|
||||
/*--------------.
|
||||
| yyerrhandle. |
|
||||
`--------------*/
|
||||
yyerrhandle:
|
||||
yyn = yypact[yystate];
|
||||
if (yyn == YYFLAG)
|
||||
goto yyerrdefault;
|
||||
@@ -760,8 +804,11 @@ yyerrhandle:
|
||||
yystate = yyn;
|
||||
goto yynewstate;
|
||||
|
||||
yyacceptlab:
|
||||
/* YYACCEPT comes here. */
|
||||
|
||||
/*-------------------------------------.
|
||||
| yyacceptlab -- YYACCEPT comes here. |
|
||||
`-------------------------------------*/
|
||||
yyacceptlab:
|
||||
if (yyfree_stacks)
|
||||
{
|
||||
free (yyss);
|
||||
@@ -772,8 +819,11 @@ yyerrhandle:
|
||||
}
|
||||
return 0;
|
||||
|
||||
yyabortlab:
|
||||
/* YYABORT comes here. */
|
||||
|
||||
/*-----------------------------------.
|
||||
| yyabortlab -- YYABORT comes here. |
|
||||
`-----------------------------------*/
|
||||
yyabortlab:
|
||||
if (yyfree_stacks)
|
||||
{
|
||||
free (yyss);
|
||||
|
||||
174
src/bison.simple
174
src/bison.simple
@@ -25,10 +25,10 @@
|
||||
This special exception was added by the Free Software Foundation
|
||||
in version 1.24 of Bison. */
|
||||
|
||||
/* This is the parser code that is written into each bison parser
|
||||
when the %semantic_parser declaration is not specified in the grammar.
|
||||
It was written by Richard Stallman by simplifying the hairy parser
|
||||
used when %semantic_parser is specified. */
|
||||
/* This is the parser code that is written into each bison parser when
|
||||
the %semantic_parser declaration is not specified in the grammar.
|
||||
It was written by Richard Stallman by simplifying the hairy parser
|
||||
used when %semantic_parser is specified. */
|
||||
|
||||
#ifndef YYSTACK_USE_ALLOCA
|
||||
# ifdef alloca
|
||||
@@ -91,55 +91,59 @@
|
||||
#define YYACCEPT goto yyacceptlab
|
||||
#define YYABORT goto yyabortlab
|
||||
#define YYERROR goto yyerrlab1
|
||||
/* Like YYERROR except do call yyerror.
|
||||
This remains here temporarily to ease the
|
||||
transition to the new meaning of YYERROR, for GCC.
|
||||
/* Like YYERROR except do call yyerror. This remains here temporarily
|
||||
to ease the transition to the new meaning of YYERROR, for GCC.
|
||||
Once GCC version 2 has supplanted version 1, this can go. */
|
||||
#define YYFAIL goto yyerrlab
|
||||
#define YYRECOVERING() (!!yyerrstatus)
|
||||
#define YYBACKUP(token, value) \
|
||||
#define YYBACKUP(Token, Value) \
|
||||
do \
|
||||
if (yychar == YYEMPTY && yylen == 1) \
|
||||
{ yychar = (token), yylval = (value); \
|
||||
{ \
|
||||
yychar = (Token); \
|
||||
yylval = (Value); \
|
||||
yychar1 = YYTRANSLATE (yychar); \
|
||||
YYPOPSTACK; \
|
||||
goto yybackup; \
|
||||
} \
|
||||
else \
|
||||
{ yyerror ("syntax error: cannot back up"); YYERROR; } \
|
||||
{ \
|
||||
yyerror ("syntax error: cannot back up"); \
|
||||
YYERROR; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define YYTERROR 1
|
||||
#define YYERRCODE 256
|
||||
|
||||
#ifndef YYPURE
|
||||
# define YYLEX yylex()
|
||||
# define YYLEX yylex ()
|
||||
#endif
|
||||
|
||||
#ifdef YYPURE
|
||||
# ifdef YYLSP_NEEDED
|
||||
# ifdef YYLEX_PARAM
|
||||
# define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
|
||||
# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
|
||||
# else
|
||||
# define YYLEX yylex(&yylval, &yylloc)
|
||||
# define YYLEX yylex (&yylval, &yylloc)
|
||||
# endif
|
||||
# else /* not YYLSP_NEEDED */
|
||||
# else /* !YYLSP_NEEDED */
|
||||
# ifdef YYLEX_PARAM
|
||||
# define YYLEX yylex(&yylval, YYLEX_PARAM)
|
||||
# define YYLEX yylex (&yylval, YYLEX_PARAM)
|
||||
# else
|
||||
# define YYLEX yylex(&yylval)
|
||||
# define YYLEX yylex (&yylval)
|
||||
# endif
|
||||
# endif /* not YYLSP_NEEDED */
|
||||
# endif /* !YYLSP_NEEDED */
|
||||
#endif
|
||||
|
||||
/* If nonreentrant, generate the variables here. */
|
||||
|
||||
#ifndef YYPURE
|
||||
/* The lookahead symbol. */
|
||||
int yychar;
|
||||
int yychar;
|
||||
|
||||
/* The semantic value of the lookahead symbol. */
|
||||
YYSTYPE yylval;
|
||||
YYSTYPE yylval;
|
||||
|
||||
# ifdef YYLSP_NEEDED
|
||||
/* Location data for the lookahead symbol. */
|
||||
@@ -148,7 +152,7 @@ YYLTYPE yylloc;
|
||||
|
||||
/* Number of parse errors so far. */
|
||||
int yynerrs;
|
||||
#endif /* not YYPURE */
|
||||
#endif /* !YYPURE */
|
||||
|
||||
|
||||
#if YYDEBUG
|
||||
@@ -186,7 +190,7 @@ int yydebug; /* nonzero means print parse trace */
|
||||
of type size_t, but it can handle unsigned int. */
|
||||
|
||||
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
|
||||
# define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
|
||||
# define __yy_memcpy(To,From,Count) __builtin_memcpy (To,From,Count)
|
||||
#else /* not GNU C or C++ */
|
||||
# ifndef __cplusplus
|
||||
|
||||
@@ -236,14 +240,14 @@ __yy_memcpy (char *to, char *from, unsigned int count)
|
||||
# ifdef __cplusplus
|
||||
# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
|
||||
# define YYPARSE_PARAM_DECL
|
||||
# else /* not __cplusplus */
|
||||
# else /* !__cplusplus */
|
||||
# define YYPARSE_PARAM_ARG YYPARSE_PARAM
|
||||
# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
|
||||
# endif /* not __cplusplus */
|
||||
#else /* not YYPARSE_PARAM */
|
||||
# endif /* !__cplusplus */
|
||||
#else /* !YYPARSE_PARAM */
|
||||
# define YYPARSE_PARAM_ARG
|
||||
# define YYPARSE_PARAM_DECL
|
||||
#endif /* not YYPARSE_PARAM */
|
||||
#endif /* !YYPARSE_PARAM */
|
||||
|
||||
/* Prevent warning if -Wstrict-prototypes. */
|
||||
#ifdef __GNUC__
|
||||
@@ -255,7 +259,7 @@ int yyparse (void);
|
||||
#endif
|
||||
|
||||
int
|
||||
yyparse(YYPARSE_PARAM_ARG)
|
||||
yyparse (YYPARSE_PARAM_ARG)
|
||||
YYPARSE_PARAM_DECL
|
||||
{
|
||||
register int yystate;
|
||||
@@ -339,17 +343,21 @@ yyparse(YYPARSE_PARAM_ARG)
|
||||
yylsp = yyls;
|
||||
#endif
|
||||
|
||||
/* Push a new state, which is found in yystate . */
|
||||
/* In all cases, when you get here, the value and location stacks
|
||||
have just been pushed. so pushing a state here evens the stacks. */
|
||||
yynewstate:
|
||||
|
||||
/*------------------------------------------------------------.
|
||||
| yynewstate -- Push a new state, which is found in yystate. |
|
||||
`------------------------------------------------------------*/
|
||||
yynewstate:
|
||||
/* In all cases, when you get here, the value and location stacks
|
||||
have just been pushed. so pushing a state here evens the stacks.
|
||||
*/
|
||||
*++yyssp = yystate;
|
||||
|
||||
if (yyssp >= yyss + yystacksize - 1)
|
||||
{
|
||||
/* Give user a chance to reallocate the stack */
|
||||
/* Use copies of these so that the &'s don't force the real ones into memory. */
|
||||
/* Give user a chance to reallocate the stack. Use copies of
|
||||
these so that the &'s don't force the real ones into memory.
|
||||
*/
|
||||
YYSTYPE *yyvs1 = yyvs;
|
||||
short *yyss1 = yyss;
|
||||
#ifdef YYLSP_NEEDED
|
||||
@@ -385,7 +393,7 @@ yynewstate:
|
||||
/* Extend the stack our own way. */
|
||||
if (yystacksize >= YYMAXDEPTH)
|
||||
{
|
||||
yyerror("parser stack overflow");
|
||||
yyerror ("parser stack overflow");
|
||||
if (yyfree_stacks)
|
||||
{
|
||||
free (yyss);
|
||||
@@ -432,7 +440,12 @@ yynewstate:
|
||||
fprintf (stderr, "Entering state %d\n", yystate);
|
||||
|
||||
goto yybackup;
|
||||
yybackup:
|
||||
|
||||
|
||||
/*-----------.
|
||||
| yybackup. |
|
||||
`-----------*/
|
||||
yybackup:
|
||||
|
||||
/* Do appropriate processing given the current state. */
|
||||
/* Read a lookahead token if we need one and don't already have one. */
|
||||
@@ -468,7 +481,7 @@ yynewstate:
|
||||
}
|
||||
else
|
||||
{
|
||||
yychar1 = YYTRANSLATE(yychar);
|
||||
yychar1 = YYTRANSLATE (yychar);
|
||||
|
||||
#if YYDEBUG
|
||||
/* We have to keep this `#if YYDEBUG', since we use variables
|
||||
@@ -527,21 +540,30 @@ yynewstate:
|
||||
*++yylsp = yylloc;
|
||||
#endif
|
||||
|
||||
/* count tokens shifted since error; after three, turn off error status. */
|
||||
if (yyerrstatus) yyerrstatus--;
|
||||
/* Count tokens shifted since error; after three, turn off error
|
||||
status. */
|
||||
if (yyerrstatus)
|
||||
yyerrstatus--;
|
||||
|
||||
yystate = yyn;
|
||||
goto yynewstate;
|
||||
|
||||
/* Do the default action for the current state. */
|
||||
yydefault:
|
||||
|
||||
/*-----------------------------------------------------------.
|
||||
| yydefault -- do the default action for the current state. |
|
||||
`-----------------------------------------------------------*/
|
||||
yydefault:
|
||||
yyn = yydefact[yystate];
|
||||
if (yyn == 0)
|
||||
goto yyerrlab;
|
||||
goto yyreduce;
|
||||
|
||||
/* Do a reduction. yyn is the number of a rule to reduce with. */
|
||||
|
||||
/*-----------------------------.
|
||||
| yyreduce -- Do a reduction. |
|
||||
`-----------------------------*/
|
||||
yyreduce:
|
||||
/* yyn is the number of a rule to reduce with. */
|
||||
yylen = yyr2[yyn];
|
||||
/* Implement default value of the action:
|
||||
`{dollar}{dollar} = {dollar}1'. */
|
||||
@@ -581,7 +603,7 @@ yyreduce:
|
||||
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
|
||||
}
|
||||
#endif
|
||||
$ /* the action file gets copied in in place of this dollarsign */
|
||||
$ /* The action file replaces this line marked with this dollarsign. */
|
||||
#line
|
||||
|
||||
yyvsp -= yylen;
|
||||
@@ -618,10 +640,13 @@ $ /* the action file gets copied in in place of this dollarsign */
|
||||
|
||||
goto yynewstate;
|
||||
|
||||
yyerrlab: /* here on detecting error */
|
||||
|
||||
if (! yyerrstatus)
|
||||
/* If not already recovering from an error, report this error. */
|
||||
/*------------------------------------.
|
||||
| yyerrlab -- here on detecting error |
|
||||
`------------------------------------*/
|
||||
yyerrlab:
|
||||
/* If not already recovering from an error, report this error. */
|
||||
if (!yyerrstatus)
|
||||
{
|
||||
++yynerrs;
|
||||
|
||||
@@ -637,9 +662,9 @@ yyerrlab: /* here on detecting error */
|
||||
count = 0;
|
||||
/* Start X at -yyn if nec to avoid negative indexes in yycheck. */
|
||||
for (x = (yyn < 0 ? -yyn : 0);
|
||||
x < (sizeof(yytname) / sizeof(char *)); x++)
|
||||
x < (sizeof (yytname) / sizeof (char *)); x++)
|
||||
if (yycheck[x + yyn] == x)
|
||||
size += strlen(yytname[x]) + 15, count++;
|
||||
size += strlen (yytname[x]) + 15, count++;
|
||||
size += strlen ("parse error, unexpected `") + 1;
|
||||
size += strlen (yytname[YYTRANSLATE (yychar)]);
|
||||
msg = (char *) malloc (size);
|
||||
@@ -653,7 +678,7 @@ yyerrlab: /* here on detecting error */
|
||||
{
|
||||
count = 0;
|
||||
for (x = (yyn < 0 ? -yyn : 0);
|
||||
x < (sizeof(yytname) / sizeof(char *)); x++)
|
||||
x < (sizeof (yytname) / sizeof (char *)); x++)
|
||||
if (yycheck[x + yyn] == x)
|
||||
{
|
||||
strcat (msg, count == 0 ? ", expecting `" : " or `");
|
||||
@@ -672,13 +697,17 @@ yyerrlab: /* here on detecting error */
|
||||
#endif /* YYERROR_VERBOSE */
|
||||
yyerror ("parse error");
|
||||
}
|
||||
|
||||
goto yyerrlab1;
|
||||
yyerrlab1: /* here on error raised explicitly by an action */
|
||||
|
||||
|
||||
/*--------------------------------------------------.
|
||||
| yyerrlab1 -- error raised explicitly by an action |
|
||||
`--------------------------------------------------*/
|
||||
yyerrlab1:
|
||||
if (yyerrstatus == 3)
|
||||
{
|
||||
/* if just tried and failed to reuse lookahead token after an error, discard it. */
|
||||
/* If just tried and failed to reuse lookahead token after an
|
||||
error, discard it. */
|
||||
|
||||
/* return failure if at end of input */
|
||||
if (yychar == YYEOF)
|
||||
@@ -691,25 +720,37 @@ yyerrlab1: /* here on error raised explicitly by an action */
|
||||
yychar = YYEMPTY;
|
||||
}
|
||||
|
||||
/* Else will try to reuse lookahead token
|
||||
after shifting the error token. */
|
||||
/* Else will try to reuse lookahead token after shifting the error
|
||||
token. */
|
||||
|
||||
yyerrstatus = 3; /* Each real token shifted decrements this */
|
||||
|
||||
goto yyerrhandle;
|
||||
|
||||
yyerrdefault: /* current state does not do anything special for the error token. */
|
||||
|
||||
/*-------------------------------------------------------------------.
|
||||
| yyerrdefault -- current state does not do anything special for the |
|
||||
| error token. |
|
||||
`-------------------------------------------------------------------*/
|
||||
yyerrdefault:
|
||||
#if 0
|
||||
/* This is wrong; only states that explicitly want error tokens
|
||||
should shift them. */
|
||||
yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
|
||||
if (yyn) goto yydefault;
|
||||
|
||||
/* If its default is to accept any token, ok. Otherwise pop it. */
|
||||
yyn = yydefact[yystate];
|
||||
if (yyn)
|
||||
goto yydefault;
|
||||
#endif
|
||||
|
||||
yyerrpop: /* pop the current state because it cannot handle the error token */
|
||||
|
||||
if (yyssp == yyss) YYABORT;
|
||||
/*---------------------------------------------------------------.
|
||||
| yyerrpop -- pop the current state because it cannot handle the |
|
||||
| error token |
|
||||
`---------------------------------------------------------------*/
|
||||
yyerrpop:
|
||||
if (yyssp == yyss)
|
||||
YYABORT;
|
||||
yyvsp--;
|
||||
yystate = *--yyssp;
|
||||
#ifdef YYLSP_NEEDED
|
||||
@@ -725,8 +766,11 @@ yyerrpop: /* pop the current state because it cannot handle the error token */
|
||||
fprintf (stderr, "\n");
|
||||
}
|
||||
|
||||
yyerrhandle:
|
||||
|
||||
/*--------------.
|
||||
| yyerrhandle. |
|
||||
`--------------*/
|
||||
yyerrhandle:
|
||||
yyn = yypact[yystate];
|
||||
if (yyn == YYFLAG)
|
||||
goto yyerrdefault;
|
||||
@@ -760,8 +804,11 @@ yyerrhandle:
|
||||
yystate = yyn;
|
||||
goto yynewstate;
|
||||
|
||||
yyacceptlab:
|
||||
/* YYACCEPT comes here. */
|
||||
|
||||
/*-------------------------------------.
|
||||
| yyacceptlab -- YYACCEPT comes here. |
|
||||
`-------------------------------------*/
|
||||
yyacceptlab:
|
||||
if (yyfree_stacks)
|
||||
{
|
||||
free (yyss);
|
||||
@@ -772,8 +819,11 @@ yyerrhandle:
|
||||
}
|
||||
return 0;
|
||||
|
||||
yyabortlab:
|
||||
/* YYABORT comes here. */
|
||||
|
||||
/*-----------------------------------.
|
||||
| yyabortlab -- YYABORT comes here. |
|
||||
`-----------------------------------*/
|
||||
yyabortlab:
|
||||
if (yyfree_stacks)
|
||||
{
|
||||
free (yyss);
|
||||
|
||||
13
src/output.c
13
src/output.c
@@ -1166,6 +1166,7 @@ static void
|
||||
output_parser (void)
|
||||
{
|
||||
int c;
|
||||
static int number_of_dollar_signs = 0;
|
||||
#ifdef DONTDEF
|
||||
FILE *fpars;
|
||||
#else
|
||||
@@ -1175,8 +1176,9 @@ output_parser (void)
|
||||
if (pure_parser)
|
||||
fprintf (ftable, "#define YYPURE 1\n\n");
|
||||
|
||||
#ifdef DONTDEF /* JF no longer needed 'cuz open_extra_files changes the
|
||||
currently open parser from bison.simple to bison.hairy */
|
||||
#ifdef DONTDEF
|
||||
/* JF no longer needed 'cuz open_extra_files changes the currently
|
||||
open parser from bison.simple to bison.hairy */
|
||||
if (semantic_parser)
|
||||
fpars = fparser;
|
||||
else
|
||||
@@ -1227,11 +1229,15 @@ output_parser (void)
|
||||
{
|
||||
if (c == '$')
|
||||
{
|
||||
number_of_dollar_signs++;
|
||||
assert (number_of_dollar_signs == 1);
|
||||
/* `$' in the parser file indicates where to put the actions.
|
||||
Copy them in at this point. */
|
||||
rewind (faction);
|
||||
for (c = getc (faction); c != EOF; c = getc (faction))
|
||||
putc (c, ftable);
|
||||
/* Skip the end of the line containing `$'. */
|
||||
write_line = 0;
|
||||
}
|
||||
else
|
||||
putc (c, ftable);
|
||||
@@ -1240,6 +1246,7 @@ output_parser (void)
|
||||
break;
|
||||
putc (c, ftable);
|
||||
}
|
||||
assert (number_of_dollar_signs == 1);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1294,7 +1301,7 @@ output (void)
|
||||
if (debugflag)
|
||||
fputs ("\
|
||||
#ifndef YYDEBUG\n\
|
||||
#define YYDEBUG 1\n\
|
||||
# define YYDEBUG 1\n\
|
||||
#endif\n\
|
||||
\n",
|
||||
ftable);
|
||||
|
||||
Reference in New Issue
Block a user