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