xref: /minix3/external/bsd/byacc/dist/yaccpar.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc /*	$NetBSD: yaccpar.c,v 1.2 2015/01/04 01:34:20 christos Exp $	*/
2*0a6a1f1dSLionel Sambuc 
3*0a6a1f1dSLionel Sambuc /* This file generated automatically using
4*0a6a1f1dSLionel Sambuc  * @Id: skel2c,v 1.3 2014/04/06 19:48:04 tom Exp @
5*0a6a1f1dSLionel Sambuc  */
6*0a6a1f1dSLionel Sambuc 
7*0a6a1f1dSLionel Sambuc /* @Id: yaccpar.skel,v 1.5 2014/04/07 21:51:00 tom Exp @ */
8*0a6a1f1dSLionel Sambuc 
9*0a6a1f1dSLionel Sambuc #include "defs.h"
10*0a6a1f1dSLionel Sambuc 
11*0a6a1f1dSLionel Sambuc /*  If the skeleton is changed, the banner should be changed so that	*/
12*0a6a1f1dSLionel Sambuc /*  the altered version can be easily distinguished from the original.	*/
13*0a6a1f1dSLionel Sambuc /*									*/
14*0a6a1f1dSLionel Sambuc /*  The #defines included with the banner are there because they are	*/
15*0a6a1f1dSLionel Sambuc /*  useful in subsequent code.  The macros #defined in the header or	*/
16*0a6a1f1dSLionel Sambuc /*  the body either are not useful outside of semantic actions or	*/
17*0a6a1f1dSLionel Sambuc /*  are conditional.							*/
18*0a6a1f1dSLionel Sambuc 
19*0a6a1f1dSLionel Sambuc const char *const banner[] =
20*0a6a1f1dSLionel Sambuc {
21*0a6a1f1dSLionel Sambuc     "/* original parser id follows */",
22*0a6a1f1dSLionel Sambuc     "/* yysccsid[] = \"@(#)yaccpar	1.9 (Berkeley) 02/21/93\" */",
23*0a6a1f1dSLionel Sambuc     "/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */",
24*0a6a1f1dSLionel Sambuc     "",
25*0a6a1f1dSLionel Sambuc     "#define YYBYACC 1",
26*0a6a1f1dSLionel Sambuc     CONCAT1("#define YYMAJOR ", YYMAJOR),
27*0a6a1f1dSLionel Sambuc     CONCAT1("#define YYMINOR ", YYMINOR),
28*0a6a1f1dSLionel Sambuc #ifdef YYPATCH
29*0a6a1f1dSLionel Sambuc     CONCAT1("#define YYPATCH ", YYPATCH),
30*0a6a1f1dSLionel Sambuc #endif
31*0a6a1f1dSLionel Sambuc     "",
32*0a6a1f1dSLionel Sambuc     "#define YYEMPTY        (-1)",
33*0a6a1f1dSLionel Sambuc     "#define yyclearin      (yychar = YYEMPTY)",
34*0a6a1f1dSLionel Sambuc     "#define yyerrok        (yyerrflag = 0)",
35*0a6a1f1dSLionel Sambuc     "#define YYRECOVERING() (yyerrflag != 0)",
36*0a6a1f1dSLionel Sambuc     "#define YYENOMEM       (-2)",
37*0a6a1f1dSLionel Sambuc     "#define YYEOF          0",
38*0a6a1f1dSLionel Sambuc     0
39*0a6a1f1dSLionel Sambuc };
40*0a6a1f1dSLionel Sambuc 
41*0a6a1f1dSLionel Sambuc const char *const xdecls[] =
42*0a6a1f1dSLionel Sambuc {
43*0a6a1f1dSLionel Sambuc     "",
44*0a6a1f1dSLionel Sambuc     "extern int YYPARSE_DECL();",
45*0a6a1f1dSLionel Sambuc     0
46*0a6a1f1dSLionel Sambuc };
47*0a6a1f1dSLionel Sambuc 
48*0a6a1f1dSLionel Sambuc const char *const tables[] =
49*0a6a1f1dSLionel Sambuc {
50*0a6a1f1dSLionel Sambuc     "extern YYINT yylhs[];",
51*0a6a1f1dSLionel Sambuc     "extern YYINT yylen[];",
52*0a6a1f1dSLionel Sambuc     "extern YYINT yydefred[];",
53*0a6a1f1dSLionel Sambuc     "extern YYINT yydgoto[];",
54*0a6a1f1dSLionel Sambuc     "extern YYINT yysindex[];",
55*0a6a1f1dSLionel Sambuc     "extern YYINT yyrindex[];",
56*0a6a1f1dSLionel Sambuc     "extern YYINT yygindex[];",
57*0a6a1f1dSLionel Sambuc     "extern YYINT yytable[];",
58*0a6a1f1dSLionel Sambuc     "extern YYINT yycheck[];",
59*0a6a1f1dSLionel Sambuc     "",
60*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
61*0a6a1f1dSLionel Sambuc     "extern char *yyname[];",
62*0a6a1f1dSLionel Sambuc     "extern char *yyrule[];",
63*0a6a1f1dSLionel Sambuc     "#endif",
64*0a6a1f1dSLionel Sambuc     0
65*0a6a1f1dSLionel Sambuc };
66*0a6a1f1dSLionel Sambuc 
67*0a6a1f1dSLionel Sambuc const char *const global_vars[] =
68*0a6a1f1dSLionel Sambuc {
69*0a6a1f1dSLionel Sambuc     "",
70*0a6a1f1dSLionel Sambuc     "int      yydebug;",
71*0a6a1f1dSLionel Sambuc     "int      yynerrs;",
72*0a6a1f1dSLionel Sambuc     0
73*0a6a1f1dSLionel Sambuc };
74*0a6a1f1dSLionel Sambuc 
75*0a6a1f1dSLionel Sambuc const char *const impure_vars[] =
76*0a6a1f1dSLionel Sambuc {
77*0a6a1f1dSLionel Sambuc     "",
78*0a6a1f1dSLionel Sambuc     "int      yyerrflag;",
79*0a6a1f1dSLionel Sambuc     "int      yychar;",
80*0a6a1f1dSLionel Sambuc     "YYSTYPE  yyval;",
81*0a6a1f1dSLionel Sambuc     "YYSTYPE  yylval;",
82*0a6a1f1dSLionel Sambuc     0
83*0a6a1f1dSLionel Sambuc };
84*0a6a1f1dSLionel Sambuc 
85*0a6a1f1dSLionel Sambuc const char *const hdr_defs[] =
86*0a6a1f1dSLionel Sambuc {
87*0a6a1f1dSLionel Sambuc     "",
88*0a6a1f1dSLionel Sambuc     "/* define the initial stack-sizes */",
89*0a6a1f1dSLionel Sambuc     "#ifdef YYSTACKSIZE",
90*0a6a1f1dSLionel Sambuc     "#undef YYMAXDEPTH",
91*0a6a1f1dSLionel Sambuc     "#define YYMAXDEPTH  YYSTACKSIZE",
92*0a6a1f1dSLionel Sambuc     "#else",
93*0a6a1f1dSLionel Sambuc     "#ifdef YYMAXDEPTH",
94*0a6a1f1dSLionel Sambuc     "#define YYSTACKSIZE YYMAXDEPTH",
95*0a6a1f1dSLionel Sambuc     "#else",
96*0a6a1f1dSLionel Sambuc     "#define YYSTACKSIZE 10000",
97*0a6a1f1dSLionel Sambuc     "#define YYMAXDEPTH  10000",
98*0a6a1f1dSLionel Sambuc     "#endif",
99*0a6a1f1dSLionel Sambuc     "#endif",
100*0a6a1f1dSLionel Sambuc     "",
101*0a6a1f1dSLionel Sambuc     "#define YYINITSTACKSIZE 200",
102*0a6a1f1dSLionel Sambuc     "",
103*0a6a1f1dSLionel Sambuc     "typedef struct {",
104*0a6a1f1dSLionel Sambuc     "    unsigned stacksize;",
105*0a6a1f1dSLionel Sambuc     "    YYINT    *s_base;",
106*0a6a1f1dSLionel Sambuc     "    YYINT    *s_mark;",
107*0a6a1f1dSLionel Sambuc     "    YYINT    *s_last;",
108*0a6a1f1dSLionel Sambuc     "    YYSTYPE  *l_base;",
109*0a6a1f1dSLionel Sambuc     "    YYSTYPE  *l_mark;",
110*0a6a1f1dSLionel Sambuc     "} YYSTACKDATA;",
111*0a6a1f1dSLionel Sambuc     0
112*0a6a1f1dSLionel Sambuc };
113*0a6a1f1dSLionel Sambuc 
114*0a6a1f1dSLionel Sambuc const char *const hdr_vars[] =
115*0a6a1f1dSLionel Sambuc {
116*0a6a1f1dSLionel Sambuc     "/* variables for the parser stack */",
117*0a6a1f1dSLionel Sambuc     "static YYSTACKDATA yystack;",
118*0a6a1f1dSLionel Sambuc     0
119*0a6a1f1dSLionel Sambuc };
120*0a6a1f1dSLionel Sambuc 
121*0a6a1f1dSLionel Sambuc const char *const body_vars[] =
122*0a6a1f1dSLionel Sambuc {
123*0a6a1f1dSLionel Sambuc     "    int      yyerrflag;",
124*0a6a1f1dSLionel Sambuc     "    int      yychar;",
125*0a6a1f1dSLionel Sambuc     "    YYSTYPE  yyval;",
126*0a6a1f1dSLionel Sambuc     "    YYSTYPE  yylval;",
127*0a6a1f1dSLionel Sambuc     "",
128*0a6a1f1dSLionel Sambuc     "    /* variables for the parser stack */",
129*0a6a1f1dSLionel Sambuc     "    YYSTACKDATA yystack;",
130*0a6a1f1dSLionel Sambuc     0
131*0a6a1f1dSLionel Sambuc };
132*0a6a1f1dSLionel Sambuc 
133*0a6a1f1dSLionel Sambuc const char *const body_1[] =
134*0a6a1f1dSLionel Sambuc {
135*0a6a1f1dSLionel Sambuc     "",
136*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
137*0a6a1f1dSLionel Sambuc     "#include <stdio.h>		/* needed for printf */",
138*0a6a1f1dSLionel Sambuc     "#endif",
139*0a6a1f1dSLionel Sambuc     "",
140*0a6a1f1dSLionel Sambuc     "#include <stdlib.h>	/* needed for malloc, etc */",
141*0a6a1f1dSLionel Sambuc     "#include <string.h>	/* needed for memset */",
142*0a6a1f1dSLionel Sambuc     "",
143*0a6a1f1dSLionel Sambuc     "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
144*0a6a1f1dSLionel Sambuc     "static int yygrowstack(YYSTACKDATA *data)",
145*0a6a1f1dSLionel Sambuc     "{",
146*0a6a1f1dSLionel Sambuc     "    int i;",
147*0a6a1f1dSLionel Sambuc     "    unsigned newsize;",
148*0a6a1f1dSLionel Sambuc     "    YYINT *newss;",
149*0a6a1f1dSLionel Sambuc     "    YYSTYPE *newvs;",
150*0a6a1f1dSLionel Sambuc     "",
151*0a6a1f1dSLionel Sambuc     "    if ((newsize = data->stacksize) == 0)",
152*0a6a1f1dSLionel Sambuc     "        newsize = YYINITSTACKSIZE;",
153*0a6a1f1dSLionel Sambuc     "    else if (newsize >= YYMAXDEPTH)",
154*0a6a1f1dSLionel Sambuc     "        return YYENOMEM;",
155*0a6a1f1dSLionel Sambuc     "    else if ((newsize *= 2) > YYMAXDEPTH)",
156*0a6a1f1dSLionel Sambuc     "        newsize = YYMAXDEPTH;",
157*0a6a1f1dSLionel Sambuc     "",
158*0a6a1f1dSLionel Sambuc     "    i = (int) (data->s_mark - data->s_base);",
159*0a6a1f1dSLionel Sambuc     "    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));",
160*0a6a1f1dSLionel Sambuc     "    if (newss == 0)",
161*0a6a1f1dSLionel Sambuc     "        return YYENOMEM;",
162*0a6a1f1dSLionel Sambuc     "",
163*0a6a1f1dSLionel Sambuc     "    data->s_base = newss;",
164*0a6a1f1dSLionel Sambuc     "    data->s_mark = newss + i;",
165*0a6a1f1dSLionel Sambuc     "",
166*0a6a1f1dSLionel Sambuc     "    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));",
167*0a6a1f1dSLionel Sambuc     "    if (newvs == 0)",
168*0a6a1f1dSLionel Sambuc     "        return YYENOMEM;",
169*0a6a1f1dSLionel Sambuc     "",
170*0a6a1f1dSLionel Sambuc     "    data->l_base = newvs;",
171*0a6a1f1dSLionel Sambuc     "    data->l_mark = newvs + i;",
172*0a6a1f1dSLionel Sambuc     "",
173*0a6a1f1dSLionel Sambuc     "    data->stacksize = newsize;",
174*0a6a1f1dSLionel Sambuc     "    data->s_last = data->s_base + newsize - 1;",
175*0a6a1f1dSLionel Sambuc     "    return 0;",
176*0a6a1f1dSLionel Sambuc     "}",
177*0a6a1f1dSLionel Sambuc     "",
178*0a6a1f1dSLionel Sambuc     "#if YYPURE || defined(YY_NO_LEAKS)",
179*0a6a1f1dSLionel Sambuc     "static void yyfreestack(YYSTACKDATA *data)",
180*0a6a1f1dSLionel Sambuc     "{",
181*0a6a1f1dSLionel Sambuc     "    free(data->s_base);",
182*0a6a1f1dSLionel Sambuc     "    free(data->l_base);",
183*0a6a1f1dSLionel Sambuc     "    memset(data, 0, sizeof(*data));",
184*0a6a1f1dSLionel Sambuc     "}",
185*0a6a1f1dSLionel Sambuc     "#else",
186*0a6a1f1dSLionel Sambuc     "#define yyfreestack(data) /* nothing */",
187*0a6a1f1dSLionel Sambuc     "#endif",
188*0a6a1f1dSLionel Sambuc     "",
189*0a6a1f1dSLionel Sambuc     "#define YYABORT  goto yyabort",
190*0a6a1f1dSLionel Sambuc     "#define YYREJECT goto yyabort",
191*0a6a1f1dSLionel Sambuc     "#define YYACCEPT goto yyaccept",
192*0a6a1f1dSLionel Sambuc     "#define YYERROR  goto yyerrlab",
193*0a6a1f1dSLionel Sambuc     "",
194*0a6a1f1dSLionel Sambuc     "int",
195*0a6a1f1dSLionel Sambuc     "YYPARSE_DECL()",
196*0a6a1f1dSLionel Sambuc     "{",
197*0a6a1f1dSLionel Sambuc     0
198*0a6a1f1dSLionel Sambuc };
199*0a6a1f1dSLionel Sambuc 
200*0a6a1f1dSLionel Sambuc const char *const body_2[] =
201*0a6a1f1dSLionel Sambuc {
202*0a6a1f1dSLionel Sambuc     "    int yym, yyn, yystate;",
203*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
204*0a6a1f1dSLionel Sambuc     "    const char *yys;",
205*0a6a1f1dSLionel Sambuc     "",
206*0a6a1f1dSLionel Sambuc     "    if ((yys = getenv(\"YYDEBUG\")) != 0)",
207*0a6a1f1dSLionel Sambuc     "    {",
208*0a6a1f1dSLionel Sambuc     "        yyn = *yys;",
209*0a6a1f1dSLionel Sambuc     "        if (yyn >= '0' && yyn <= '9')",
210*0a6a1f1dSLionel Sambuc     "            yydebug = yyn - '0';",
211*0a6a1f1dSLionel Sambuc     "    }",
212*0a6a1f1dSLionel Sambuc     "#endif",
213*0a6a1f1dSLionel Sambuc     "",
214*0a6a1f1dSLionel Sambuc     0,
215*0a6a1f1dSLionel Sambuc };
216*0a6a1f1dSLionel Sambuc 
217*0a6a1f1dSLionel Sambuc const char *const body_3[] =
218*0a6a1f1dSLionel Sambuc {
219*0a6a1f1dSLionel Sambuc     "    yynerrs = 0;",
220*0a6a1f1dSLionel Sambuc     "    yyerrflag = 0;",
221*0a6a1f1dSLionel Sambuc     "    yychar = YYEMPTY;",
222*0a6a1f1dSLionel Sambuc     "    yystate = 0;",
223*0a6a1f1dSLionel Sambuc     "",
224*0a6a1f1dSLionel Sambuc     "#if YYPURE",
225*0a6a1f1dSLionel Sambuc     "    memset(&yystack, 0, sizeof(yystack));",
226*0a6a1f1dSLionel Sambuc     "#endif",
227*0a6a1f1dSLionel Sambuc     "",
228*0a6a1f1dSLionel Sambuc     "    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
229*0a6a1f1dSLionel Sambuc     "    yystack.s_mark = yystack.s_base;",
230*0a6a1f1dSLionel Sambuc     "    yystack.l_mark = yystack.l_base;",
231*0a6a1f1dSLionel Sambuc     "    yystate = 0;",
232*0a6a1f1dSLionel Sambuc     "    *yystack.s_mark = 0;",
233*0a6a1f1dSLionel Sambuc     "",
234*0a6a1f1dSLionel Sambuc     "yyloop:",
235*0a6a1f1dSLionel Sambuc     "    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;",
236*0a6a1f1dSLionel Sambuc     "    if (yychar < 0)",
237*0a6a1f1dSLionel Sambuc     "    {",
238*0a6a1f1dSLionel Sambuc     "        if ((yychar = YYLEX) < 0) yychar = YYEOF;",
239*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
240*0a6a1f1dSLionel Sambuc     "        if (yydebug)",
241*0a6a1f1dSLionel Sambuc     "        {",
242*0a6a1f1dSLionel Sambuc     "            yys = yyname[YYTRANSLATE(yychar)];",
243*0a6a1f1dSLionel Sambuc     "            printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
244*0a6a1f1dSLionel Sambuc     "                    YYPREFIX, yystate, yychar, yys);",
245*0a6a1f1dSLionel Sambuc     "        }",
246*0a6a1f1dSLionel Sambuc     "#endif",
247*0a6a1f1dSLionel Sambuc     "    }",
248*0a6a1f1dSLionel Sambuc     "    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
249*0a6a1f1dSLionel Sambuc     "            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
250*0a6a1f1dSLionel Sambuc     "    {",
251*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
252*0a6a1f1dSLionel Sambuc     "        if (yydebug)",
253*0a6a1f1dSLionel Sambuc     "            printf(\"%sdebug: state %d, shifting to state %d\\n\",",
254*0a6a1f1dSLionel Sambuc     "                    YYPREFIX, yystate, yytable[yyn]);",
255*0a6a1f1dSLionel Sambuc     "#endif",
256*0a6a1f1dSLionel Sambuc     "        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)",
257*0a6a1f1dSLionel Sambuc     "        {",
258*0a6a1f1dSLionel Sambuc     "            goto yyoverflow;",
259*0a6a1f1dSLionel Sambuc     "        }",
260*0a6a1f1dSLionel Sambuc     "        yystate = yytable[yyn];",
261*0a6a1f1dSLionel Sambuc     "        *++yystack.s_mark = yytable[yyn];",
262*0a6a1f1dSLionel Sambuc     "        *++yystack.l_mark = yylval;",
263*0a6a1f1dSLionel Sambuc     "        yychar = YYEMPTY;",
264*0a6a1f1dSLionel Sambuc     "        if (yyerrflag > 0)  --yyerrflag;",
265*0a6a1f1dSLionel Sambuc     "        goto yyloop;",
266*0a6a1f1dSLionel Sambuc     "    }",
267*0a6a1f1dSLionel Sambuc     "    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
268*0a6a1f1dSLionel Sambuc     "            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
269*0a6a1f1dSLionel Sambuc     "    {",
270*0a6a1f1dSLionel Sambuc     "        yyn = yytable[yyn];",
271*0a6a1f1dSLionel Sambuc     "        goto yyreduce;",
272*0a6a1f1dSLionel Sambuc     "    }",
273*0a6a1f1dSLionel Sambuc     "    if (yyerrflag) goto yyinrecovery;",
274*0a6a1f1dSLionel Sambuc     "",
275*0a6a1f1dSLionel Sambuc     "    YYERROR_CALL(\"syntax error\");",
276*0a6a1f1dSLionel Sambuc     "",
277*0a6a1f1dSLionel Sambuc     "    goto yyerrlab;",
278*0a6a1f1dSLionel Sambuc     "",
279*0a6a1f1dSLionel Sambuc     "yyerrlab:",
280*0a6a1f1dSLionel Sambuc     "    ++yynerrs;",
281*0a6a1f1dSLionel Sambuc     "",
282*0a6a1f1dSLionel Sambuc     "yyinrecovery:",
283*0a6a1f1dSLionel Sambuc     "    if (yyerrflag < 3)",
284*0a6a1f1dSLionel Sambuc     "    {",
285*0a6a1f1dSLionel Sambuc     "        yyerrflag = 3;",
286*0a6a1f1dSLionel Sambuc     "        for (;;)",
287*0a6a1f1dSLionel Sambuc     "        {",
288*0a6a1f1dSLionel Sambuc     "            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&",
289*0a6a1f1dSLionel Sambuc     "                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
290*0a6a1f1dSLionel Sambuc     "            {",
291*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
292*0a6a1f1dSLionel Sambuc     "                if (yydebug)",
293*0a6a1f1dSLionel Sambuc     "                    printf(\"%sdebug: state %d, error recovery shifting\\",
294*0a6a1f1dSLionel Sambuc     " to state %d\\n\", YYPREFIX, *yystack.s_mark, yytable[yyn]);",
295*0a6a1f1dSLionel Sambuc     "#endif",
296*0a6a1f1dSLionel Sambuc     "                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)",
297*0a6a1f1dSLionel Sambuc     "                {",
298*0a6a1f1dSLionel Sambuc     "                    goto yyoverflow;",
299*0a6a1f1dSLionel Sambuc     "                }",
300*0a6a1f1dSLionel Sambuc     "                yystate = yytable[yyn];",
301*0a6a1f1dSLionel Sambuc     "                *++yystack.s_mark = yytable[yyn];",
302*0a6a1f1dSLionel Sambuc     "                *++yystack.l_mark = yylval;",
303*0a6a1f1dSLionel Sambuc     "                goto yyloop;",
304*0a6a1f1dSLionel Sambuc     "            }",
305*0a6a1f1dSLionel Sambuc     "            else",
306*0a6a1f1dSLionel Sambuc     "            {",
307*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
308*0a6a1f1dSLionel Sambuc     "                if (yydebug)",
309*0a6a1f1dSLionel Sambuc     "                    printf(\"%sdebug: error recovery discarding state %d\\n\",",
310*0a6a1f1dSLionel Sambuc     "                            YYPREFIX, *yystack.s_mark);",
311*0a6a1f1dSLionel Sambuc     "#endif",
312*0a6a1f1dSLionel Sambuc     "                if (yystack.s_mark <= yystack.s_base) goto yyabort;",
313*0a6a1f1dSLionel Sambuc     "                --yystack.s_mark;",
314*0a6a1f1dSLionel Sambuc     "                --yystack.l_mark;",
315*0a6a1f1dSLionel Sambuc     "            }",
316*0a6a1f1dSLionel Sambuc     "        }",
317*0a6a1f1dSLionel Sambuc     "    }",
318*0a6a1f1dSLionel Sambuc     "    else",
319*0a6a1f1dSLionel Sambuc     "    {",
320*0a6a1f1dSLionel Sambuc     "        if (yychar == YYEOF) goto yyabort;",
321*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
322*0a6a1f1dSLionel Sambuc     "        if (yydebug)",
323*0a6a1f1dSLionel Sambuc     "        {",
324*0a6a1f1dSLionel Sambuc     "            yys = yyname[YYTRANSLATE(yychar)];",
325*0a6a1f1dSLionel Sambuc     "            printf(\"%sdebug: state %d, error recovery discards token %d (%s)\\n\",",
326*0a6a1f1dSLionel Sambuc     "                    YYPREFIX, yystate, yychar, yys);",
327*0a6a1f1dSLionel Sambuc     "        }",
328*0a6a1f1dSLionel Sambuc     "#endif",
329*0a6a1f1dSLionel Sambuc     "        yychar = YYEMPTY;",
330*0a6a1f1dSLionel Sambuc     "        goto yyloop;",
331*0a6a1f1dSLionel Sambuc     "    }",
332*0a6a1f1dSLionel Sambuc     "",
333*0a6a1f1dSLionel Sambuc     "yyreduce:",
334*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
335*0a6a1f1dSLionel Sambuc     "    if (yydebug)",
336*0a6a1f1dSLionel Sambuc     "        printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
337*0a6a1f1dSLionel Sambuc     "                YYPREFIX, yystate, yyn, yyrule[yyn]);",
338*0a6a1f1dSLionel Sambuc     "#endif",
339*0a6a1f1dSLionel Sambuc     "    yym = yylen[yyn];",
340*0a6a1f1dSLionel Sambuc     "    if (yym)",
341*0a6a1f1dSLionel Sambuc     "        yyval = yystack.l_mark[1-yym];",
342*0a6a1f1dSLionel Sambuc     "    else",
343*0a6a1f1dSLionel Sambuc     "        memset(&yyval, 0, sizeof yyval);",
344*0a6a1f1dSLionel Sambuc     "    switch (yyn)",
345*0a6a1f1dSLionel Sambuc     "    {",
346*0a6a1f1dSLionel Sambuc     0
347*0a6a1f1dSLionel Sambuc };
348*0a6a1f1dSLionel Sambuc 
349*0a6a1f1dSLionel Sambuc const char *const trailer[] =
350*0a6a1f1dSLionel Sambuc {
351*0a6a1f1dSLionel Sambuc     "    }",
352*0a6a1f1dSLionel Sambuc     "    yystack.s_mark -= yym;",
353*0a6a1f1dSLionel Sambuc     "    yystate = *yystack.s_mark;",
354*0a6a1f1dSLionel Sambuc     "    yystack.l_mark -= yym;",
355*0a6a1f1dSLionel Sambuc     "    yym = yylhs[yyn];",
356*0a6a1f1dSLionel Sambuc     "    if (yystate == 0 && yym == 0)",
357*0a6a1f1dSLionel Sambuc     "    {",
358*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
359*0a6a1f1dSLionel Sambuc     "        if (yydebug)",
360*0a6a1f1dSLionel Sambuc     "            printf(\"%sdebug: after reduction, shifting from state 0 to\\",
361*0a6a1f1dSLionel Sambuc     " state %d\\n\", YYPREFIX, YYFINAL);",
362*0a6a1f1dSLionel Sambuc     "#endif",
363*0a6a1f1dSLionel Sambuc     "        yystate = YYFINAL;",
364*0a6a1f1dSLionel Sambuc     "        *++yystack.s_mark = YYFINAL;",
365*0a6a1f1dSLionel Sambuc     "        *++yystack.l_mark = yyval;",
366*0a6a1f1dSLionel Sambuc     "        if (yychar < 0)",
367*0a6a1f1dSLionel Sambuc     "        {",
368*0a6a1f1dSLionel Sambuc     "            if ((yychar = YYLEX) < 0) yychar = YYEOF;",
369*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
370*0a6a1f1dSLionel Sambuc     "            if (yydebug)",
371*0a6a1f1dSLionel Sambuc     "            {",
372*0a6a1f1dSLionel Sambuc     "                yys = yyname[YYTRANSLATE(yychar)];",
373*0a6a1f1dSLionel Sambuc     "                printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
374*0a6a1f1dSLionel Sambuc     "                        YYPREFIX, YYFINAL, yychar, yys);",
375*0a6a1f1dSLionel Sambuc     "            }",
376*0a6a1f1dSLionel Sambuc     "#endif",
377*0a6a1f1dSLionel Sambuc     "        }",
378*0a6a1f1dSLionel Sambuc     "        if (yychar == YYEOF) goto yyaccept;",
379*0a6a1f1dSLionel Sambuc     "        goto yyloop;",
380*0a6a1f1dSLionel Sambuc     "    }",
381*0a6a1f1dSLionel Sambuc     "    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
382*0a6a1f1dSLionel Sambuc     "            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
383*0a6a1f1dSLionel Sambuc     "        yystate = yytable[yyn];",
384*0a6a1f1dSLionel Sambuc     "    else",
385*0a6a1f1dSLionel Sambuc     "        yystate = yydgoto[yym];",
386*0a6a1f1dSLionel Sambuc     "#if YYDEBUG",
387*0a6a1f1dSLionel Sambuc     "    if (yydebug)",
388*0a6a1f1dSLionel Sambuc     "        printf(\"%sdebug: after reduction, shifting from state %d \\",
389*0a6a1f1dSLionel Sambuc     "to state %d\\n\", YYPREFIX, *yystack.s_mark, yystate);",
390*0a6a1f1dSLionel Sambuc     "#endif",
391*0a6a1f1dSLionel Sambuc     "    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)",
392*0a6a1f1dSLionel Sambuc     "    {",
393*0a6a1f1dSLionel Sambuc     "        goto yyoverflow;",
394*0a6a1f1dSLionel Sambuc     "    }",
395*0a6a1f1dSLionel Sambuc     "    *++yystack.s_mark = (YYINT) yystate;",
396*0a6a1f1dSLionel Sambuc     "    *++yystack.l_mark = yyval;",
397*0a6a1f1dSLionel Sambuc     "    goto yyloop;",
398*0a6a1f1dSLionel Sambuc     "",
399*0a6a1f1dSLionel Sambuc     "yyoverflow:",
400*0a6a1f1dSLionel Sambuc     "    YYERROR_CALL(\"yacc stack overflow\");",
401*0a6a1f1dSLionel Sambuc     "",
402*0a6a1f1dSLionel Sambuc     "yyabort:",
403*0a6a1f1dSLionel Sambuc     "    yyfreestack(&yystack);",
404*0a6a1f1dSLionel Sambuc     "    return (1);",
405*0a6a1f1dSLionel Sambuc     "",
406*0a6a1f1dSLionel Sambuc     "yyaccept:",
407*0a6a1f1dSLionel Sambuc     "    yyfreestack(&yystack);",
408*0a6a1f1dSLionel Sambuc     "    return (0);",
409*0a6a1f1dSLionel Sambuc     "}",
410*0a6a1f1dSLionel Sambuc     0
411*0a6a1f1dSLionel Sambuc };
412*0a6a1f1dSLionel Sambuc 
413*0a6a1f1dSLionel Sambuc void
write_section(FILE * fp,const char * const section[])414*0a6a1f1dSLionel Sambuc write_section(FILE * fp, const char *const section[])
415*0a6a1f1dSLionel Sambuc {
416*0a6a1f1dSLionel Sambuc     int i;
417*0a6a1f1dSLionel Sambuc     const char *s;
418*0a6a1f1dSLionel Sambuc 
419*0a6a1f1dSLionel Sambuc     for (i = 0; (s = section[i]) != 0; ++i)
420*0a6a1f1dSLionel Sambuc     {
421*0a6a1f1dSLionel Sambuc 	if (fp == code_file)
422*0a6a1f1dSLionel Sambuc 	    ++outline;
423*0a6a1f1dSLionel Sambuc 	fprintf(fp, "%s\n", s);
424*0a6a1f1dSLionel Sambuc     }
425*0a6a1f1dSLionel Sambuc }
426