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