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