1 /* original parser id follows */ 2 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 4 5 #define YYBYACC 1 6 #define YYMAJOR 1 7 #define YYMINOR 9 8 #define YYCHECK "yyyymmdd" 9 10 #define YYEMPTY (-1) 11 #define yyclearin (yychar = YYEMPTY) 12 #define yyerrok (yyerrflag = 0) 13 #define YYRECOVERING() (yyerrflag != 0) 14 #define YYENOMEM (-2) 15 #define YYEOF 0 16 17 #ifndef yyparse 18 #define yyparse calc2_parse 19 #endif /* yyparse */ 20 21 #ifndef yylex 22 #define yylex calc2_lex 23 #endif /* yylex */ 24 25 #ifndef yyerror 26 #define yyerror calc2_error 27 #endif /* yyerror */ 28 29 #ifndef yychar 30 #define yychar calc2_char 31 #endif /* yychar */ 32 33 #ifndef yyval 34 #define yyval calc2_val 35 #endif /* yyval */ 36 37 #ifndef yylval 38 #define yylval calc2_lval 39 #endif /* yylval */ 40 41 #ifndef yydebug 42 #define yydebug calc2_debug 43 #endif /* yydebug */ 44 45 #ifndef yynerrs 46 #define yynerrs calc2_nerrs 47 #endif /* yynerrs */ 48 49 #ifndef yyerrflag 50 #define yyerrflag calc2_errflag 51 #endif /* yyerrflag */ 52 53 #ifndef yylhs 54 #define yylhs calc2_lhs 55 #endif /* yylhs */ 56 57 #ifndef yylen 58 #define yylen calc2_len 59 #endif /* yylen */ 60 61 #ifndef yydefred 62 #define yydefred calc2_defred 63 #endif /* yydefred */ 64 65 #ifndef yydgoto 66 #define yydgoto calc2_dgoto 67 #endif /* yydgoto */ 68 69 #ifndef yysindex 70 #define yysindex calc2_sindex 71 #endif /* yysindex */ 72 73 #ifndef yyrindex 74 #define yyrindex calc2_rindex 75 #endif /* yyrindex */ 76 77 #ifndef yygindex 78 #define yygindex calc2_gindex 79 #endif /* yygindex */ 80 81 #ifndef yytable 82 #define yytable calc2_table 83 #endif /* yytable */ 84 85 #ifndef yycheck 86 #define yycheck calc2_check 87 #endif /* yycheck */ 88 89 #ifndef yyname 90 #define yyname calc2_name 91 #endif /* yyname */ 92 93 #ifndef yyrule 94 #define yyrule calc2_rule 95 #endif /* yyrule */ 96 #define YYPREFIX "calc2_" 97 98 #define YYPURE 0 99 100 #line 7 "calc2.y" 101 # include <stdio.h> 102 # include <ctype.h> 103 104 #ifdef YYBISON 105 #define YYLEX_PARAM base 106 #define YYLEX_DECL() yylex(int *YYLEX_PARAM) 107 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) 108 int YYLEX_DECL(); 109 static void YYERROR_DECL(); 110 #endif 111 112 #line 113 "calc2.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(int regs[26], int *base) 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(int *base) 138 # define YYLEX yylex(base) 139 #endif 140 141 /* Parameters sent to yyerror. */ 142 #ifndef YYERROR_DECL 143 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) 144 #endif 145 #ifndef YYERROR_CALL 146 #define YYERROR_CALL(msg) yyerror(regs, base, 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 calc2_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 calc2_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 calc2_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 calc2_dgoto[] = { 1, 171 7, 8, 9, 172 }; 173 static const YYINT calc2_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 calc2_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 calc2_gindex[] = { 0, 186 0, 65, 0, 187 }; 188 #define YYTABLESIZE 220 189 static const YYINT calc2_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 calc2_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 calc2_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 calc2_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 int yydebug; 281 int yynerrs; 282 283 int yyerrflag; 284 int yychar; 285 YYSTYPE yyval; 286 YYSTYPE yylval; 287 288 /* define the initial stack-sizes */ 289 #ifdef YYSTACKSIZE 290 #undef YYMAXDEPTH 291 #define YYMAXDEPTH YYSTACKSIZE 292 #else 293 #ifdef YYMAXDEPTH 294 #define YYSTACKSIZE YYMAXDEPTH 295 #else 296 #define YYSTACKSIZE 10000 297 #define YYMAXDEPTH 10000 298 #endif 299 #endif 300 301 #define YYINITSTACKSIZE 200 302 303 typedef struct { 304 unsigned stacksize; 305 YYINT *s_base; 306 YYINT *s_mark; 307 YYINT *s_last; 308 YYSTYPE *l_base; 309 YYSTYPE *l_mark; 310 } YYSTACKDATA; 311 /* variables for the parser stack */ 312 static YYSTACKDATA yystack; 313 #line 73 "calc2.y" 314 /* start of programs */ 315 316 #ifdef YYBYACC 317 extern int YYLEX_DECL(); 318 #endif 319 320 int 321 main (void) 322 { 323 int regs[26]; 324 int base = 10; 325 326 while(!feof(stdin)) { 327 yyparse(regs, &base); 328 } 329 return 0; 330 } 331 332 #define UNUSED(x) ((void)(x)) 333 334 static void 335 YYERROR_DECL() 336 { 337 UNUSED(regs); /* %parse-param regs is not actually used here */ 338 UNUSED(base); /* %parse-param base is not actually used here */ 339 fprintf(stderr, "%s\n", s); 340 } 341 342 int 343 YYLEX_DECL() 344 { 345 /* lexical analysis routine */ 346 /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 347 /* return DIGIT for a digit, yylval = 0 through 9 */ 348 /* all other characters are returned immediately */ 349 350 int c; 351 352 while( (c=getchar()) == ' ' ) { /* skip blanks */ } 353 354 /* c is now nonblank */ 355 356 if( islower( c )) { 357 yylval = c - 'a'; 358 return ( LETTER ); 359 } 360 if( isdigit( c )) { 361 yylval = (c - '0') % (*base); 362 return ( DIGIT ); 363 } 364 return( c ); 365 } 366 #line 367 "calc2.tab.c" 367 368 #if YYDEBUG 369 #include <stdio.h> /* needed for printf */ 370 #endif 371 372 #include <stdlib.h> /* needed for malloc, etc */ 373 #include <string.h> /* needed for memset */ 374 375 /* allocate initial stack or double stack size, up to YYMAXDEPTH */ 376 static int yygrowstack(YYSTACKDATA *data) 377 { 378 int i; 379 unsigned newsize; 380 YYINT *newss; 381 YYSTYPE *newvs; 382 383 if ((newsize = data->stacksize) == 0) 384 newsize = YYINITSTACKSIZE; 385 else if (newsize >= YYMAXDEPTH) 386 return YYENOMEM; 387 else if ((newsize *= 2) > YYMAXDEPTH) 388 newsize = YYMAXDEPTH; 389 390 i = (int) (data->s_mark - data->s_base); 391 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 392 if (newss == 0) 393 return YYENOMEM; 394 395 data->s_base = newss; 396 data->s_mark = newss + i; 397 398 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 399 if (newvs == 0) 400 return YYENOMEM; 401 402 data->l_base = newvs; 403 data->l_mark = newvs + i; 404 405 data->stacksize = newsize; 406 data->s_last = data->s_base + newsize - 1; 407 return 0; 408 } 409 410 #if YYPURE || defined(YY_NO_LEAKS) 411 static void yyfreestack(YYSTACKDATA *data) 412 { 413 free(data->s_base); 414 free(data->l_base); 415 memset(data, 0, sizeof(*data)); 416 } 417 #else 418 #define yyfreestack(data) /* nothing */ 419 #endif 420 421 #define YYABORT goto yyabort 422 #define YYREJECT goto yyabort 423 #define YYACCEPT goto yyaccept 424 #define YYERROR goto yyerrlab 425 426 int 427 YYPARSE_DECL() 428 { 429 int yym, yyn, yystate; 430 #if YYDEBUG 431 const char *yys; 432 433 if ((yys = getenv("YYDEBUG")) != 0) 434 { 435 yyn = *yys; 436 if (yyn >= '0' && yyn <= '9') 437 yydebug = yyn - '0'; 438 } 439 #endif 440 441 yym = 0; 442 yyn = 0; 443 yynerrs = 0; 444 yyerrflag = 0; 445 yychar = YYEMPTY; 446 yystate = 0; 447 448 #if YYPURE 449 memset(&yystack, 0, sizeof(yystack)); 450 #endif 451 452 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 453 yystack.s_mark = yystack.s_base; 454 yystack.l_mark = yystack.l_base; 455 yystate = 0; 456 *yystack.s_mark = 0; 457 458 yyloop: 459 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 460 if (yychar < 0) 461 { 462 yychar = YYLEX; 463 if (yychar < 0) yychar = YYEOF; 464 #if YYDEBUG 465 if (yydebug) 466 { 467 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 468 printf("%sdebug: state %d, reading %d (%s)\n", 469 YYPREFIX, yystate, yychar, yys); 470 } 471 #endif 472 } 473 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 474 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 475 { 476 #if YYDEBUG 477 if (yydebug) 478 printf("%sdebug: state %d, shifting to state %d\n", 479 YYPREFIX, yystate, yytable[yyn]); 480 #endif 481 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 482 yystate = yytable[yyn]; 483 *++yystack.s_mark = yytable[yyn]; 484 *++yystack.l_mark = yylval; 485 yychar = YYEMPTY; 486 if (yyerrflag > 0) --yyerrflag; 487 goto yyloop; 488 } 489 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 490 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 491 { 492 yyn = yytable[yyn]; 493 goto yyreduce; 494 } 495 if (yyerrflag != 0) goto yyinrecovery; 496 497 YYERROR_CALL("syntax error"); 498 499 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 500 yyerrlab: 501 ++yynerrs; 502 503 yyinrecovery: 504 if (yyerrflag < 3) 505 { 506 yyerrflag = 3; 507 for (;;) 508 { 509 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 510 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 511 { 512 #if YYDEBUG 513 if (yydebug) 514 printf("%sdebug: state %d, error recovery shifting\ 515 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 516 #endif 517 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 518 yystate = yytable[yyn]; 519 *++yystack.s_mark = yytable[yyn]; 520 *++yystack.l_mark = yylval; 521 goto yyloop; 522 } 523 else 524 { 525 #if YYDEBUG 526 if (yydebug) 527 printf("%sdebug: error recovery discarding state %d\n", 528 YYPREFIX, *yystack.s_mark); 529 #endif 530 if (yystack.s_mark <= yystack.s_base) goto yyabort; 531 --yystack.s_mark; 532 --yystack.l_mark; 533 } 534 } 535 } 536 else 537 { 538 if (yychar == YYEOF) goto yyabort; 539 #if YYDEBUG 540 if (yydebug) 541 { 542 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 543 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 544 YYPREFIX, yystate, yychar, yys); 545 } 546 #endif 547 yychar = YYEMPTY; 548 goto yyloop; 549 } 550 551 yyreduce: 552 #if YYDEBUG 553 if (yydebug) 554 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 555 YYPREFIX, yystate, yyn, yyrule[yyn]); 556 #endif 557 yym = yylen[yyn]; 558 if (yym > 0) 559 yyval = yystack.l_mark[1-yym]; 560 else 561 memset(&yyval, 0, sizeof yyval); 562 563 switch (yyn) 564 { 565 case 3: 566 #line 35 "calc2.y" 567 { yyerrok ; } 568 break; 569 case 4: 570 #line 39 "calc2.y" 571 { printf("%d\n",yystack.l_mark[0]);} 572 break; 573 case 5: 574 #line 41 "calc2.y" 575 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 576 break; 577 case 6: 578 #line 45 "calc2.y" 579 { yyval = yystack.l_mark[-1]; } 580 break; 581 case 7: 582 #line 47 "calc2.y" 583 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 584 break; 585 case 8: 586 #line 49 "calc2.y" 587 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 588 break; 589 case 9: 590 #line 51 "calc2.y" 591 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 592 break; 593 case 10: 594 #line 53 "calc2.y" 595 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 596 break; 597 case 11: 598 #line 55 "calc2.y" 599 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 600 break; 601 case 12: 602 #line 57 "calc2.y" 603 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 604 break; 605 case 13: 606 #line 59 "calc2.y" 607 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 608 break; 609 case 14: 610 #line 61 "calc2.y" 611 { yyval = - yystack.l_mark[0]; } 612 break; 613 case 15: 614 #line 63 "calc2.y" 615 { yyval = regs[yystack.l_mark[0]]; } 616 break; 617 case 17: 618 #line 68 "calc2.y" 619 { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } 620 break; 621 case 18: 622 #line 70 "calc2.y" 623 { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } 624 break; 625 #line 626 "calc2.tab.c" 626 } 627 yystack.s_mark -= yym; 628 yystate = *yystack.s_mark; 629 yystack.l_mark -= yym; 630 yym = yylhs[yyn]; 631 if (yystate == 0 && yym == 0) 632 { 633 #if YYDEBUG 634 if (yydebug) 635 printf("%sdebug: after reduction, shifting from state 0 to\ 636 state %d\n", YYPREFIX, YYFINAL); 637 #endif 638 yystate = YYFINAL; 639 *++yystack.s_mark = YYFINAL; 640 *++yystack.l_mark = yyval; 641 if (yychar < 0) 642 { 643 yychar = YYLEX; 644 if (yychar < 0) yychar = YYEOF; 645 #if YYDEBUG 646 if (yydebug) 647 { 648 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 649 printf("%sdebug: state %d, reading %d (%s)\n", 650 YYPREFIX, YYFINAL, yychar, yys); 651 } 652 #endif 653 } 654 if (yychar == YYEOF) goto yyaccept; 655 goto yyloop; 656 } 657 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 658 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 659 yystate = yytable[yyn]; 660 else 661 yystate = yydgoto[yym]; 662 #if YYDEBUG 663 if (yydebug) 664 printf("%sdebug: after reduction, shifting from state %d \ 665 to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 666 #endif 667 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 668 *++yystack.s_mark = (YYINT) yystate; 669 *++yystack.l_mark = yyval; 670 goto yyloop; 671 672 yyoverflow: 673 YYERROR_CALL("yacc stack overflow"); 674 675 yyabort: 676 yyfreestack(&yystack); 677 return (1); 678 679 yyaccept: 680 yyfreestack(&yystack); 681 return (0); 682 } 683