1 /* $Id: yaccpar.skel,v 1.10 2018/05/06 21:28:14 Guy.Harris Exp $ */
5 /* If the skeleton is changed, the banner should be changed so that */
6 /* the altered version can be easily distinguished from the original. */
8 /* The #defines included with the banner are there because they are */
9 /* useful in subsequent code. The macros #defined in the header or */
10 /* the body either are not useful outside of semantic actions or */
11 /* are conditional. */
14 /* original parser id follows */
15 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
16 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
19 %% insert VERSION here
22 #define yyclearin (yychar = YYEMPTY)
23 #define yyerrok (yyerrflag = 0)
24 #define YYRECOVERING() (yyerrflag != 0)
29 extern int YYPARSE_DECL();
33 extern YYINT yydefred[];
34 extern YYINT yydgoto[];
35 extern YYINT yysindex[];
36 extern YYINT yyrindex[];
37 extern YYINT yygindex[];
38 extern YYINT yytable[];
39 extern YYINT yycheck[];
41 #if YYDEBUG || defined(yytname)
42 extern char *yyname[];
45 extern char *yyrule[];
61 /* define the initial stack-sizes */
64 #define YYMAXDEPTH YYSTACKSIZE
67 #define YYSTACKSIZE YYMAXDEPTH
69 #define YYSTACKSIZE 10000
70 #define YYMAXDEPTH 10000
74 #define YYINITSTACKSIZE 200
85 /* variables for the parser stack */
86 static YYSTACKDATA yystack;
94 /* variables for the parser stack */
99 #include <stdio.h> /* needed for printf */
102 #include <stdlib.h> /* needed for malloc, etc */
103 #include <string.h> /* needed for memset */
105 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
106 static int yygrowstack(YYSTACKDATA *data)
113 if ((newsize = data->stacksize) == 0)
114 newsize = YYINITSTACKSIZE;
115 else if (newsize >= YYMAXDEPTH)
117 else if ((newsize *= 2) > YYMAXDEPTH)
118 newsize = YYMAXDEPTH;
120 i = (int) (data->s_mark - data->s_base);
121 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
125 data->s_base = newss;
126 data->s_mark = newss + i;
128 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
132 data->l_base = newvs;
133 data->l_mark = newvs + i;
135 data->stacksize = newsize;
136 data->s_last = data->s_base + newsize - 1;
140 #if YYPURE || defined(YY_NO_LEAKS)
141 static void yyfreestack(YYSTACKDATA *data)
145 memset(data, 0, sizeof(*data));
148 #define yyfreestack(data) /* nothing */
151 #define YYABORT goto yyabort
152 #define YYREJECT goto yyabort
153 #define YYACCEPT goto yyaccept
154 #define YYERROR goto yyerrlab
160 int yym, yyn, yystate;
164 if ((yys = getenv("YYDEBUG")) != 0)
167 if (yyn >= '0' && yyn <= '9')
173 memset(&yyval, 0, sizeof(yyval));
174 memset(&yylval, 0, sizeof(yylval));
185 memset(&yystack, 0, sizeof(yystack));
188 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
189 yystack.s_mark = yystack.s_base;
190 yystack.l_mark = yystack.l_base;
195 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
199 if (yychar < 0) yychar = YYEOF;
203 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
204 printf("%sdebug: state %d, reading %d (%s)\n",
205 YYPREFIX, yystate, yychar, yys);
209 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
210 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
214 printf("%sdebug: state %d, shifting to state %d\n",
215 YYPREFIX, yystate, yytable[yyn]);
217 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
218 yystate = yytable[yyn];
219 *++yystack.s_mark = yytable[yyn];
220 *++yystack.l_mark = yylval;
222 if (yyerrflag > 0) --yyerrflag;
225 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
226 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
231 if (yyerrflag != 0) goto yyinrecovery;
233 YYERROR_CALL("syntax error");
235 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
245 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
246 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
250 printf("%sdebug: state %d, error recovery shifting\
251 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
253 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
254 yystate = yytable[yyn];
255 *++yystack.s_mark = yytable[yyn];
256 *++yystack.l_mark = yylval;
263 printf("%sdebug: error recovery discarding state %d\n",
264 YYPREFIX, *yystack.s_mark);
266 if (yystack.s_mark <= yystack.s_base) goto yyabort;
274 if (yychar == YYEOF) goto yyabort;
278 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
279 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
280 YYPREFIX, yystate, yychar, yys);
290 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
291 YYPREFIX, yystate, yyn, yyrule[yyn]);
295 yyval = yystack.l_mark[1-yym];
297 memset(&yyval, 0, sizeof yyval);
303 yystack.s_mark -= yym;
304 yystate = *yystack.s_mark;
305 yystack.l_mark -= yym;
307 if (yystate == 0 && yym == 0)
311 printf("%sdebug: after reduction, shifting from state 0 to\
312 state %d\n", YYPREFIX, YYFINAL);
315 *++yystack.s_mark = YYFINAL;
316 *++yystack.l_mark = yyval;
320 if (yychar < 0) yychar = YYEOF;
324 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
325 printf("%sdebug: state %d, reading %d (%s)\n",
326 YYPREFIX, YYFINAL, yychar, yys);
330 if (yychar == YYEOF) goto yyaccept;
333 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
334 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
335 yystate = yytable[yyn];
337 yystate = yydgoto[yym];
340 printf("%sdebug: after reduction, shifting from state %d \
341 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
343 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
344 *++yystack.s_mark = (YYINT) yystate;
345 *++yystack.l_mark = yyval;
349 YYERROR_CALL("yacc stack overflow");
352 yyfreestack(&yystack);
356 yyfreestack(&yystack);