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