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