1 /* $NetBSD: calc.tab.c,v 1.5 2024/09/14 21:29:04 christos Exp $ */ 2 3 /* original parser id follows */ 4 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 6 7 #define YYBYACC 1 8 #define YYMAJOR 2 9 #define YYMINOR 0 10 #define YYCHECK "yyyymmdd" 11 12 #define YYEMPTY (-1) 13 #define yyclearin (yychar = YYEMPTY) 14 #define yyerrok (yyerrflag = 0) 15 #define YYRECOVERING() (yyerrflag != 0) 16 #define YYENOMEM (-2) 17 #define YYEOF 0 18 19 #ifndef yyparse 20 #define yyparse calc_parse 21 #endif /* yyparse */ 22 23 #ifndef yylex 24 #define yylex calc_lex 25 #endif /* yylex */ 26 27 #ifndef yyerror 28 #define yyerror calc_error 29 #endif /* yyerror */ 30 31 #ifndef yychar 32 #define yychar calc_char 33 #endif /* yychar */ 34 35 #ifndef yyval 36 #define yyval calc_val 37 #endif /* yyval */ 38 39 #ifndef yylval 40 #define yylval calc_lval 41 #endif /* yylval */ 42 43 #ifndef yydebug 44 #define yydebug calc_debug 45 #endif /* yydebug */ 46 47 #ifndef yynerrs 48 #define yynerrs calc_nerrs 49 #endif /* yynerrs */ 50 51 #ifndef yyerrflag 52 #define yyerrflag calc_errflag 53 #endif /* yyerrflag */ 54 55 #ifndef yylhs 56 #define yylhs calc_lhs 57 #endif /* yylhs */ 58 59 #ifndef yylen 60 #define yylen calc_len 61 #endif /* yylen */ 62 63 #ifndef yydefred 64 #define yydefred calc_defred 65 #endif /* yydefred */ 66 67 #ifndef yydgoto 68 #define yydgoto calc_dgoto 69 #endif /* yydgoto */ 70 71 #ifndef yysindex 72 #define yysindex calc_sindex 73 #endif /* yysindex */ 74 75 #ifndef yyrindex 76 #define yyrindex calc_rindex 77 #endif /* yyrindex */ 78 79 #ifndef yygindex 80 #define yygindex calc_gindex 81 #endif /* yygindex */ 82 83 #ifndef yytable 84 #define yytable calc_table 85 #endif /* yytable */ 86 87 #ifndef yycheck 88 #define yycheck calc_check 89 #endif /* yycheck */ 90 91 #ifndef yyname 92 #define yyname calc_name 93 #endif /* yyname */ 94 95 #ifndef yyrule 96 #define yyrule calc_rule 97 #endif /* yyrule */ 98 #define YYPREFIX "calc_" 99 100 #define YYPURE 0 101 102 #line 2 "calc.y" 103 # include <stdio.h> 104 # include <ctype.h> 105 106 int regs[26]; 107 int base; 108 109 extern int yylex(void); 110 static void yyerror(const char *s); 111 112 #line 111 "calc.tab.c" 113 114 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) 115 /* Default: YYSTYPE is the semantic value type. */ 116 typedef int YYSTYPE; 117 # define YYSTYPE_IS_DECLARED 1 118 #endif 119 120 /* compatibility with bison */ 121 #ifdef YYPARSE_PARAM 122 /* compatibility with FreeBSD */ 123 # ifdef YYPARSE_PARAM_TYPE 124 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 125 # else 126 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 127 # endif 128 #else 129 # define YYPARSE_DECL() yyparse(void) 130 #endif 131 132 /* Parameters sent to lex. */ 133 #ifdef YYLEX_PARAM 134 # define YYLEX_DECL() yylex(void *YYLEX_PARAM) 135 # define YYLEX yylex(YYLEX_PARAM) 136 #else 137 # define YYLEX_DECL() yylex(void) 138 # define YYLEX yylex() 139 #endif 140 141 /* Parameters sent to yyerror. */ 142 #ifndef YYERROR_DECL 143 #define YYERROR_DECL() yyerror(const char *s) 144 #endif 145 #ifndef YYERROR_CALL 146 #define YYERROR_CALL(msg) yyerror(msg) 147 #endif 148 149 extern int YYPARSE_DECL(); 150 151 #define DIGIT 257 152 #define LETTER 258 153 #define UMINUS 259 154 #define YYERRCODE 256 155 typedef int YYINT; 156 static const YYINT calc_lhs[] = { -1, 157 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 158 2, 2, 2, 2, 2, 2, 3, 3, 159 }; 160 static const YYINT calc_len[] = { 2, 161 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 162 3, 3, 3, 2, 1, 1, 1, 2, 163 }; 164 static const YYINT calc_defred[] = { 1, 165 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 166 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 167 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 168 10, 11, 169 }; 170 static const YYINT calc_dgoto[] = { 1, 171 7, 8, 9, 172 }; 173 static const YYINT calc_sindex[] = { 0, 174 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, 175 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, 176 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 177 0, 0, 178 }; 179 static const YYINT calc_rindex[] = { 0, 180 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 181 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 183 0, 0, 184 }; 185 static const YYINT calc_gindex[] = { 0, 186 0, 65, 0, 187 }; 188 #define YYTABLESIZE 220 189 static const YYINT calc_table[] = { 6, 190 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 191 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 192 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 193 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 194 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 195 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 196 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 197 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 198 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 199 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 200 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 201 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 202 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 203 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 204 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 205 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, 212 }; 213 static const YYINT calc_check[] = { 40, 214 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 215 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, 216 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, 217 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, 218 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 219 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, 220 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 221 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 222 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, 223 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, 224 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, 225 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, 226 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, 227 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, 228 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, 229 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 230 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 231 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 232 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 234 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 235 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, 236 }; 237 #define YYFINAL 1 238 #ifndef YYDEBUG 239 #define YYDEBUG 0 240 #endif 241 #define YYMAXTOKEN 259 242 #define YYUNDFTOKEN 265 243 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 244 #if YYDEBUG 245 static const char *const calc_name[] = { 246 247 "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 248 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 249 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 250 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 251 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 252 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 253 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 254 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", 255 }; 256 static const char *const calc_rule[] = { 257 "$accept : list", 258 "list :", 259 "list : list stat '\\n'", 260 "list : list error '\\n'", 261 "stat : expr", 262 "stat : LETTER '=' expr", 263 "expr : '(' expr ')'", 264 "expr : expr '+' expr", 265 "expr : expr '-' expr", 266 "expr : expr '*' expr", 267 "expr : expr '/' expr", 268 "expr : expr '%' expr", 269 "expr : expr '&' expr", 270 "expr : expr '|' expr", 271 "expr : '-' expr", 272 "expr : LETTER", 273 "expr : number", 274 "number : DIGIT", 275 "number : number DIGIT", 276 277 }; 278 #endif 279 280 #if YYDEBUG 281 int yydebug; 282 #endif 283 284 int yyerrflag; 285 int yychar; 286 YYSTYPE yyval; 287 YYSTYPE yylval; 288 int yynerrs; 289 290 /* define the initial stack-sizes */ 291 #ifdef YYSTACKSIZE 292 #undef YYMAXDEPTH 293 #define YYMAXDEPTH YYSTACKSIZE 294 #else 295 #ifdef YYMAXDEPTH 296 #define YYSTACKSIZE YYMAXDEPTH 297 #else 298 #define YYSTACKSIZE 10000 299 #define YYMAXDEPTH 10000 300 #endif 301 #endif 302 303 #define YYINITSTACKSIZE 200 304 305 typedef struct { 306 unsigned stacksize; 307 YYINT *s_base; 308 YYINT *s_mark; 309 YYINT *s_last; 310 YYSTYPE *l_base; 311 YYSTYPE *l_mark; 312 } YYSTACKDATA; 313 /* variables for the parser stack */ 314 static YYSTACKDATA yystack; 315 #line 66 "calc.y" 316 /* start of programs */ 317 318 int 319 main (void) 320 { 321 while(!feof(stdin)) { 322 yyparse(); 323 } 324 return 0; 325 } 326 327 static void 328 yyerror(const char *s) 329 { 330 fprintf(stderr, "%s\n", s); 331 } 332 333 int 334 yylex(void) 335 { 336 /* lexical analysis routine */ 337 /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 338 /* return DIGIT for a digit, yylval = 0 through 9 */ 339 /* all other characters are returned immediately */ 340 341 int c; 342 343 while( (c=getchar()) == ' ' ) { /* skip blanks */ } 344 345 /* c is now nonblank */ 346 347 if( islower( c )) { 348 yylval = c - 'a'; 349 return ( LETTER ); 350 } 351 if( isdigit( c )) { 352 yylval = c - '0'; 353 return ( DIGIT ); 354 } 355 return( c ); 356 } 357 #line 356 "calc.tab.c" 358 359 #if YYDEBUG 360 #include <stdio.h> /* needed for printf */ 361 #endif 362 363 #include <stdlib.h> /* needed for malloc, etc */ 364 #include <string.h> /* needed for memset */ 365 366 /* allocate initial stack or double stack size, up to YYMAXDEPTH */ 367 static int yygrowstack(YYSTACKDATA *data) 368 { 369 int i; 370 unsigned newsize; 371 YYINT *newss; 372 YYSTYPE *newvs; 373 374 if ((newsize = data->stacksize) == 0) 375 newsize = YYINITSTACKSIZE; 376 else if (newsize >= YYMAXDEPTH) 377 return YYENOMEM; 378 else if ((newsize *= 2) > YYMAXDEPTH) 379 newsize = YYMAXDEPTH; 380 381 i = (int) (data->s_mark - data->s_base); 382 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 383 if (newss == 0) 384 return YYENOMEM; 385 386 data->s_base = newss; 387 data->s_mark = newss + i; 388 389 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 390 if (newvs == 0) 391 return YYENOMEM; 392 393 data->l_base = newvs; 394 data->l_mark = newvs + i; 395 396 data->stacksize = newsize; 397 data->s_last = data->s_base + newsize - 1; 398 return 0; 399 } 400 401 #if YYPURE || defined(YY_NO_LEAKS) 402 static void yyfreestack(YYSTACKDATA *data) 403 { 404 free(data->s_base); 405 free(data->l_base); 406 memset(data, 0, sizeof(*data)); 407 } 408 #else 409 #define yyfreestack(data) /* nothing */ 410 #endif 411 412 #define YYABORT goto yyabort 413 #define YYREJECT goto yyabort 414 #define YYACCEPT goto yyaccept 415 #define YYERROR goto yyerrlab 416 417 int 418 YYPARSE_DECL() 419 { 420 int yym, yyn, yystate; 421 #if YYDEBUG 422 const char *yys; 423 424 if ((yys = getenv("YYDEBUG")) != 0) 425 { 426 yyn = *yys; 427 if (yyn >= '0' && yyn <= '9') 428 yydebug = yyn - '0'; 429 } 430 #endif 431 432 /* yym is set below */ 433 /* yyn is set below */ 434 yynerrs = 0; 435 yyerrflag = 0; 436 yychar = YYEMPTY; 437 yystate = 0; 438 439 #if YYPURE 440 memset(&yystack, 0, sizeof(yystack)); 441 #endif 442 443 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 444 yystack.s_mark = yystack.s_base; 445 yystack.l_mark = yystack.l_base; 446 yystate = 0; 447 *yystack.s_mark = 0; 448 449 yyloop: 450 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 451 if (yychar < 0) 452 { 453 yychar = YYLEX; 454 if (yychar < 0) yychar = YYEOF; 455 #if YYDEBUG 456 if (yydebug) 457 { 458 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 459 printf("%sdebug: state %d, reading %d (%s)\n", 460 YYPREFIX, yystate, yychar, yys); 461 } 462 #endif 463 } 464 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 465 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 466 { 467 #if YYDEBUG 468 if (yydebug) 469 printf("%sdebug: state %d, shifting to state %d\n", 470 YYPREFIX, yystate, yytable[yyn]); 471 #endif 472 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 473 yystate = yytable[yyn]; 474 *++yystack.s_mark = yytable[yyn]; 475 *++yystack.l_mark = yylval; 476 yychar = YYEMPTY; 477 if (yyerrflag > 0) --yyerrflag; 478 goto yyloop; 479 } 480 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 481 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 482 { 483 yyn = yytable[yyn]; 484 goto yyreduce; 485 } 486 if (yyerrflag != 0) goto yyinrecovery; 487 488 YYERROR_CALL("syntax error"); 489 490 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 491 yyerrlab: 492 ++yynerrs; 493 494 yyinrecovery: 495 if (yyerrflag < 3) 496 { 497 yyerrflag = 3; 498 for (;;) 499 { 500 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 501 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 502 { 503 #if YYDEBUG 504 if (yydebug) 505 printf("%sdebug: state %d, error recovery shifting\ 506 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 507 #endif 508 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 509 yystate = yytable[yyn]; 510 *++yystack.s_mark = yytable[yyn]; 511 *++yystack.l_mark = yylval; 512 goto yyloop; 513 } 514 else 515 { 516 #if YYDEBUG 517 if (yydebug) 518 printf("%sdebug: error recovery discarding state %d\n", 519 YYPREFIX, *yystack.s_mark); 520 #endif 521 if (yystack.s_mark <= yystack.s_base) goto yyabort; 522 --yystack.s_mark; 523 --yystack.l_mark; 524 } 525 } 526 } 527 else 528 { 529 if (yychar == YYEOF) goto yyabort; 530 #if YYDEBUG 531 if (yydebug) 532 { 533 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 534 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 535 YYPREFIX, yystate, yychar, yys); 536 } 537 #endif 538 yychar = YYEMPTY; 539 goto yyloop; 540 } 541 542 yyreduce: 543 #if YYDEBUG 544 if (yydebug) 545 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 546 YYPREFIX, yystate, yyn, yyrule[yyn]); 547 #endif 548 yym = yylen[yyn]; 549 if (yym > 0) 550 yyval = yystack.l_mark[1-yym]; 551 else 552 memset(&yyval, 0, sizeof yyval); 553 554 switch (yyn) 555 { 556 case 3: 557 #line 28 "calc.y" 558 { yyerrok ; } 559 #line 558 "calc.tab.c" 560 break; 561 case 4: 562 #line 32 "calc.y" 563 { printf("%d\n",yystack.l_mark[0]);} 564 #line 563 "calc.tab.c" 565 break; 566 case 5: 567 #line 34 "calc.y" 568 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 569 #line 568 "calc.tab.c" 570 break; 571 case 6: 572 #line 38 "calc.y" 573 { yyval = yystack.l_mark[-1]; } 574 #line 573 "calc.tab.c" 575 break; 576 case 7: 577 #line 40 "calc.y" 578 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 579 #line 578 "calc.tab.c" 580 break; 581 case 8: 582 #line 42 "calc.y" 583 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 584 #line 583 "calc.tab.c" 585 break; 586 case 9: 587 #line 44 "calc.y" 588 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 589 #line 588 "calc.tab.c" 590 break; 591 case 10: 592 #line 46 "calc.y" 593 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 594 #line 593 "calc.tab.c" 595 break; 596 case 11: 597 #line 48 "calc.y" 598 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 599 #line 598 "calc.tab.c" 600 break; 601 case 12: 602 #line 50 "calc.y" 603 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 604 #line 603 "calc.tab.c" 605 break; 606 case 13: 607 #line 52 "calc.y" 608 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 609 #line 608 "calc.tab.c" 610 break; 611 case 14: 612 #line 54 "calc.y" 613 { yyval = - yystack.l_mark[0]; } 614 #line 613 "calc.tab.c" 615 break; 616 case 15: 617 #line 56 "calc.y" 618 { yyval = regs[yystack.l_mark[0]]; } 619 #line 618 "calc.tab.c" 620 break; 621 case 17: 622 #line 61 "calc.y" 623 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } 624 #line 623 "calc.tab.c" 625 break; 626 case 18: 627 #line 63 "calc.y" 628 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } 629 #line 628 "calc.tab.c" 630 break; 631 #line 630 "calc.tab.c" 632 } 633 yystack.s_mark -= yym; 634 yystate = *yystack.s_mark; 635 yystack.l_mark -= yym; 636 yym = yylhs[yyn]; 637 if (yystate == 0 && yym == 0) 638 { 639 #if YYDEBUG 640 if (yydebug) 641 printf("%sdebug: after reduction, shifting from state 0 to\ 642 state %d\n", YYPREFIX, YYFINAL); 643 #endif 644 yystate = YYFINAL; 645 *++yystack.s_mark = YYFINAL; 646 *++yystack.l_mark = yyval; 647 if (yychar < 0) 648 { 649 yychar = YYLEX; 650 if (yychar < 0) yychar = YYEOF; 651 #if YYDEBUG 652 if (yydebug) 653 { 654 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 655 printf("%sdebug: state %d, reading %d (%s)\n", 656 YYPREFIX, YYFINAL, yychar, yys); 657 } 658 #endif 659 } 660 if (yychar == YYEOF) goto yyaccept; 661 goto yyloop; 662 } 663 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 664 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 665 yystate = yytable[yyn]; 666 else 667 yystate = yydgoto[yym]; 668 #if YYDEBUG 669 if (yydebug) 670 printf("%sdebug: after reduction, shifting from state %d \ 671 to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 672 #endif 673 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 674 *++yystack.s_mark = (YYINT) yystate; 675 *++yystack.l_mark = yyval; 676 goto yyloop; 677 678 yyoverflow: 679 YYERROR_CALL("yacc stack overflow"); 680 681 yyabort: 682 yyfreestack(&yystack); 683 return (1); 684 685 yyaccept: 686 yyfreestack(&yystack); 687 return (0); 688 } 689