1 /* $Id: yaccpar.skel,v 1.9 2017/04/30 23:28:17 tom 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[];
59 /* define the initial stack-sizes */
62 #define YYMAXDEPTH YYSTACKSIZE
65 #define YYSTACKSIZE YYMAXDEPTH
67 #define YYSTACKSIZE 10000
68 #define YYMAXDEPTH 10000
72 #define YYINITSTACKSIZE 200
83 /* variables for the parser stack */
84 static YYSTACKDATA yystack;
91 /* variables for the parser stack */
96 #include <stdio.h> /* needed for printf */
99 #include <stdlib.h> /* needed for malloc, etc */
100 #include <string.h> /* needed for memset */
102 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
103 static int yygrowstack(YYSTACKDATA *data)
110 if ((newsize = data->stacksize) == 0)
111 newsize = YYINITSTACKSIZE;
112 else if (newsize >= YYMAXDEPTH)
114 else if ((newsize *= 2) > YYMAXDEPTH)
115 newsize = YYMAXDEPTH;
117 i = (int) (data->s_mark - data->s_base);
118 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
122 data->s_base = newss;
123 data->s_mark = newss + i;
125 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
129 data->l_base = newvs;
130 data->l_mark = newvs + i;
132 data->stacksize = newsize;
133 data->s_last = data->s_base + newsize - 1;
137 #if YYPURE || defined(YY_NO_LEAKS)
138 static void yyfreestack(YYSTACKDATA *data)
142 memset(data, 0, sizeof(*data));
145 #define yyfreestack(data) /* nothing */
148 #define YYABORT goto yyabort
149 #define YYREJECT goto yyabort
150 #define YYACCEPT goto yyaccept
151 #define YYERROR goto yyerrlab
157 int yym, yyn, yystate;
161 if ((yys = getenv("YYDEBUG")) != 0)
164 if (yyn >= '0' && yyn <= '9')
170 memset(&yyval, 0, sizeof(yyval));
171 memset(&yylval, 0, sizeof(yylval));
182 memset(&yystack, 0, sizeof(yystack));
185 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
186 yystack.s_mark = yystack.s_base;
187 yystack.l_mark = yystack.l_base;
192 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
196 if (yychar < 0) yychar = YYEOF;
200 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
201 printf("%sdebug: state %d, reading %d (%s)\n",
202 YYPREFIX, yystate, yychar, yys);
206 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
207 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
211 printf("%sdebug: state %d, shifting to state %d\n",
212 YYPREFIX, yystate, yytable[yyn]);
214 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
215 yystate = yytable[yyn];
216 *++yystack.s_mark = yytable[yyn];
217 *++yystack.l_mark = yylval;
219 if (yyerrflag > 0) --yyerrflag;
222 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
223 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
228 if (yyerrflag != 0) goto yyinrecovery;
230 YYERROR_CALL("syntax error");
232 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
242 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
243 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
247 printf("%sdebug: state %d, error recovery shifting\
248 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
250 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
251 yystate = yytable[yyn];
252 *++yystack.s_mark = yytable[yyn];
253 *++yystack.l_mark = yylval;
260 printf("%sdebug: error recovery discarding state %d\n",
261 YYPREFIX, *yystack.s_mark);
263 if (yystack.s_mark <= yystack.s_base) goto yyabort;
271 if (yychar == YYEOF) goto yyabort;
275 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
276 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
277 YYPREFIX, yystate, yychar, yys);
287 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
288 YYPREFIX, yystate, yyn, yyrule[yyn]);
292 yyval = yystack.l_mark[1-yym];
294 memset(&yyval, 0, sizeof yyval);
300 yystack.s_mark -= yym;
301 yystate = *yystack.s_mark;
302 yystack.l_mark -= yym;
304 if (yystate == 0 && yym == 0)
308 printf("%sdebug: after reduction, shifting from state 0 to\
309 state %d\n", YYPREFIX, YYFINAL);
312 *++yystack.s_mark = YYFINAL;
313 *++yystack.l_mark = yyval;
317 if (yychar < 0) yychar = YYEOF;
321 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
322 printf("%sdebug: state %d, reading %d (%s)\n",
323 YYPREFIX, YYFINAL, yychar, yys);
327 if (yychar == YYEOF) goto yyaccept;
330 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
331 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
332 yystate = yytable[yyn];
334 yystate = yydgoto[yym];
337 printf("%sdebug: after reduction, shifting from state %d \
338 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
340 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
341 *++yystack.s_mark = (YYINT) yystate;
342 *++yystack.l_mark = yyval;
346 YYERROR_CALL("yacc stack overflow");
349 yyfreestack(&yystack);
353 yyfreestack(&yystack);