1 /* 2 * Copyright (c) 1989 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Robert Paul Corbett. 7 * 8 * %sccs.include.redist.c% 9 */ 10 11 #ifndef lint 12 static char sccsid[] = "@(#)skeleton.c 5.8 (Berkeley) 04/29/95"; 13 #endif /* not lint */ 14 15 #include "defs.h" 16 17 /* The definition of yysccsid in the banner should be replaced with */ 18 /* a #pragma ident directive if the target C compiler supports */ 19 /* #pragma ident directives. */ 20 /* */ 21 /* If the skeleton is changed, the banner should be changed so that */ 22 /* the altered version can be easily distinguished from the original. */ 23 /* */ 24 /* The #defines included with the banner are there because they are */ 25 /* useful in subsequent code. The macros #defined in the header or */ 26 /* the body either are not useful outside of semantic actions or */ 27 /* are conditional. */ 28 29 char *banner[] = 30 { 31 "#ifndef lint", 32 "static char yysccsid[] = \"@(#)yaccpar 1.9 (Berkeley) 02/21/93\";", 33 "#endif", 34 "#include <stdlib.h>", 35 "#define YYBYACC 1", 36 "#define YYMAJOR 1", 37 "#define YYMINOR 9", 38 "#define yyclearin (yychar=(-1))", 39 "#define yyerrok (yyerrflag=0)", 40 "#define YYRECOVERING (yyerrflag!=0)", 41 0 42 }; 43 44 45 char *tables[] = 46 { 47 "extern short yylhs[];", 48 "extern short yylen[];", 49 "extern short yydefred[];", 50 "extern short yydgoto[];", 51 "extern short yysindex[];", 52 "extern short yyrindex[];", 53 "extern short yygindex[];", 54 "extern short yytable[];", 55 "extern short yycheck[];", 56 "#if YYDEBUG", 57 "extern char *yyname[];", 58 "extern char *yyrule[];", 59 "#endif", 60 0 61 }; 62 63 64 char *header[] = 65 { 66 "#ifdef YYSTACKSIZE", 67 "#undef YYMAXDEPTH", 68 "#define YYMAXDEPTH YYSTACKSIZE", 69 "#else", 70 "#ifdef YYMAXDEPTH", 71 "#define YYSTACKSIZE YYMAXDEPTH", 72 "#else", 73 "#define YYSTACKSIZE 10000", 74 "#define YYMAXDEPTH 10000", 75 "#endif", 76 "#endif", 77 "#define YYINITSTACKSIZE 200", 78 "int yydebug;", 79 "int yynerrs;", 80 "int yyerrflag;", 81 "int yychar;", 82 "short *yyssp;", 83 "YYSTYPE *yyvsp;", 84 "YYSTYPE yyval;", 85 "YYSTYPE yylval;", 86 "short *yyss;", 87 "short *yysslim;", 88 "YYSTYPE *yyvs;", 89 "int yystacksize;", 90 0 91 }; 92 93 94 char *body[] = 95 { 96 "/* allocate initial stack or double stack size, up to YYMAXDEPTH */", 97 "static int yygrowstack()", 98 "{", 99 " int newsize, i;", 100 " short *newss;", 101 " YYSTYPE *newvs;", 102 "", 103 " if ((newsize = yystacksize) == 0)", 104 " newsize = YYINITSTACKSIZE;", 105 " else if (newsize >= YYMAXDEPTH)", 106 " return -1;", 107 " else if ((newsize *= 2) > YYMAXDEPTH)", 108 " newsize = YYMAXDEPTH;", 109 " i = yyssp - yyss;", 110 " if ((newss = realloc(yyss, newsize * sizeof *newss)) == NULL)", 111 " return -1;", 112 " yyss = newss;", 113 " yyssp = newss + i;", 114 " if ((newvs = realloc(yyvs, newsize * sizeof *newvs)) == NULL)", 115 " return -1;", 116 " yyvs = newvs;", 117 " yyvsp = newvs + i;", 118 " yystacksize = newsize;", 119 " yysslim = yyss + newsize - 1;", 120 " return 0;", 121 "}", 122 "", 123 "#define YYABORT goto yyabort", 124 "#define YYREJECT goto yyabort", 125 "#define YYACCEPT goto yyaccept", 126 "#define YYERROR goto yyerrlab", 127 "int", 128 "yyparse()", 129 "{", 130 " register int yym, yyn, yystate;", 131 "#if YYDEBUG", 132 " register char *yys;", 133 " extern char *getenv();", 134 "", 135 " if (yys = getenv(\"YYDEBUG\"))", 136 " {", 137 " yyn = *yys;", 138 " if (yyn >= '0' && yyn <= '9')", 139 " yydebug = yyn - '0';", 140 " }", 141 "#endif", 142 "", 143 " yynerrs = 0;", 144 " yyerrflag = 0;", 145 " yychar = (-1);", 146 "", 147 " if (yyss == NULL && yygrowstack()) goto yyoverflow;", 148 " yyssp = yyss;", 149 " yyvsp = yyvs;", 150 " *yyssp = yystate = 0;", 151 "", 152 "yyloop:", 153 " if (yyn = yydefred[yystate]) goto yyreduce;", 154 " if (yychar < 0)", 155 " {", 156 " if ((yychar = yylex()) < 0) yychar = 0;", 157 "#if YYDEBUG", 158 " if (yydebug)", 159 " {", 160 " yys = 0;", 161 " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", 162 " if (!yys) yys = \"illegal-symbol\";", 163 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", 164 " YYPREFIX, yystate, yychar, yys);", 165 " }", 166 "#endif", 167 " }", 168 " if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&", 169 " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)", 170 " {", 171 "#if YYDEBUG", 172 " if (yydebug)", 173 " printf(\"%sdebug: state %d, shifting to state %d\\n\",", 174 " YYPREFIX, yystate, yytable[yyn]);", 175 "#endif", 176 " if (yyssp >= yysslim && yygrowstack())", 177 " {", 178 " goto yyoverflow;", 179 " }", 180 " *++yyssp = yystate = yytable[yyn];", 181 " *++yyvsp = yylval;", 182 " yychar = (-1);", 183 " if (yyerrflag > 0) --yyerrflag;", 184 " goto yyloop;", 185 " }", 186 " if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&", 187 " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)", 188 " {", 189 " yyn = yytable[yyn];", 190 " goto yyreduce;", 191 " }", 192 " if (yyerrflag) goto yyinrecovery;", 193 "#ifdef lint", 194 " goto yynewerror;", 195 "#endif", 196 "yynewerror:", 197 " yyerror(\"syntax error\");", 198 "#ifdef lint", 199 " goto yyerrlab;", 200 "#endif", 201 "yyerrlab:", 202 " ++yynerrs;", 203 "yyinrecovery:", 204 " if (yyerrflag < 3)", 205 " {", 206 " yyerrflag = 3;", 207 " for (;;)", 208 " {", 209 " if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&", 210 " yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)", 211 " {", 212 "#if YYDEBUG", 213 " if (yydebug)", 214 " printf(\"%sdebug: state %d, error recovery shifting\\", 215 " to state %d\\n\", YYPREFIX, *yyssp, yytable[yyn]);", 216 "#endif", 217 " if (yyssp >= yysslim && yygrowstack())", 218 " {", 219 " goto yyoverflow;", 220 " }", 221 " *++yyssp = yystate = yytable[yyn];", 222 " *++yyvsp = yylval;", 223 " goto yyloop;", 224 " }", 225 " else", 226 " {", 227 "#if YYDEBUG", 228 " if (yydebug)", 229 " printf(\"%sdebug: error recovery discarding state %d\ 230 \\n\",", 231 " YYPREFIX, *yyssp);", 232 "#endif", 233 " if (yyssp <= yyss) goto yyabort;", 234 " --yyssp;", 235 " --yyvsp;", 236 " }", 237 " }", 238 " }", 239 " else", 240 " {", 241 " if (yychar == 0) goto yyabort;", 242 "#if YYDEBUG", 243 " if (yydebug)", 244 " {", 245 " yys = 0;", 246 " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", 247 " if (!yys) yys = \"illegal-symbol\";", 248 " printf(\"%sdebug: state %d, error recovery discards token %d\ 249 (%s)\\n\",", 250 " YYPREFIX, yystate, yychar, yys);", 251 " }", 252 "#endif", 253 " yychar = (-1);", 254 " goto yyloop;", 255 " }", 256 "yyreduce:", 257 "#if YYDEBUG", 258 " if (yydebug)", 259 " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",", 260 " YYPREFIX, yystate, yyn, yyrule[yyn]);", 261 "#endif", 262 " yym = yylen[yyn];", 263 " yyval = yyvsp[1-yym];", 264 " switch (yyn)", 265 " {", 266 0 267 }; 268 269 270 char *trailer[] = 271 { 272 " }", 273 " yyssp -= yym;", 274 " yystate = *yyssp;", 275 " yyvsp -= yym;", 276 " yym = yylhs[yyn];", 277 " if (yystate == 0 && yym == 0)", 278 " {", 279 "#if YYDEBUG", 280 " if (yydebug)", 281 " printf(\"%sdebug: after reduction, shifting from state 0 to\\", 282 " state %d\\n\", YYPREFIX, YYFINAL);", 283 "#endif", 284 " yystate = YYFINAL;", 285 " *++yyssp = YYFINAL;", 286 " *++yyvsp = yyval;", 287 " if (yychar < 0)", 288 " {", 289 " if ((yychar = yylex()) < 0) yychar = 0;", 290 "#if YYDEBUG", 291 " if (yydebug)", 292 " {", 293 " yys = 0;", 294 " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", 295 " if (!yys) yys = \"illegal-symbol\";", 296 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", 297 " YYPREFIX, YYFINAL, yychar, yys);", 298 " }", 299 "#endif", 300 " }", 301 " if (yychar == 0) goto yyaccept;", 302 " goto yyloop;", 303 " }", 304 " if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&", 305 " yyn <= YYTABLESIZE && yycheck[yyn] == yystate)", 306 " yystate = yytable[yyn];", 307 " else", 308 " yystate = yydgoto[yym];", 309 "#if YYDEBUG", 310 " if (yydebug)", 311 " printf(\"%sdebug: after reduction, shifting from state %d \\", 312 "to state %d\\n\", YYPREFIX, *yyssp, yystate);", 313 "#endif", 314 " if (yyssp >= yysslim && yygrowstack())", 315 " {", 316 " goto yyoverflow;", 317 " }", 318 " *++yyssp = yystate;", 319 " *++yyvsp = yyval;", 320 " goto yyloop;", 321 "yyoverflow:", 322 " yyerror(\"yacc stack overflow\");", 323 "yyabort:", 324 " return (1);", 325 "yyaccept:", 326 " return (0);", 327 "}", 328 0 329 }; 330 331 332 write_section(section) 333 char *section[]; 334 { 335 register int c; 336 register int i; 337 register char *s; 338 register FILE *f; 339 340 f = code_file; 341 for (i = 0; s = section[i]; ++i) 342 { 343 ++outline; 344 while (c = *s) 345 { 346 putc(c, f); 347 ++s; 348 } 349 putc('\n', f); 350 } 351 } 352