1264790Sbapt/* This file generated automatically using
2264790Sbapt * @Id: skel2c,v 1.3 2014/04/06 19:48:04 tom Exp @
3264790Sbapt */
4264790Sbapt
5264790Sbapt/* @Id: yaccpar.skel,v 1.5 2014/04/07 21:51:00 tom Exp @ */
6264790Sbapt
7264790Sbapt#include "defs.h"
8264790Sbapt
9264790Sbapt/*  If the skeleton is changed, the banner should be changed so that	*/
10264790Sbapt/*  the altered version can be easily distinguished from the original.	*/
11264790Sbapt/*									*/
12264790Sbapt/*  The #defines included with the banner are there because they are	*/
13264790Sbapt/*  useful in subsequent code.  The macros #defined in the header or	*/
14264790Sbapt/*  the body either are not useful outside of semantic actions or	*/
15264790Sbapt/*  are conditional.							*/
16264790Sbapt
17264790Sbaptconst char *const banner[] =
18264790Sbapt{
19264790Sbapt    "/* original parser id follows */",
20264790Sbapt    "/* yysccsid[] = \"@(#)yaccpar	1.9 (Berkeley) 02/21/93\" */",
21264790Sbapt    "/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */",
22264790Sbapt    "",
23264790Sbapt    "#define YYBYACC 1",
24264790Sbapt    CONCAT1("#define YYMAJOR ", YYMAJOR),
25264790Sbapt    CONCAT1("#define YYMINOR ", YYMINOR),
26264790Sbapt#ifdef YYPATCH
27264790Sbapt    CONCAT1("#define YYPATCH ", YYPATCH),
28264790Sbapt#endif
29264790Sbapt    "",
30264790Sbapt    "#define YYEMPTY        (-1)",
31264790Sbapt    "#define yyclearin      (yychar = YYEMPTY)",
32264790Sbapt    "#define yyerrok        (yyerrflag = 0)",
33264790Sbapt    "#define YYRECOVERING() (yyerrflag != 0)",
34264790Sbapt    "#define YYENOMEM       (-2)",
35264790Sbapt    "#define YYEOF          0",
36264790Sbapt    0
37264790Sbapt};
38264790Sbapt
39264790Sbaptconst char *const xdecls[] =
40264790Sbapt{
41264790Sbapt    "",
42264790Sbapt    "extern int YYPARSE_DECL();",
43264790Sbapt    0
44264790Sbapt};
45264790Sbapt
46264790Sbaptconst char *const tables[] =
47264790Sbapt{
48264790Sbapt    "extern YYINT yylhs[];",
49264790Sbapt    "extern YYINT yylen[];",
50264790Sbapt    "extern YYINT yydefred[];",
51264790Sbapt    "extern YYINT yydgoto[];",
52264790Sbapt    "extern YYINT yysindex[];",
53264790Sbapt    "extern YYINT yyrindex[];",
54264790Sbapt    "extern YYINT yygindex[];",
55264790Sbapt    "extern YYINT yytable[];",
56264790Sbapt    "extern YYINT yycheck[];",
57264790Sbapt    "",
58264790Sbapt    "#if YYDEBUG",
59264790Sbapt    "extern char *yyname[];",
60264790Sbapt    "extern char *yyrule[];",
61264790Sbapt    "#endif",
62264790Sbapt    0
63264790Sbapt};
64264790Sbapt
65264790Sbaptconst char *const global_vars[] =
66264790Sbapt{
67264790Sbapt    "",
68264790Sbapt    "int      yydebug;",
69264790Sbapt    "int      yynerrs;",
70264790Sbapt    0
71264790Sbapt};
72264790Sbapt
73264790Sbaptconst char *const impure_vars[] =
74264790Sbapt{
75264790Sbapt    "",
76264790Sbapt    "int      yyerrflag;",
77264790Sbapt    "int      yychar;",
78264790Sbapt    "YYSTYPE  yyval;",
79264790Sbapt    "YYSTYPE  yylval;",
80264790Sbapt    0
81264790Sbapt};
82264790Sbapt
83264790Sbaptconst char *const hdr_defs[] =
84264790Sbapt{
85264790Sbapt    "",
86264790Sbapt    "/* define the initial stack-sizes */",
87264790Sbapt    "#ifdef YYSTACKSIZE",
88264790Sbapt    "#undef YYMAXDEPTH",
89264790Sbapt    "#define YYMAXDEPTH  YYSTACKSIZE",
90264790Sbapt    "#else",
91264790Sbapt    "#ifdef YYMAXDEPTH",
92264790Sbapt    "#define YYSTACKSIZE YYMAXDEPTH",
93264790Sbapt    "#else",
94264790Sbapt    "#define YYSTACKSIZE 10000",
95264790Sbapt    "#define YYMAXDEPTH  10000",
96264790Sbapt    "#endif",
97264790Sbapt    "#endif",
98264790Sbapt    "",
99264790Sbapt    "#define YYINITSTACKSIZE 200",
100264790Sbapt    "",
101264790Sbapt    "typedef struct {",
102264790Sbapt    "    unsigned stacksize;",
103264790Sbapt    "    YYINT    *s_base;",
104264790Sbapt    "    YYINT    *s_mark;",
105264790Sbapt    "    YYINT    *s_last;",
106264790Sbapt    "    YYSTYPE  *l_base;",
107264790Sbapt    "    YYSTYPE  *l_mark;",
108264790Sbapt    "} YYSTACKDATA;",
109264790Sbapt    0
110264790Sbapt};
111264790Sbapt
112264790Sbaptconst char *const hdr_vars[] =
113264790Sbapt{
114264790Sbapt    "/* variables for the parser stack */",
115264790Sbapt    "static YYSTACKDATA yystack;",
116264790Sbapt    0
117264790Sbapt};
118264790Sbapt
119264790Sbaptconst char *const body_vars[] =
120264790Sbapt{
121264790Sbapt    "    int      yyerrflag;",
122264790Sbapt    "    int      yychar;",
123264790Sbapt    "    YYSTYPE  yyval;",
124264790Sbapt    "    YYSTYPE  yylval;",
125264790Sbapt    "",
126264790Sbapt    "    /* variables for the parser stack */",
127264790Sbapt    "    YYSTACKDATA yystack;",
128264790Sbapt    0
129264790Sbapt};
130264790Sbapt
131264790Sbaptconst char *const body_1[] =
132264790Sbapt{
133264790Sbapt    "",
134264790Sbapt    "#if YYDEBUG",
135264790Sbapt    "#include <stdio.h>		/* needed for printf */",
136264790Sbapt    "#endif",
137264790Sbapt    "",
138264790Sbapt    "#include <stdlib.h>	/* needed for malloc, etc */",
139264790Sbapt    "#include <string.h>	/* needed for memset */",
140264790Sbapt    "",
141264790Sbapt    "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
142264790Sbapt    "static int yygrowstack(YYSTACKDATA *data)",
143264790Sbapt    "{",
144264790Sbapt    "    int i;",
145264790Sbapt    "    unsigned newsize;",
146264790Sbapt    "    YYINT *newss;",
147264790Sbapt    "    YYSTYPE *newvs;",
148264790Sbapt    "",
149264790Sbapt    "    if ((newsize = data->stacksize) == 0)",
150264790Sbapt    "        newsize = YYINITSTACKSIZE;",
151264790Sbapt    "    else if (newsize >= YYMAXDEPTH)",
152264790Sbapt    "        return YYENOMEM;",
153264790Sbapt    "    else if ((newsize *= 2) > YYMAXDEPTH)",
154264790Sbapt    "        newsize = YYMAXDEPTH;",
155264790Sbapt    "",
156264790Sbapt    "    i = (int) (data->s_mark - data->s_base);",
157264790Sbapt    "    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));",
158264790Sbapt    "    if (newss == 0)",
159264790Sbapt    "        return YYENOMEM;",
160264790Sbapt    "",
161264790Sbapt    "    data->s_base = newss;",
162264790Sbapt    "    data->s_mark = newss + i;",
163264790Sbapt    "",
164264790Sbapt    "    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));",
165264790Sbapt    "    if (newvs == 0)",
166264790Sbapt    "        return YYENOMEM;",
167264790Sbapt    "",
168264790Sbapt    "    data->l_base = newvs;",
169264790Sbapt    "    data->l_mark = newvs + i;",
170264790Sbapt    "",
171264790Sbapt    "    data->stacksize = newsize;",
172264790Sbapt    "    data->s_last = data->s_base + newsize - 1;",
173264790Sbapt    "    return 0;",
174264790Sbapt    "}",
175264790Sbapt    "",
176264790Sbapt    "#if YYPURE || defined(YY_NO_LEAKS)",
177264790Sbapt    "static void yyfreestack(YYSTACKDATA *data)",
178264790Sbapt    "{",
179264790Sbapt    "    free(data->s_base);",
180264790Sbapt    "    free(data->l_base);",
181264790Sbapt    "    memset(data, 0, sizeof(*data));",
182264790Sbapt    "}",
183264790Sbapt    "#else",
184264790Sbapt    "#define yyfreestack(data) /* nothing */",
185264790Sbapt    "#endif",
186264790Sbapt    "",
187264790Sbapt    "#define YYABORT  goto yyabort",
188264790Sbapt    "#define YYREJECT goto yyabort",
189264790Sbapt    "#define YYACCEPT goto yyaccept",
190264790Sbapt    "#define YYERROR  goto yyerrlab",
191264790Sbapt    "",
192264790Sbapt    "int",
193264790Sbapt    "YYPARSE_DECL()",
194264790Sbapt    "{",
195264790Sbapt    0
196264790Sbapt};
197264790Sbapt
198264790Sbaptconst char *const body_2[] =
199264790Sbapt{
200264790Sbapt    "    int yym, yyn, yystate;",
201264790Sbapt    "#if YYDEBUG",
202264790Sbapt    "    const char *yys;",
203264790Sbapt    "",
204264790Sbapt    "    if ((yys = getenv(\"YYDEBUG\")) != 0)",
205264790Sbapt    "    {",
206264790Sbapt    "        yyn = *yys;",
207264790Sbapt    "        if (yyn >= '0' && yyn <= '9')",
208264790Sbapt    "            yydebug = yyn - '0';",
209264790Sbapt    "    }",
210264790Sbapt    "#endif",
211264790Sbapt    "",
212264790Sbapt    "    yynerrs = 0;",
213264790Sbapt    "    yyerrflag = 0;",
214264790Sbapt    "    yychar = YYEMPTY;",
215264790Sbapt    "    yystate = 0;",
216264790Sbapt    "",
217264790Sbapt    "#if YYPURE",
218264790Sbapt    "    memset(&yystack, 0, sizeof(yystack));",
219264790Sbapt    "#endif",
220264790Sbapt    "",
221264790Sbapt    "    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
222264790Sbapt    "    yystack.s_mark = yystack.s_base;",
223264790Sbapt    "    yystack.l_mark = yystack.l_base;",
224264790Sbapt    "    yystate = 0;",
225264790Sbapt    "    *yystack.s_mark = 0;",
226264790Sbapt    "",
227264790Sbapt    "yyloop:",
228264790Sbapt    "    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;",
229264790Sbapt    "    if (yychar < 0)",
230264790Sbapt    "    {",
231264790Sbapt    "        if ((yychar = YYLEX) < 0) yychar = YYEOF;",
232264790Sbapt    "#if YYDEBUG",
233264790Sbapt    "        if (yydebug)",
234264790Sbapt    "        {",
235264790Sbapt    "            yys = yyname[YYTRANSLATE(yychar)];",
236264790Sbapt    "            printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
237264790Sbapt    "                    YYPREFIX, yystate, yychar, yys);",
238264790Sbapt    "        }",
239264790Sbapt    "#endif",
240264790Sbapt    "    }",
241264790Sbapt    "    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
242264790Sbapt    "            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
243264790Sbapt    "    {",
244264790Sbapt    "#if YYDEBUG",
245264790Sbapt    "        if (yydebug)",
246264790Sbapt    "            printf(\"%sdebug: state %d, shifting to state %d\\n\",",
247264790Sbapt    "                    YYPREFIX, yystate, yytable[yyn]);",
248264790Sbapt    "#endif",
249264790Sbapt    "        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)",
250264790Sbapt    "        {",
251264790Sbapt    "            goto yyoverflow;",
252264790Sbapt    "        }",
253264790Sbapt    "        yystate = yytable[yyn];",
254264790Sbapt    "        *++yystack.s_mark = yytable[yyn];",
255264790Sbapt    "        *++yystack.l_mark = yylval;",
256264790Sbapt    "        yychar = YYEMPTY;",
257264790Sbapt    "        if (yyerrflag > 0)  --yyerrflag;",
258264790Sbapt    "        goto yyloop;",
259264790Sbapt    "    }",
260264790Sbapt    "    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
261264790Sbapt    "            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
262264790Sbapt    "    {",
263264790Sbapt    "        yyn = yytable[yyn];",
264264790Sbapt    "        goto yyreduce;",
265264790Sbapt    "    }",
266264790Sbapt    "    if (yyerrflag) goto yyinrecovery;",
267264790Sbapt    "",
268264790Sbapt    "    YYERROR_CALL(\"syntax error\");",
269264790Sbapt    "",
270264790Sbapt    "    goto yyerrlab;",
271264790Sbapt    "",
272264790Sbapt    "yyerrlab:",
273264790Sbapt    "    ++yynerrs;",
274264790Sbapt    "",
275264790Sbapt    "yyinrecovery:",
276264790Sbapt    "    if (yyerrflag < 3)",
277264790Sbapt    "    {",
278264790Sbapt    "        yyerrflag = 3;",
279264790Sbapt    "        for (;;)",
280264790Sbapt    "        {",
281264790Sbapt    "            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&",
282264790Sbapt    "                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
283264790Sbapt    "            {",
284264790Sbapt    "#if YYDEBUG",
285264790Sbapt    "                if (yydebug)",
286264790Sbapt    "                    printf(\"%sdebug: state %d, error recovery shifting\\",
287264790Sbapt    " to state %d\\n\", YYPREFIX, *yystack.s_mark, yytable[yyn]);",
288264790Sbapt    "#endif",
289264790Sbapt    "                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)",
290264790Sbapt    "                {",
291264790Sbapt    "                    goto yyoverflow;",
292264790Sbapt    "                }",
293264790Sbapt    "                yystate = yytable[yyn];",
294264790Sbapt    "                *++yystack.s_mark = yytable[yyn];",
295264790Sbapt    "                *++yystack.l_mark = yylval;",
296264790Sbapt    "                goto yyloop;",
297264790Sbapt    "            }",
298264790Sbapt    "            else",
299264790Sbapt    "            {",
300264790Sbapt    "#if YYDEBUG",
301264790Sbapt    "                if (yydebug)",
302264790Sbapt    "                    printf(\"%sdebug: error recovery discarding state %d\\n\",",
303264790Sbapt    "                            YYPREFIX, *yystack.s_mark);",
304264790Sbapt    "#endif",
305264790Sbapt    "                if (yystack.s_mark <= yystack.s_base) goto yyabort;",
306264790Sbapt    "                --yystack.s_mark;",
307264790Sbapt    "                --yystack.l_mark;",
308264790Sbapt    "            }",
309264790Sbapt    "        }",
310264790Sbapt    "    }",
311264790Sbapt    "    else",
312264790Sbapt    "    {",
313264790Sbapt    "        if (yychar == YYEOF) goto yyabort;",
314264790Sbapt    "#if YYDEBUG",
315264790Sbapt    "        if (yydebug)",
316264790Sbapt    "        {",
317264790Sbapt    "            yys = yyname[YYTRANSLATE(yychar)];",
318264790Sbapt    "            printf(\"%sdebug: state %d, error recovery discards token %d (%s)\\n\",",
319264790Sbapt    "                    YYPREFIX, yystate, yychar, yys);",
320264790Sbapt    "        }",
321264790Sbapt    "#endif",
322264790Sbapt    "        yychar = YYEMPTY;",
323264790Sbapt    "        goto yyloop;",
324264790Sbapt    "    }",
325264790Sbapt    "",
326264790Sbapt    "yyreduce:",
327264790Sbapt    "#if YYDEBUG",
328264790Sbapt    "    if (yydebug)",
329264790Sbapt    "        printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
330264790Sbapt    "                YYPREFIX, yystate, yyn, yyrule[yyn]);",
331264790Sbapt    "#endif",
332264790Sbapt    "    yym = yylen[yyn];",
333264790Sbapt    "    if (yym)",
334264790Sbapt    "        yyval = yystack.l_mark[1-yym];",
335264790Sbapt    "    else",
336264790Sbapt    "        memset(&yyval, 0, sizeof yyval);",
337264790Sbapt    "    switch (yyn)",
338264790Sbapt    "    {",
339264790Sbapt    0
340264790Sbapt};
341264790Sbapt
342264790Sbaptconst char *const trailer[] =
343264790Sbapt{
344264790Sbapt    "    }",
345264790Sbapt    "    yystack.s_mark -= yym;",
346264790Sbapt    "    yystate = *yystack.s_mark;",
347264790Sbapt    "    yystack.l_mark -= yym;",
348264790Sbapt    "    yym = yylhs[yyn];",
349264790Sbapt    "    if (yystate == 0 && yym == 0)",
350264790Sbapt    "    {",
351264790Sbapt    "#if YYDEBUG",
352264790Sbapt    "        if (yydebug)",
353264790Sbapt    "            printf(\"%sdebug: after reduction, shifting from state 0 to\\",
354264790Sbapt    " state %d\\n\", YYPREFIX, YYFINAL);",
355264790Sbapt    "#endif",
356264790Sbapt    "        yystate = YYFINAL;",
357264790Sbapt    "        *++yystack.s_mark = YYFINAL;",
358264790Sbapt    "        *++yystack.l_mark = yyval;",
359264790Sbapt    "        if (yychar < 0)",
360264790Sbapt    "        {",
361264790Sbapt    "            if ((yychar = YYLEX) < 0) yychar = YYEOF;",
362264790Sbapt    "#if YYDEBUG",
363264790Sbapt    "            if (yydebug)",
364264790Sbapt    "            {",
365264790Sbapt    "                yys = yyname[YYTRANSLATE(yychar)];",
366264790Sbapt    "                printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
367264790Sbapt    "                        YYPREFIX, YYFINAL, yychar, yys);",
368264790Sbapt    "            }",
369264790Sbapt    "#endif",
370264790Sbapt    "        }",
371264790Sbapt    "        if (yychar == YYEOF) goto yyaccept;",
372264790Sbapt    "        goto yyloop;",
373264790Sbapt    "    }",
374264790Sbapt    "    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
375264790Sbapt    "            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
376264790Sbapt    "        yystate = yytable[yyn];",
377264790Sbapt    "    else",
378264790Sbapt    "        yystate = yydgoto[yym];",
379264790Sbapt    "#if YYDEBUG",
380264790Sbapt    "    if (yydebug)",
381264790Sbapt    "        printf(\"%sdebug: after reduction, shifting from state %d \\",
382264790Sbapt    "to state %d\\n\", YYPREFIX, *yystack.s_mark, yystate);",
383264790Sbapt    "#endif",
384264790Sbapt    "    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)",
385264790Sbapt    "    {",
386264790Sbapt    "        goto yyoverflow;",
387264790Sbapt    "    }",
388264790Sbapt    "    *++yystack.s_mark = (YYINT) yystate;",
389264790Sbapt    "    *++yystack.l_mark = yyval;",
390264790Sbapt    "    goto yyloop;",
391264790Sbapt    "",
392264790Sbapt    "yyoverflow:",
393264790Sbapt    "    YYERROR_CALL(\"yacc stack overflow\");",
394264790Sbapt    "",
395264790Sbapt    "yyabort:",
396264790Sbapt    "    yyfreestack(&yystack);",
397264790Sbapt    "    return (1);",
398264790Sbapt    "",
399264790Sbapt    "yyaccept:",
400264790Sbapt    "    yyfreestack(&yystack);",
401264790Sbapt    "    return (0);",
402264790Sbapt    "}",
403264790Sbapt    0
404264790Sbapt};
405264790Sbapt
406264790Sbaptvoid
407264790Sbaptwrite_section(FILE * fp, const char *const section[])
408264790Sbapt{
409264790Sbapt    int i;
410264790Sbapt    const char *s;
411264790Sbapt
412264790Sbapt    for (i = 0; (s = section[i]) != 0; ++i)
413264790Sbapt    {
414264790Sbapt	if (fp == code_file)
415264790Sbapt	    ++outline;
416264790Sbapt	fprintf(fp, "%s\n", s);
417264790Sbapt    }
418264790Sbapt}
419