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