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