Annotation of src/usr.bin/yacc/skeleton.c, Revision 1.18
1.18 ! mpech 1: /* $OpenBSD: skeleton.c,v 1.17 2001/07/16 06:29:45 pvalchev Exp $ */
1.4 deraadt 2: /* $NetBSD: skeleton.c,v 1.10 1996/03/25 00:36:18 mrg Exp $ */
3:
4: /*
5: * Copyright (c) 1989 The Regents of the University of California.
6: * All rights reserved.
7: *
8: * This code is derived from software contributed to Berkeley by
9: * Robert Paul Corbett.
10: *
11: * Redistribution and use in source and binary forms, with or without
12: * modification, are permitted provided that the following conditions
13: * are met:
14: * 1. Redistributions of source code must retain the above copyright
15: * notice, this list of conditions and the following disclaimer.
16: * 2. Redistributions in binary form must reproduce the above copyright
17: * notice, this list of conditions and the following disclaimer in the
18: * documentation and/or other materials provided with the distribution.
19: * 3. All advertising materials mentioning features or use of this software
20: * must display the following acknowledgement:
21: * This product includes software developed by the University of
22: * California, Berkeley and its contributors.
23: * 4. Neither the name of the University nor the names of its contributors
24: * may be used to endorse or promote products derived from this software
25: * without specific prior written permission.
26: *
27: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37: * SUCH DAMAGE.
38: */
39:
40: #ifndef lint
41: #if 0
42: static char sccsid[] = "@(#)skeleton.c 5.8 (Berkeley) 4/29/95";
43: #else
44: static char rcsid[] = "$NetBSD: skeleton.c,v 1.10 1996/03/25 00:36:18 mrg Exp $";
45: #endif
46: #endif /* not lint */
1.3 niklas 47:
1.1 deraadt 48: #include "defs.h"
49:
50: /* The definition of yysccsid in the banner should be replaced with */
51: /* a #pragma ident directive if the target C compiler supports */
52: /* #pragma ident directives. */
53: /* */
54: /* If the skeleton is changed, the banner should be changed so that */
55: /* the altered version can be easily distinguished from the original. */
56: /* */
57: /* The #defines included with the banner are there because they are */
58: /* useful in subsequent code. The macros #defined in the header or */
59: /* the body either are not useful outside of semantic actions or */
60: /* are conditional. */
61:
62: char *banner[] =
63: {
64: "#ifndef lint",
65: "/*static char yysccsid[] = \"from: @(#)yaccpar 1.9 (Berkeley) 02/21/93\";*/",
1.13 dm 66: "static char yyrcsid[]",
67: "#if __GNUC__ == 2",
68: " __attribute__ ((unused))",
69: "#endif /* __GNUC__ == 2 */",
1.18 ! mpech 70: " = \"$OpenBSD: skeleton.c,v 1.17 2001/07/16 06:29:45 pvalchev Exp $\";",
1.1 deraadt 71: "#endif",
1.4 deraadt 72: "#include <stdlib.h>",
1.1 deraadt 73: "#define YYBYACC 1",
74: "#define YYMAJOR 1",
75: "#define YYMINOR 9",
1.2 niklas 76: "#define YYLEX yylex()",
77: "#define YYEMPTY -1",
78: "#define yyclearin (yychar=(YYEMPTY))",
1.1 deraadt 79: "#define yyerrok (yyerrflag=0)",
1.8 tholo 80: "#define YYRECOVERING() (yyerrflag!=0)",
1.1 deraadt 81: 0
82: };
83:
84:
85: char *tables[] =
86: {
87: "extern short yylhs[];",
88: "extern short yylen[];",
89: "extern short yydefred[];",
90: "extern short yydgoto[];",
91: "extern short yysindex[];",
92: "extern short yyrindex[];",
93: "extern short yygindex[];",
94: "extern short yytable[];",
95: "extern short yycheck[];",
96: "#if YYDEBUG",
1.16 tholo 97: "#if defined(__cplusplus) || __STDC__",
98: "extern const char * const yyname[];",
99: "extern const char * const yyrule[];",
100: "#else /* !(defined(__cplusplus) || __STDC__) */",
1.1 deraadt 101: "extern char *yyname[];",
102: "extern char *yyrule[];",
1.16 tholo 103: "#endif /* !(defined(__cplusplus) || __STDC__) */",
104: "#endif /* YYDEBUG */",
1.1 deraadt 105: 0
106: };
107:
108:
109: char *header[] =
110: {
111: "#ifdef YYSTACKSIZE",
112: "#undef YYMAXDEPTH",
113: "#define YYMAXDEPTH YYSTACKSIZE",
114: "#else",
115: "#ifdef YYMAXDEPTH",
116: "#define YYSTACKSIZE YYMAXDEPTH",
117: "#else",
1.4 deraadt 118: "#define YYSTACKSIZE 10000",
119: "#define YYMAXDEPTH 10000",
1.1 deraadt 120: "#endif",
121: "#endif",
1.4 deraadt 122: "#define YYINITSTACKSIZE 200",
1.1 deraadt 123: "int yydebug;",
124: "int yynerrs;",
125: "int yyerrflag;",
126: "int yychar;",
127: "short *yyssp;",
128: "YYSTYPE *yyvsp;",
129: "YYSTYPE yyval;",
130: "YYSTYPE yylval;",
1.4 deraadt 131: "short *yyss;",
132: "short *yysslim;",
133: "YYSTYPE *yyvs;",
134: "int yystacksize;",
1.1 deraadt 135: 0
136: };
137:
138:
139: char *body[] =
140: {
1.4 deraadt 141: "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
1.5 tholo 142: "#if defined(__cplusplus) || __STDC__",
143: "static int yygrowstack(void)",
144: "#else",
1.4 deraadt 145: "static int yygrowstack()",
1.5 tholo 146: "#endif",
1.4 deraadt 147: "{",
148: " int newsize, i;",
149: " short *newss;",
150: " YYSTYPE *newvs;",
151: "",
152: " if ((newsize = yystacksize) == 0)",
153: " newsize = YYINITSTACKSIZE;",
154: " else if (newsize >= YYMAXDEPTH)",
155: " return -1;",
156: " else if ((newsize *= 2) > YYMAXDEPTH)",
157: " newsize = YYMAXDEPTH;",
158: " i = yyssp - yyss;",
1.10 millert 159: " newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :",
160: " (short *)malloc(newsize * sizeof *newss);",
161: " if (newss == NULL)",
1.14 deraadt 162: " goto bail;",
1.4 deraadt 163: " yyss = newss;",
164: " yyssp = newss + i;",
1.10 millert 165: " newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :",
166: " (YYSTYPE *)malloc(newsize * sizeof *newvs);",
167: " if (newvs == NULL)",
1.14 deraadt 168: " goto bail;",
1.4 deraadt 169: " yyvs = newvs;",
170: " yyvsp = newvs + i;",
171: " yystacksize = newsize;",
172: " yysslim = yyss + newsize - 1;",
173: " return 0;",
1.14 deraadt 174: "bail:",
175: " if (yyss)",
176: " free(yyss);",
177: " if (yyvs)",
178: " free(yyvs);",
1.15 deraadt 179: " yyss = yyssp = NULL;",
180: " yyvs = yyvsp = NULL;",
1.14 deraadt 181: " yystacksize = 0;",
182: " return -1;",
1.4 deraadt 183: "}",
184: "",
1.1 deraadt 185: "#define YYABORT goto yyabort",
186: "#define YYREJECT goto yyabort",
187: "#define YYACCEPT goto yyaccept",
188: "#define YYERROR goto yyerrlab",
189: "int",
1.5 tholo 190: "#if defined(__cplusplus) || __STDC__",
191: "yyparse(void)",
192: "#else",
1.1 deraadt 193: "yyparse()",
1.5 tholo 194: "#endif",
1.1 deraadt 195: "{",
1.18 ! mpech 196: " int yym, yyn, yystate;",
1.1 deraadt 197: "#if YYDEBUG",
1.16 tholo 198: "#if defined(__cplusplus) || __STDC__",
1.18 ! mpech 199: " const char *yys;",
1.16 tholo 200: "#else /* !(defined(__cplusplus) || __STDC__) */",
1.18 ! mpech 201: " char *yys;",
1.16 tholo 202: "#endif /* !(defined(__cplusplus) || __STDC__) */",
1.1 deraadt 203: "",
1.6 deraadt 204: " if ((yys = getenv(\"YYDEBUG\")))",
1.1 deraadt 205: " {",
206: " yyn = *yys;",
207: " if (yyn >= '0' && yyn <= '9')",
208: " yydebug = yyn - '0';",
209: " }",
1.16 tholo 210: "#endif /* YYDEBUG */",
1.1 deraadt 211: "",
212: " yynerrs = 0;",
213: " yyerrflag = 0;",
214: " yychar = (-1);",
215: "",
1.4 deraadt 216: " if (yyss == NULL && yygrowstack()) goto yyoverflow;",
1.1 deraadt 217: " yyssp = yyss;",
218: " yyvsp = yyvs;",
219: " *yyssp = yystate = 0;",
220: "",
221: "yyloop:",
222: " if ((yyn = yydefred[yystate]) != 0) goto yyreduce;",
223: " if (yychar < 0)",
224: " {",
225: " if ((yychar = yylex()) < 0) yychar = 0;",
226: "#if YYDEBUG",
227: " if (yydebug)",
228: " {",
229: " yys = 0;",
230: " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
231: " if (!yys) yys = \"illegal-symbol\";",
232: " printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
233: " YYPREFIX, yystate, yychar, yys);",
234: " }",
235: "#endif",
236: " }",
237: " if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
238: " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
239: " {",
240: "#if YYDEBUG",
241: " if (yydebug)",
242: " printf(\"%sdebug: state %d, shifting to state %d\\n\",",
243: " YYPREFIX, yystate, yytable[yyn]);",
244: "#endif",
1.4 deraadt 245: " if (yyssp >= yysslim && yygrowstack())",
1.1 deraadt 246: " {",
247: " goto yyoverflow;",
248: " }",
249: " *++yyssp = yystate = yytable[yyn];",
250: " *++yyvsp = yylval;",
251: " yychar = (-1);",
252: " if (yyerrflag > 0) --yyerrflag;",
253: " goto yyloop;",
254: " }",
255: " if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
256: " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
257: " {",
258: " yyn = yytable[yyn];",
259: " goto yyreduce;",
260: " }",
261: " if (yyerrflag) goto yyinrecovery;",
1.7 tholo 262: "#if defined(lint) || defined(__GNUC__)",
1.4 deraadt 263: " goto yynewerror;",
264: "#endif",
265: "yynewerror:",
1.1 deraadt 266: " yyerror(\"syntax error\");",
1.7 tholo 267: "#if defined(lint) || defined(__GNUC__)",
1.1 deraadt 268: " goto yyerrlab;",
269: "#endif",
270: "yyerrlab:",
271: " ++yynerrs;",
272: "yyinrecovery:",
273: " if (yyerrflag < 3)",
274: " {",
275: " yyerrflag = 3;",
276: " for (;;)",
277: " {",
278: " if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&",
279: " yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
280: " {",
281: "#if YYDEBUG",
282: " if (yydebug)",
283: " printf(\"%sdebug: state %d, error recovery shifting\\",
284: " to state %d\\n\", YYPREFIX, *yyssp, yytable[yyn]);",
285: "#endif",
1.4 deraadt 286: " if (yyssp >= yysslim && yygrowstack())",
1.1 deraadt 287: " {",
288: " goto yyoverflow;",
289: " }",
290: " *++yyssp = yystate = yytable[yyn];",
291: " *++yyvsp = yylval;",
292: " goto yyloop;",
293: " }",
294: " else",
295: " {",
296: "#if YYDEBUG",
297: " if (yydebug)",
298: " printf(\"%sdebug: error recovery discarding state %d\
299: \\n\",",
300: " YYPREFIX, *yyssp);",
301: "#endif",
302: " if (yyssp <= yyss) goto yyabort;",
303: " --yyssp;",
304: " --yyvsp;",
305: " }",
306: " }",
307: " }",
308: " else",
309: " {",
310: " if (yychar == 0) goto yyabort;",
311: "#if YYDEBUG",
312: " if (yydebug)",
313: " {",
314: " yys = 0;",
315: " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
316: " if (!yys) yys = \"illegal-symbol\";",
317: " printf(\"%sdebug: state %d, error recovery discards token %d\
318: (%s)\\n\",",
319: " YYPREFIX, yystate, yychar, yys);",
320: " }",
321: "#endif",
322: " yychar = (-1);",
323: " goto yyloop;",
324: " }",
325: "yyreduce:",
326: "#if YYDEBUG",
327: " if (yydebug)",
328: " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
329: " YYPREFIX, yystate, yyn, yyrule[yyn]);",
330: "#endif",
331: " yym = yylen[yyn];",
332: " yyval = yyvsp[1-yym];",
333: " switch (yyn)",
334: " {",
335: 0
336: };
337:
338:
339: char *trailer[] =
340: {
341: " }",
342: " yyssp -= yym;",
343: " yystate = *yyssp;",
344: " yyvsp -= yym;",
345: " yym = yylhs[yyn];",
346: " if (yystate == 0 && yym == 0)",
347: " {",
348: "#if YYDEBUG",
349: " if (yydebug)",
350: " printf(\"%sdebug: after reduction, shifting from state 0 to\\",
351: " state %d\\n\", YYPREFIX, YYFINAL);",
352: "#endif",
353: " yystate = YYFINAL;",
354: " *++yyssp = YYFINAL;",
355: " *++yyvsp = yyval;",
356: " if (yychar < 0)",
357: " {",
358: " if ((yychar = yylex()) < 0) yychar = 0;",
359: "#if YYDEBUG",
360: " if (yydebug)",
361: " {",
362: " yys = 0;",
363: " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
364: " if (!yys) yys = \"illegal-symbol\";",
365: " printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
366: " YYPREFIX, YYFINAL, yychar, yys);",
367: " }",
368: "#endif",
369: " }",
370: " if (yychar == 0) goto yyaccept;",
371: " goto yyloop;",
372: " }",
373: " if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
374: " yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
375: " yystate = yytable[yyn];",
376: " else",
377: " yystate = yydgoto[yym];",
378: "#if YYDEBUG",
379: " if (yydebug)",
380: " printf(\"%sdebug: after reduction, shifting from state %d \\",
381: "to state %d\\n\", YYPREFIX, *yyssp, yystate);",
382: "#endif",
1.4 deraadt 383: " if (yyssp >= yysslim && yygrowstack())",
1.1 deraadt 384: " {",
385: " goto yyoverflow;",
386: " }",
387: " *++yyssp = yystate;",
388: " *++yyvsp = yyval;",
389: " goto yyloop;",
390: "yyoverflow:",
391: " yyerror(\"yacc stack overflow\");",
392: "yyabort:",
393: " return (1);",
394: "yyaccept:",
395: " return (0);",
396: "}",
397: 0
398: };
399:
400:
1.17 pvalchev 401: void
1.1 deraadt 402: write_section(section)
403: char *section[];
404: {
1.18 ! mpech 405: int c;
! 406: int i;
! 407: char *s;
! 408: FILE *f;
1.1 deraadt 409:
410: f = code_file;
1.17 pvalchev 411: for (i = 0; (s = section[i]); ++i)
1.1 deraadt 412: {
413: ++outline;
414: while (c = *s)
415: {
416: putc(c, f);
417: ++s;
418: }
419: putc('\n', f);
420: }
421: }