1 /* $OpenBSD: skeleton.c,v 1.40 2021/02/03 01:10:10 deraadt Exp $ */ 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. Neither the name of the University nor the names of its contributors 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 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 { 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 63 }; 64 65 66 char *tables[] = 67 { 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 82 }; 83 84 85 char *header[] = 86 { 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 "int yyparse(void);", 113 NULL 114 }; 115 116 117 char *body[] = 118 { 119 "/* allocate initial stack or double stack size, up to YYMAXDEPTH */", 120 "static int yygrowstack(void)", 121 "{", 122 " unsigned int newsize;", 123 " long sslen;", 124 " short *newss;", 125 " YYSTYPE *newvs;", 126 "", 127 " if ((newsize = yystacksize) == 0)", 128 " newsize = YYINITSTACKSIZE;", 129 " else if (newsize >= YYMAXDEPTH)", 130 " return -1;", 131 " else if ((newsize *= 2) > YYMAXDEPTH)", 132 " newsize = YYMAXDEPTH;", 133 " sslen = yyssp - yyss;", 134 "#ifdef SIZE_MAX", 135 "#define YY_SIZE_MAX SIZE_MAX", 136 "#else", 137 "#define YY_SIZE_MAX 0xffffffffU", 138 "#endif", 139 " if (newsize && YY_SIZE_MAX / newsize < sizeof *newss)", 140 " goto bail;", 141 " newss = (short *)realloc(yyss, newsize * sizeof *newss);", 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 = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs);", 149 " if (newvs == NULL)", 150 " goto bail;", 151 " yyvs = newvs;", 152 " yyvsp = newvs + sslen;", 153 " yystacksize = newsize;", 154 " yysslim = yyss + newsize - 1;", 155 " return 0;", 156 "bail:", 157 " if (yyss)", 158 " free(yyss);", 159 " if (yyvs)", 160 " free(yyvs);", 161 " yyss = yyssp = NULL;", 162 " yyvs = yyvsp = NULL;", 163 " yystacksize = 0;", 164 " return -1;", 165 "}", 166 "", 167 "#define YYABORT goto yyabort", 168 "#define YYREJECT goto yyabort", 169 "#define YYACCEPT goto yyaccept", 170 "#define YYERROR goto yyerrlab", 171 "int", 172 "yyparse(void)", 173 "{", 174 " int yym, yyn, yystate;", 175 "#if YYDEBUG", 176 " const char *yys;", 177 "", 178 " if ((yys = getenv(\"YYDEBUG\")))", 179 " {", 180 " yyn = *yys;", 181 " if (yyn >= '0' && yyn <= '9')", 182 " yydebug = yyn - '0';", 183 " }", 184 "#endif /* YYDEBUG */", 185 "", 186 " yynerrs = 0;", 187 " yyerrflag = 0;", 188 " yychar = (-1);", 189 "", 190 " if (yyss == NULL && yygrowstack()) goto yyoverflow;", 191 " yyssp = yyss;", 192 " yyvsp = yyvs;", 193 " *yyssp = yystate = 0;", 194 "", 195 "yyloop:", 196 " if ((yyn = yydefred[yystate]) != 0) goto yyreduce;", 197 " if (yychar < 0)", 198 " {", 199 " if ((yychar = yylex()) < 0) yychar = 0;", 200 "#if YYDEBUG", 201 " if (yydebug)", 202 " {", 203 " yys = 0;", 204 " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", 205 " if (!yys) yys = \"illegal-symbol\";", 206 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", 207 " YYPREFIX, yystate, yychar, yys);", 208 " }", 209 "#endif", 210 " }", 211 " if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&", 212 " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)", 213 " {", 214 "#if YYDEBUG", 215 " if (yydebug)", 216 " printf(\"%sdebug: state %d, shifting to state %d\\n\",", 217 " YYPREFIX, yystate, yytable[yyn]);", 218 "#endif", 219 " if (yyssp >= yysslim && yygrowstack())", 220 " {", 221 " goto yyoverflow;", 222 " }", 223 " *++yyssp = yystate = yytable[yyn];", 224 " *++yyvsp = yylval;", 225 " yychar = (-1);", 226 " if (yyerrflag > 0) --yyerrflag;", 227 " goto yyloop;", 228 " }", 229 " if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&", 230 " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)", 231 " {", 232 " yyn = yytable[yyn];", 233 " goto yyreduce;", 234 " }", 235 " if (yyerrflag) goto yyinrecovery;", 236 "#if defined(__GNUC__)", 237 " goto yynewerror;", 238 "#endif", 239 "yynewerror:", 240 " yyerror(\"syntax error\");", 241 "#if defined(__GNUC__)", 242 " goto yyerrlab;", 243 "#endif", 244 "yyerrlab:", 245 " ++yynerrs;", 246 "yyinrecovery:", 247 " if (yyerrflag < 3)", 248 " {", 249 " yyerrflag = 3;", 250 " for (;;)", 251 " {", 252 " if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&", 253 " yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)", 254 " {", 255 "#if YYDEBUG", 256 " if (yydebug)", 257 " printf(\"%sdebug: state %d, error recovery shifting\\", 258 " to state %d\\n\", YYPREFIX, *yyssp, yytable[yyn]);", 259 "#endif", 260 " if (yyssp >= yysslim && yygrowstack())", 261 " {", 262 " goto yyoverflow;", 263 " }", 264 " *++yyssp = yystate = yytable[yyn];", 265 " *++yyvsp = yylval;", 266 " goto yyloop;", 267 " }", 268 " else", 269 " {", 270 "#if YYDEBUG", 271 " if (yydebug)", 272 " printf(\"%sdebug: error recovery discarding state %d\ 273 \\n\",", 274 " YYPREFIX, *yyssp);", 275 "#endif", 276 " if (yyssp <= yyss) goto yyabort;", 277 " --yyssp;", 278 " --yyvsp;", 279 " }", 280 " }", 281 " }", 282 " else", 283 " {", 284 " if (yychar == 0) goto yyabort;", 285 "#if YYDEBUG", 286 " if (yydebug)", 287 " {", 288 " yys = 0;", 289 " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", 290 " if (!yys) yys = \"illegal-symbol\";", 291 " printf(\"%sdebug: state %d, error recovery discards token %d\ 292 (%s)\\n\",", 293 " YYPREFIX, yystate, yychar, yys);", 294 " }", 295 "#endif", 296 " yychar = (-1);", 297 " goto yyloop;", 298 " }", 299 "yyreduce:", 300 "#if YYDEBUG", 301 " if (yydebug)", 302 " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",", 303 " YYPREFIX, yystate, yyn, yyrule[yyn]);", 304 "#endif", 305 " yym = yylen[yyn];", 306 " if (yym)", 307 " yyval = yyvsp[1-yym];", 308 " else", 309 " memset(&yyval, 0, sizeof yyval);", 310 " switch (yyn)", 311 " {", 312 NULL 313 }; 314 315 316 char *trailer[] = 317 { 318 " }", 319 " yyssp -= yym;", 320 " yystate = *yyssp;", 321 " yyvsp -= yym;", 322 " yym = yylhs[yyn];", 323 " if (yystate == 0 && yym == 0)", 324 " {", 325 "#if YYDEBUG", 326 " if (yydebug)", 327 " printf(\"%sdebug: after reduction, shifting from state 0 to\\", 328 " state %d\\n\", YYPREFIX, YYFINAL);", 329 "#endif", 330 " yystate = YYFINAL;", 331 " *++yyssp = YYFINAL;", 332 " *++yyvsp = yyval;", 333 " if (yychar < 0)", 334 " {", 335 " if ((yychar = yylex()) < 0) yychar = 0;", 336 "#if YYDEBUG", 337 " if (yydebug)", 338 " {", 339 " yys = 0;", 340 " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", 341 " if (!yys) yys = \"illegal-symbol\";", 342 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", 343 " YYPREFIX, YYFINAL, yychar, yys);", 344 " }", 345 "#endif", 346 " }", 347 " if (yychar == 0) goto yyaccept;", 348 " goto yyloop;", 349 " }", 350 " if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&", 351 " yyn <= YYTABLESIZE && yycheck[yyn] == yystate)", 352 " yystate = yytable[yyn];", 353 " else", 354 " yystate = yydgoto[yym];", 355 "#if YYDEBUG", 356 " if (yydebug)", 357 " printf(\"%sdebug: after reduction, shifting from state %d \\", 358 "to state %d\\n\", YYPREFIX, *yyssp, yystate);", 359 "#endif", 360 " if (yyssp >= yysslim && yygrowstack())", 361 " {", 362 " goto yyoverflow;", 363 " }", 364 " *++yyssp = yystate;", 365 " *++yyvsp = yyval;", 366 " goto yyloop;", 367 "yyoverflow:", 368 " yyerror(\"yacc stack overflow\");", 369 "yyabort:", 370 " if (yyss)", 371 " free(yyss);", 372 " if (yyvs)", 373 " free(yyvs);", 374 " yyss = yyssp = NULL;", 375 " yyvs = yyvsp = NULL;", 376 " yystacksize = 0;", 377 " return (1);", 378 "yyaccept:", 379 " if (yyss)", 380 " free(yyss);", 381 " if (yyvs)", 382 " free(yyvs);", 383 " yyss = yyssp = NULL;", 384 " yyvs = yyvsp = NULL;", 385 " yystacksize = 0;", 386 " return (0);", 387 "}", 388 NULL 389 }; 390 391 392 void 393 write_section(char *section[]) 394 { 395 int i; 396 char *s; 397 398 for (i = 0; (s = section[i]); ++i) { 399 ++outline; 400 fputs(s, code_file); 401 putc('\n', code_file); 402 } 403 } 404