1 /* $NetBSD: yaccpar.c,v 1.5 2017/06/05 18:54:30 christos Exp $ */ 2 3 /* This file generated automatically using 4 * @Id: skel2c,v 1.4 2016/06/07 00:26:09 tom Exp @ 5 */ 6 7 /* @Id: yaccpar.skel,v 1.8 2016/12/02 21:44:42 tom Exp @ */ 8 9 #include "defs.h" 10 11 /* If the skeleton is changed, the banner should be changed so that */ 12 /* the altered version can be easily distinguished from the original. */ 13 /* */ 14 /* The #defines included with the banner are there because they are */ 15 /* useful in subsequent code. The macros #defined in the header or */ 16 /* the body either are not useful outside of semantic actions or */ 17 /* are conditional. */ 18 19 const char *const banner[] = 20 { 21 "/* original parser id follows */", 22 "/* yysccsid[] = \"@(#)yaccpar 1.9 (Berkeley) 02/21/93\" */", 23 "/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */", 24 "", 25 "#define YYBYACC 1", 26 CONCAT1("#define YYMAJOR ", YYMAJOR), 27 CONCAT1("#define YYMINOR ", YYMINOR), 28 #ifdef YYPATCH 29 CONCAT1("#define YYPATCH ", YYPATCH), 30 #endif 31 "", 32 "#define YYEMPTY (-1)", 33 "#define yyclearin (yychar = YYEMPTY)", 34 "#define yyerrok (yyerrflag = 0)", 35 "#define YYRECOVERING() (yyerrflag != 0)", 36 "#define YYENOMEM (-2)", 37 "#define YYEOF 0", 38 0 39 }; 40 41 const char *const xdecls[] = 42 { 43 "", 44 "extern int YYPARSE_DECL();", 45 0 46 }; 47 48 const char *const tables[] = 49 { 50 "extern YYINT yylhs[];", 51 "extern YYINT yylen[];", 52 "extern YYINT yydefred[];", 53 "extern YYINT yydgoto[];", 54 "extern YYINT yysindex[];", 55 "extern YYINT yyrindex[];", 56 "extern YYINT yygindex[];", 57 "extern YYINT yytable[];", 58 "extern YYINT yycheck[];", 59 "", 60 "#if YYDEBUG || defined(yytname)", 61 "extern char *yyname[];", 62 "#endif", 63 "#if YYDEBUG", 64 "extern char *yyrule[];", 65 "#endif", 66 0 67 }; 68 69 const char *const global_vars[] = 70 { 71 "", 72 "int yydebug;", 73 "int yynerrs;", 74 0 75 }; 76 77 const char *const impure_vars[] = 78 { 79 "", 80 "int yyerrflag;", 81 "int yychar;", 82 "YYSTYPE yyval;", 83 "YYSTYPE yylval;", 84 0 85 }; 86 87 const char *const hdr_defs[] = 88 { 89 "", 90 "/* define the initial stack-sizes */", 91 "#ifdef YYSTACKSIZE", 92 "#undef YYMAXDEPTH", 93 "#define YYMAXDEPTH YYSTACKSIZE", 94 "#else", 95 "#ifdef YYMAXDEPTH", 96 "#define YYSTACKSIZE YYMAXDEPTH", 97 "#else", 98 "#define YYSTACKSIZE 10000", 99 "#define YYMAXDEPTH 10000", 100 "#endif", 101 "#endif", 102 "", 103 "#define YYINITSTACKSIZE 200", 104 "", 105 "typedef struct {", 106 " unsigned stacksize;", 107 " YYINT *s_base;", 108 " YYINT *s_mark;", 109 " YYINT *s_last;", 110 " YYSTYPE *l_base;", 111 " YYSTYPE *l_mark;", 112 "} YYSTACKDATA;", 113 0 114 }; 115 116 const char *const hdr_vars[] = 117 { 118 "/* variables for the parser stack */", 119 "static YYSTACKDATA yystack;", 120 0 121 }; 122 123 const char *const body_vars[] = 124 { 125 " int yyerrflag;", 126 " int yychar;", 127 " YYSTYPE yyval;", 128 " YYSTYPE yylval;", 129 "", 130 " /* variables for the parser stack */", 131 " YYSTACKDATA yystack;", 132 0 133 }; 134 135 const char *const body_1[] = 136 { 137 "", 138 "#if YYDEBUG", 139 "#include <stdio.h> /* needed for printf */", 140 "#endif", 141 "", 142 "#include <stdlib.h> /* needed for malloc, etc */", 143 "#include <string.h> /* needed for memset */", 144 "", 145 "/* allocate initial stack or double stack size, up to YYMAXDEPTH */", 146 "static int yygrowstack(YYSTACKDATA *data)", 147 "{", 148 " int i;", 149 " unsigned newsize;", 150 " YYINT *newss;", 151 " YYSTYPE *newvs;", 152 "", 153 " if ((newsize = data->stacksize) == 0)", 154 " newsize = YYINITSTACKSIZE;", 155 " else if (newsize >= YYMAXDEPTH)", 156 " return YYENOMEM;", 157 " else if ((newsize *= 2) > YYMAXDEPTH)", 158 " newsize = YYMAXDEPTH;", 159 "", 160 " i = (int) (data->s_mark - data->s_base);", 161 " newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));", 162 " if (newss == 0)", 163 " return YYENOMEM;", 164 "", 165 " data->s_base = newss;", 166 " data->s_mark = newss + i;", 167 "", 168 " newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));", 169 " if (newvs == 0)", 170 " return YYENOMEM;", 171 "", 172 " data->l_base = newvs;", 173 " data->l_mark = newvs + i;", 174 "", 175 " data->stacksize = newsize;", 176 " data->s_last = data->s_base + newsize - 1;", 177 " return 0;", 178 "}", 179 "", 180 "#if YYPURE || defined(YY_NO_LEAKS)", 181 "static void yyfreestack(YYSTACKDATA *data)", 182 "{", 183 " free(data->s_base);", 184 " free(data->l_base);", 185 " memset(data, 0, sizeof(*data));", 186 "}", 187 "#else", 188 "#define yyfreestack(data) /* nothing */", 189 "#endif", 190 "", 191 "#define YYABORT goto yyabort", 192 "#define YYREJECT goto yyabort", 193 "#define YYACCEPT goto yyaccept", 194 "#define YYERROR goto yyerrlab", 195 "", 196 "int", 197 "YYPARSE_DECL()", 198 "{", 199 0 200 }; 201 202 const char *const body_2[] = 203 { 204 " int yym, yyn, yystate;", 205 "#if YYDEBUG", 206 " const char *yys;", 207 "", 208 " if ((yys = getenv(\"YYDEBUG\")) != 0)", 209 " {", 210 " yyn = *yys;", 211 " if (yyn >= '0' && yyn <= '9')", 212 " yydebug = yyn - '0';", 213 " }", 214 "#endif", 215 "", 216 0 217 }; 218 219 const char *const init_vars[] = 220 { 221 " memset(&yyval, 0, sizeof(yyval));", 222 " memset(&yylval, 0, sizeof(yylval));", 223 "", 224 0 225 }; 226 227 const char *const body_3[] = 228 { 229 " yym = 0;", 230 " yyn = 0;", 231 " yynerrs = 0;", 232 " yyerrflag = 0;", 233 " yychar = YYEMPTY;", 234 " yystate = 0;", 235 "", 236 "#if YYPURE", 237 " memset(&yystack, 0, sizeof(yystack));", 238 "#endif", 239 "", 240 " if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;", 241 " yystack.s_mark = yystack.s_base;", 242 " yystack.l_mark = yystack.l_base;", 243 " yystate = 0;", 244 " *yystack.s_mark = 0;", 245 "", 246 "yyloop:", 247 " if ((yyn = yydefred[yystate]) != 0) goto yyreduce;", 248 " if (yychar < 0)", 249 " {", 250 " yychar = YYLEX;", 251 " if (yychar < 0) yychar = YYEOF;", 252 "#if YYDEBUG", 253 " if (yydebug)", 254 " {", 255 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", 256 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", 257 " YYPREFIX, yystate, yychar, yys);", 258 " }", 259 "#endif", 260 " }", 261 " if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&", 262 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)", 263 " {", 264 "#if YYDEBUG", 265 " if (yydebug)", 266 " printf(\"%sdebug: state %d, shifting to state %d\\n\",", 267 " YYPREFIX, yystate, yytable[yyn]);", 268 "#endif", 269 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;", 270 " yystate = yytable[yyn];", 271 " *++yystack.s_mark = yytable[yyn];", 272 " *++yystack.l_mark = yylval;", 273 " yychar = YYEMPTY;", 274 " if (yyerrflag > 0) --yyerrflag;", 275 " goto yyloop;", 276 " }", 277 " if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&", 278 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)", 279 " {", 280 " yyn = yytable[yyn];", 281 " goto yyreduce;", 282 " }", 283 " if (yyerrflag != 0) goto yyinrecovery;", 284 "", 285 " YYERROR_CALL(\"syntax error\");", 286 "", 287 " goto yyerrlab; /* redundant goto avoids 'unused label' warning */", 288 "yyerrlab:", 289 " ++yynerrs;", 290 "", 291 "yyinrecovery:", 292 " if (yyerrflag < 3)", 293 " {", 294 " yyerrflag = 3;", 295 " for (;;)", 296 " {", 297 " if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&", 298 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)", 299 " {", 300 "#if YYDEBUG", 301 " if (yydebug)", 302 " printf(\"%sdebug: state %d, error recovery shifting\\", 303 " to state %d\\n\", YYPREFIX, *yystack.s_mark, yytable[yyn]);", 304 "#endif", 305 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;", 306 " yystate = yytable[yyn];", 307 " *++yystack.s_mark = yytable[yyn];", 308 " *++yystack.l_mark = yylval;", 309 " goto yyloop;", 310 " }", 311 " else", 312 " {", 313 "#if YYDEBUG", 314 " if (yydebug)", 315 " printf(\"%sdebug: error recovery discarding state %d\\n\",", 316 " YYPREFIX, *yystack.s_mark);", 317 "#endif", 318 " if (yystack.s_mark <= yystack.s_base) goto yyabort;", 319 " --yystack.s_mark;", 320 " --yystack.l_mark;", 321 " }", 322 " }", 323 " }", 324 " else", 325 " {", 326 " if (yychar == YYEOF) goto yyabort;", 327 "#if YYDEBUG", 328 " if (yydebug)", 329 " {", 330 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", 331 " printf(\"%sdebug: state %d, error recovery discards token %d (%s)\\n\",", 332 " YYPREFIX, yystate, yychar, yys);", 333 " }", 334 "#endif", 335 " yychar = YYEMPTY;", 336 " goto yyloop;", 337 " }", 338 "", 339 "yyreduce:", 340 "#if YYDEBUG", 341 " if (yydebug)", 342 " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",", 343 " YYPREFIX, yystate, yyn, yyrule[yyn]);", 344 "#endif", 345 " yym = yylen[yyn];", 346 " if (yym > 0)", 347 " yyval = yystack.l_mark[1-yym];", 348 " else", 349 " memset(&yyval, 0, sizeof yyval);", 350 "", 351 " switch (yyn)", 352 " {", 353 0 354 }; 355 356 const char *const trailer[] = 357 { 358 " }", 359 " yystack.s_mark -= yym;", 360 " yystate = *yystack.s_mark;", 361 " yystack.l_mark -= yym;", 362 " yym = yylhs[yyn];", 363 " if (yystate == 0 && yym == 0)", 364 " {", 365 "#if YYDEBUG", 366 " if (yydebug)", 367 " printf(\"%sdebug: after reduction, shifting from state 0 to\\", 368 " state %d\\n\", YYPREFIX, YYFINAL);", 369 "#endif", 370 " yystate = YYFINAL;", 371 " *++yystack.s_mark = YYFINAL;", 372 " *++yystack.l_mark = yyval;", 373 " if (yychar < 0)", 374 " {", 375 " yychar = YYLEX;", 376 " if (yychar < 0) yychar = YYEOF;", 377 "#if YYDEBUG", 378 " if (yydebug)", 379 " {", 380 " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", 381 " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", 382 " YYPREFIX, YYFINAL, yychar, yys);", 383 " }", 384 "#endif", 385 " }", 386 " if (yychar == YYEOF) goto yyaccept;", 387 " goto yyloop;", 388 " }", 389 " if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&", 390 " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)", 391 " yystate = yytable[yyn];", 392 " else", 393 " yystate = yydgoto[yym];", 394 "#if YYDEBUG", 395 " if (yydebug)", 396 " printf(\"%sdebug: after reduction, shifting from state %d \\", 397 "to state %d\\n\", YYPREFIX, *yystack.s_mark, yystate);", 398 "#endif", 399 " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;", 400 " *++yystack.s_mark = (YYINT) yystate;", 401 " *++yystack.l_mark = yyval;", 402 " goto yyloop;", 403 "", 404 "yyoverflow:", 405 " YYERROR_CALL(\"yacc stack overflow\");", 406 "", 407 "yyabort:", 408 " yyfreestack(&yystack);", 409 " return (1);", 410 "", 411 "yyaccept:", 412 " yyfreestack(&yystack);", 413 " return (0);", 414 "}", 415 0 416 }; 417 418 void 419 write_section(FILE * fp, const char *const section[]) 420 { 421 int i; 422 const char *s; 423 424 for (i = 0; (s = section[i]) != 0; ++i) 425 { 426 if (fp == code_file) 427 ++outline; 428 fprintf(fp, "%s\n", s); 429 } 430 } 431