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