1 /* This file generated automatically using 2 * @Id: skel2c,v 1.3 2014/04/06 19:48:04 tom Exp @ 3 */ 4 5 /* @Id: yaccpar.skel,v 1.7 2016/06/06 23:35:55 Tom.Shields 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 "int yydebug;", 71 "int yynerrs;", 72 0 73 }; 74 75 const char *const impure_vars[] = 76 { 77 "", 78 "int yyerrflag;", 79 "int yychar;", 80 "YYSTYPE yyval;", 81 "YYSTYPE yylval;", 82 0 83 }; 84 85 const char *const hdr_defs[] = 86 { 87 "", 88 "/* define the initial stack-sizes */", 89 "#ifdef YYSTACKSIZE", 90 "#undef YYMAXDEPTH", 91 "#define YYMAXDEPTH YYSTACKSIZE", 92 "#else", 93 "#ifdef YYMAXDEPTH", 94 "#define YYSTACKSIZE YYMAXDEPTH", 95 "#else", 96 "#define YYSTACKSIZE 10000", 97 "#define YYMAXDEPTH 10000", 98 "#endif", 99 "#endif", 100 "", 101 "#define YYINITSTACKSIZE 200", 102 "", 103 "typedef struct {", 104 " unsigned stacksize;", 105 " YYINT *s_base;", 106 " YYINT *s_mark;", 107 " YYINT *s_last;", 108 " YYSTYPE *l_base;", 109 " YYSTYPE *l_mark;", 110 "} YYSTACKDATA;", 111 0 112 }; 113 114 const char *const hdr_vars[] = 115 { 116 "/* variables for the parser stack */", 117 "static YYSTACKDATA yystack;", 118 0 119 }; 120 121 const char *const body_vars[] = 122 { 123 " int yyerrflag;", 124 " int yychar;", 125 " YYSTYPE yyval;", 126 " YYSTYPE yylval;", 127 "", 128 " /* variables for the parser stack */", 129 " YYSTACKDATA yystack;", 130 0 131 }; 132 133 const char *const body_1[] = 134 { 135 "", 136 "#if YYDEBUG", 137 "#include <stdio.h> /* needed for printf */", 138 "#endif", 139 "", 140 "#include <stdlib.h> /* needed for malloc, etc */", 141 "#include <string.h> /* needed for memset */", 142 "", 143 "/* allocate initial stack or double stack size, up to YYMAXDEPTH */", 144 "static int yygrowstack(YYSTACKDATA *data)", 145 "{", 146 " int i;", 147 " unsigned newsize;", 148 " YYINT *newss;", 149 " YYSTYPE *newvs;", 150 "", 151 " if ((newsize = data->stacksize) == 0)", 152 " newsize = YYINITSTACKSIZE;", 153 " else if (newsize >= YYMAXDEPTH)", 154 " return YYENOMEM;", 155 " else if ((newsize *= 2) > YYMAXDEPTH)", 156 " newsize = YYMAXDEPTH;", 157 "", 158 " i = (int) (data->s_mark - data->s_base);", 159 " newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));", 160 " if (newss == 0)", 161 " return YYENOMEM;", 162 "", 163 " data->s_base = newss;", 164 " data->s_mark = newss + i;", 165 "", 166 " newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));", 167 " if (newvs == 0)", 168 " return YYENOMEM;", 169 "", 170 " data->l_base = newvs;", 171 " data->l_mark = newvs + i;", 172 "", 173 " data->stacksize = newsize;", 174 " data->s_last = data->s_base + newsize - 1;", 175 " return 0;", 176 "}", 177 "", 178 "#if YYPURE || defined(YY_NO_LEAKS)", 179 "static void yyfreestack(YYSTACKDATA *data)", 180 "{", 181 " free(data->s_base);", 182 " free(data->l_base);", 183 " memset(data, 0, sizeof(*data));", 184 "}", 185 "#else", 186 "#define yyfreestack(data) /* nothing */", 187 "#endif", 188 "", 189 "#define YYABORT goto yyabort", 190 "#define YYREJECT goto yyabort", 191 "#define YYACCEPT goto yyaccept", 192 "#define YYERROR goto yyerrlab", 193 "", 194 "int", 195 "YYPARSE_DECL()", 196 "{", 197 0 198 }; 199 200 const char *const body_2[] = 201 { 202 " int yym, yyn, yystate;", 203 "#if YYDEBUG", 204 " const char *yys;", 205 "", 206 " if ((yys = getenv(\"YYDEBUG\")) != 0)", 207 " {", 208 " yyn = *yys;", 209 " if (yyn >= '0' && yyn <= '9')", 210 " yydebug = yyn - '0';", 211 " }", 212 "#endif", 213 "", 214 " yym = 0;", 215 " yyn = 0;", 216 " yynerrs = 0;", 217 " yyerrflag = 0;", 218 " yychar = YYEMPTY;", 219 " yystate = 0;", 220 "", 221 "#if YYPURE", 222 " memset(&yystack, 0, sizeof(yystack));", 223 "#endif", 224 "", 225 " if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;", 226 " yystack.s_mark = yystack.s_base;", 227 " yystack.l_mark = yystack.l_base;", 228 " yystate = 0;", 229 " *yystack.s_mark = 0;", 230 "", 231 "yyloop:", 232 " if ((yyn = yydefred[yystate]) != 0) goto yyreduce;", 233 " if (yychar < 0)", 234 " {", 235 " yychar = YYLEX;", 236 " if (yychar < 0) yychar = YYEOF;", 237 "#if YYDEBUG", 238 " if (yydebug)", 239 " {", 240 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", 241 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", 242 " YYPREFIX, yystate, yychar, yys);", 243 " }", 244 "#endif", 245 " }", 246 " if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&", 247 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)", 248 " {", 249 "#if YYDEBUG", 250 " if (yydebug)", 251 " printf(\"%sdebug: state %d, shifting to state %d\\n\",", 252 " YYPREFIX, yystate, yytable[yyn]);", 253 "#endif", 254 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;", 255 " yystate = yytable[yyn];", 256 " *++yystack.s_mark = yytable[yyn];", 257 " *++yystack.l_mark = yylval;", 258 " yychar = YYEMPTY;", 259 " if (yyerrflag > 0) --yyerrflag;", 260 " goto yyloop;", 261 " }", 262 " if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&", 263 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)", 264 " {", 265 " yyn = yytable[yyn];", 266 " goto yyreduce;", 267 " }", 268 " if (yyerrflag != 0) goto yyinrecovery;", 269 "", 270 " YYERROR_CALL(\"syntax error\");", 271 "", 272 " goto yyerrlab; /* redundant goto avoids 'unused label' warning */", 273 "yyerrlab:", 274 " ++yynerrs;", 275 "", 276 "yyinrecovery:", 277 " if (yyerrflag < 3)", 278 " {", 279 " yyerrflag = 3;", 280 " for (;;)", 281 " {", 282 " if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&", 283 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)", 284 " {", 285 "#if YYDEBUG", 286 " if (yydebug)", 287 " printf(\"%sdebug: state %d, error recovery shifting\\", 288 " to state %d\\n\", YYPREFIX, *yystack.s_mark, yytable[yyn]);", 289 "#endif", 290 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;", 291 " yystate = yytable[yyn];", 292 " *++yystack.s_mark = yytable[yyn];", 293 " *++yystack.l_mark = yylval;", 294 " goto yyloop;", 295 " }", 296 " else", 297 " {", 298 "#if YYDEBUG", 299 " if (yydebug)", 300 " printf(\"%sdebug: error recovery discarding state %d\\n\",", 301 " YYPREFIX, *yystack.s_mark);", 302 "#endif", 303 " if (yystack.s_mark <= yystack.s_base) goto yyabort;", 304 " --yystack.s_mark;", 305 " --yystack.l_mark;", 306 " }", 307 " }", 308 " }", 309 " else", 310 " {", 311 " if (yychar == YYEOF) goto yyabort;", 312 "#if YYDEBUG", 313 " if (yydebug)", 314 " {", 315 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", 316 " printf(\"%sdebug: state %d, error recovery discards token %d (%s)\\n\",", 317 " YYPREFIX, yystate, yychar, yys);", 318 " }", 319 "#endif", 320 " yychar = YYEMPTY;", 321 " goto yyloop;", 322 " }", 323 "", 324 "yyreduce:", 325 "#if YYDEBUG", 326 " if (yydebug)", 327 " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",", 328 " YYPREFIX, yystate, yyn, yyrule[yyn]);", 329 "#endif", 330 " yym = yylen[yyn];", 331 " if (yym > 0)", 332 " yyval = yystack.l_mark[1-yym];", 333 " else", 334 " memset(&yyval, 0, sizeof yyval);", 335 "", 336 " switch (yyn)", 337 " {", 338 0 339 }; 340 341 const char *const trailer[] = 342 { 343 " }", 344 " yystack.s_mark -= yym;", 345 " yystate = *yystack.s_mark;", 346 " yystack.l_mark -= yym;", 347 " yym = yylhs[yyn];", 348 " if (yystate == 0 && yym == 0)", 349 " {", 350 "#if YYDEBUG", 351 " if (yydebug)", 352 " printf(\"%sdebug: after reduction, shifting from state 0 to\\", 353 " state %d\\n\", YYPREFIX, YYFINAL);", 354 "#endif", 355 " yystate = YYFINAL;", 356 " *++yystack.s_mark = YYFINAL;", 357 " *++yystack.l_mark = yyval;", 358 " if (yychar < 0)", 359 " {", 360 " yychar = YYLEX;", 361 " if (yychar < 0) yychar = YYEOF;", 362 "#if YYDEBUG", 363 " if (yydebug)", 364 " {", 365 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", 366 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", 367 " YYPREFIX, YYFINAL, yychar, yys);", 368 " }", 369 "#endif", 370 " }", 371 " if (yychar == YYEOF) goto yyaccept;", 372 " goto yyloop;", 373 " }", 374 " if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&", 375 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)", 376 " yystate = yytable[yyn];", 377 " else", 378 " yystate = yydgoto[yym];", 379 "#if YYDEBUG", 380 " if (yydebug)", 381 " printf(\"%sdebug: after reduction, shifting from state %d \\", 382 "to state %d\\n\", YYPREFIX, *yystack.s_mark, yystate);", 383 "#endif", 384 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;", 385 " *++yystack.s_mark = (YYINT) yystate;", 386 " *++yystack.l_mark = yyval;", 387 " goto yyloop;", 388 "", 389 "yyoverflow:", 390 " YYERROR_CALL(\"yacc stack overflow\");", 391 "", 392 "yyabort:", 393 " yyfreestack(&yystack);", 394 " return (1);", 395 "", 396 "yyaccept:", 397 " yyfreestack(&yystack);", 398 " return (0);", 399 "}", 400 0 401 }; 402 403 void 404 write_section(FILE * fp, const char *const section[]) 405 { 406 int i; 407 const char *s; 408 409 for (i = 0; (s = section[i]) != 0; ++i) 410 { 411 if (fp == code_file) 412 ++outline; 413 fprintf(fp, "%s\n", s); 414 } 415 } 416