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