1 /* This file generated automatically using
2 * @Id: skel2c,v 1.4 2016/06/07 00:26:09 tom Exp @
5 /* @Id: yaccpar.skel,v 1.8 2016/12/02 21:44:42 tom Exp @ */
9 /* If the skeleton is changed, the banner should be changed so that */
10 /* the altered version can be easily distinguished from the original. */
12 /* The #defines included with the banner are there because they are */
13 /* useful in subsequent code. The macros #defined in the header or */
14 /* the body either are not useful outside of semantic actions or */
15 /* are conditional. */
17 const char *const banner[] =
19 "/* original parser id follows */",
20 "/* yysccsid[] = \"@(#)yaccpar 1.9 (Berkeley) 02/21/93\" */",
21 "/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */",
24 CONCAT1("#define YYMAJOR ", YYMAJOR),
25 CONCAT1("#define YYMINOR ", YYMINOR),
27 CONCAT1("#define YYPATCH ", YYPATCH),
30 "#define YYEMPTY (-1)",
31 "#define yyclearin (yychar = YYEMPTY)",
32 "#define yyerrok (yyerrflag = 0)",
33 "#define YYRECOVERING() (yyerrflag != 0)",
34 "#define YYENOMEM (-2)",
39 const char *const xdecls[] =
42 "extern int YYPARSE_DECL();",
46 const char *const tables[] =
48 "extern YYINT yylhs[];",
49 "extern YYINT yylen[];",
50 "extern YYINT yydefred[];",
51 "extern YYINT yydgoto[];",
52 "extern YYINT yysindex[];",
53 "extern YYINT yyrindex[];",
54 "extern YYINT yygindex[];",
55 "extern YYINT yytable[];",
56 "extern YYINT yycheck[];",
58 "#if YYDEBUG || defined(yytname)",
59 "extern char *yyname[];",
62 "extern char *yyrule[];",
67 const char *const global_vars[] =
75 const char *const impure_vars[] =
85 const char *const hdr_defs[] =
88 "/* define the initial stack-sizes */",
91 "#define YYMAXDEPTH YYSTACKSIZE",
94 "#define YYSTACKSIZE YYMAXDEPTH",
96 "#define YYSTACKSIZE 10000",
97 "#define YYMAXDEPTH 10000",
101 "#define YYINITSTACKSIZE 200",
104 " unsigned stacksize;",
114 const char *const hdr_vars[] =
116 "/* variables for the parser stack */",
117 "static YYSTACKDATA yystack;",
121 const char *const body_vars[] =
128 " /* variables for the parser stack */",
129 " YYSTACKDATA yystack;",
133 const char *const body_1[] =
137 "#include <stdio.h> /* needed for printf */",
140 "#include <stdlib.h> /* needed for malloc, etc */",
141 "#include <string.h> /* needed for memset */",
143 "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
144 "static int yygrowstack(YYSTACKDATA *data)",
147 " unsigned newsize;",
151 " if ((newsize = data->stacksize) == 0)",
152 " newsize = YYINITSTACKSIZE;",
153 " else if (newsize >= YYMAXDEPTH)",
155 " else if ((newsize *= 2) > YYMAXDEPTH)",
156 " newsize = YYMAXDEPTH;",
158 " i = (int) (data->s_mark - data->s_base);",
159 " newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));",
163 " data->s_base = newss;",
164 " data->s_mark = newss + i;",
166 " newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));",
170 " data->l_base = newvs;",
171 " data->l_mark = newvs + i;",
173 " data->stacksize = newsize;",
174 " data->s_last = data->s_base + newsize - 1;",
178 "#if YYPURE || defined(YY_NO_LEAKS)",
179 "static void yyfreestack(YYSTACKDATA *data)",
181 " free(data->s_base);",
182 " free(data->l_base);",
183 " memset(data, 0, sizeof(*data));",
186 "#define yyfreestack(data) /* nothing */",
189 "#define YYABORT goto yyabort",
190 "#define YYREJECT goto yyabort",
191 "#define YYACCEPT goto yyaccept",
192 "#define YYERROR goto yyerrlab",
200 const char *const body_2[] =
202 " int yym, yyn, yystate;",
206 " if ((yys = getenv(\"YYDEBUG\")) != 0)",
209 " if (yyn >= '0' && yyn <= '9')",
210 " yydebug = yyn - '0';",
217 const char *const init_vars[] =
219 " memset(&yyval, 0, sizeof(yyval));",
220 " memset(&yylval, 0, sizeof(yylval));",
225 const char *const body_3[] =
231 " yychar = YYEMPTY;",
235 " memset(&yystack, 0, sizeof(yystack));",
238 " if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
239 " yystack.s_mark = yystack.s_base;",
240 " yystack.l_mark = yystack.l_base;",
242 " *yystack.s_mark = 0;",
245 " if ((yyn = yydefred[yystate]) != 0) goto yyreduce;",
249 " if (yychar < 0) yychar = YYEOF;",
253 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
254 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
255 " YYPREFIX, yystate, yychar, yys);",
259 " if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&",
260 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)",
264 " printf(\"%sdebug: state %d, shifting to state %d\\n\",",
265 " YYPREFIX, yystate, yytable[yyn]);",
267 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
268 " yystate = yytable[yyn];",
269 " *++yystack.s_mark = yytable[yyn];",
270 " *++yystack.l_mark = yylval;",
271 " yychar = YYEMPTY;",
272 " if (yyerrflag > 0) --yyerrflag;",
275 " if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&",
276 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)",
278 " yyn = yytable[yyn];",
281 " if (yyerrflag != 0) goto yyinrecovery;",
283 " YYERROR_CALL(\"syntax error\");",
285 " goto yyerrlab; /* redundant goto avoids 'unused label' warning */",
290 " if (yyerrflag < 3)",
295 " if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&",
296 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)",
300 " printf(\"%sdebug: state %d, error recovery shifting\\",
301 " to state %d\\n\", YYPREFIX, *yystack.s_mark, yytable[yyn]);",
303 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
304 " yystate = yytable[yyn];",
305 " *++yystack.s_mark = yytable[yyn];",
306 " *++yystack.l_mark = yylval;",
313 " printf(\"%sdebug: error recovery discarding state %d\\n\",",
314 " YYPREFIX, *yystack.s_mark);",
316 " if (yystack.s_mark <= yystack.s_base) goto yyabort;",
317 " --yystack.s_mark;",
318 " --yystack.l_mark;",
324 " if (yychar == YYEOF) goto yyabort;",
328 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
329 " printf(\"%sdebug: state %d, error recovery discards token %d (%s)\\n\",",
330 " YYPREFIX, yystate, yychar, yys);",
333 " yychar = YYEMPTY;",
340 " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
341 " YYPREFIX, yystate, yyn, yyrule[yyn]);",
343 " yym = yylen[yyn];",
345 " yyval = yystack.l_mark[1-yym];",
347 " memset(&yyval, 0, sizeof yyval);",
354 const char *const trailer[] =
357 " yystack.s_mark -= yym;",
358 " yystate = *yystack.s_mark;",
359 " yystack.l_mark -= yym;",
360 " yym = yylhs[yyn];",
361 " if (yystate == 0 && yym == 0)",
365 " printf(\"%sdebug: after reduction, shifting from state 0 to\\",
366 " state %d\\n\", YYPREFIX, YYFINAL);",
368 " yystate = YYFINAL;",
369 " *++yystack.s_mark = YYFINAL;",
370 " *++yystack.l_mark = yyval;",
374 " if (yychar < 0) yychar = YYEOF;",
378 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
379 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
380 " YYPREFIX, YYFINAL, yychar, yys);",
384 " if (yychar == YYEOF) goto yyaccept;",
387 " if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&",
388 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)",
389 " yystate = yytable[yyn];",
391 " yystate = yydgoto[yym];",
394 " printf(\"%sdebug: after reduction, shifting from state %d \\",
395 "to state %d\\n\", YYPREFIX, *yystack.s_mark, yystate);",
397 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
398 " *++yystack.s_mark = (YYINT) yystate;",
399 " *++yystack.l_mark = yyval;",
403 " YYERROR_CALL(\"yacc stack overflow\");",
406 " yyfreestack(&yystack);",
410 " yyfreestack(&yystack);",
417 write_section(FILE * fp, const char *const section[])
422 for (i = 0; (s = section[i]) != 0; ++i)
426 fprintf(fp, "%s\n", s);