1 /* $NetBSD: quote_calc-s.tab.c,v 1.1.1.3 2016/01/09 21:59:45 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 1 9 #define YYMINOR 9 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 quote_calc_parse 21 #endif /* yyparse */ 22 23 #ifndef yylex 24 #define yylex quote_calc_lex 25 #endif /* yylex */ 26 27 #ifndef yyerror 28 #define yyerror quote_calc_error 29 #endif /* yyerror */ 30 31 #ifndef yychar 32 #define yychar quote_calc_char 33 #endif /* yychar */ 34 35 #ifndef yyval 36 #define yyval quote_calc_val 37 #endif /* yyval */ 38 39 #ifndef yylval 40 #define yylval quote_calc_lval 41 #endif /* yylval */ 42 43 #ifndef yydebug 44 #define yydebug quote_calc_debug 45 #endif /* yydebug */ 46 47 #ifndef yynerrs 48 #define yynerrs quote_calc_nerrs 49 #endif /* yynerrs */ 50 51 #ifndef yyerrflag 52 #define yyerrflag quote_calc_errflag 53 #endif /* yyerrflag */ 54 55 #ifndef yylhs 56 #define yylhs quote_calc_lhs 57 #endif /* yylhs */ 58 59 #ifndef yylen 60 #define yylen quote_calc_len 61 #endif /* yylen */ 62 63 #ifndef yydefred 64 #define yydefred quote_calc_defred 65 #endif /* yydefred */ 66 67 #ifndef yydgoto 68 #define yydgoto quote_calc_dgoto 69 #endif /* yydgoto */ 70 71 #ifndef yysindex 72 #define yysindex quote_calc_sindex 73 #endif /* yysindex */ 74 75 #ifndef yyrindex 76 #define yyrindex quote_calc_rindex 77 #endif /* yyrindex */ 78 79 #ifndef yygindex 80 #define yygindex quote_calc_gindex 81 #endif /* yygindex */ 82 83 #ifndef yytable 84 #define yytable quote_calc_table 85 #endif /* yytable */ 86 87 #ifndef yycheck 88 #define yycheck quote_calc_check 89 #endif /* yycheck */ 90 91 #ifndef yyname 92 #define yyname quote_calc_name 93 #endif /* yyname */ 94 95 #ifndef yyrule 96 #define yyrule quote_calc_rule 97 #endif /* yyrule */ 98 #define YYPREFIX "quote_calc_" 99 100 #define YYPURE 0 101 102 #line 2 "quote_calc.y" 103 # include <stdio.h> 104 # include <ctype.h> 105 106 int regs[26]; 107 int base; 108 109 int yylex(void); 110 static void yyerror(const char *s); 111 112 #line 111 "quote_calc-s.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(void) 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(void) 138 # define YYLEX yylex() 139 #endif 140 141 /* Parameters sent to yyerror. */ 142 #ifndef YYERROR_DECL 143 #define YYERROR_DECL() yyerror(const char *s) 144 #endif 145 #ifndef YYERROR_CALL 146 #define YYERROR_CALL(msg) yyerror(msg) 147 #endif 148 149 extern int YYPARSE_DECL(); 150 151 #define OP_ADD 257 152 #define OP_SUB 259 153 #define OP_MUL 261 154 #define OP_DIV 263 155 #define OP_MOD 265 156 #define OP_AND 267 157 #define DIGIT 269 158 #define LETTER 270 159 #define UMINUS 271 160 #define YYERRCODE 256 161 typedef short YYINT; 162 static const YYINT quote_calc_lhs[] = { -1, 163 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 164 2, 2, 2, 2, 2, 2, 3, 3, 165 }; 166 static const YYINT quote_calc_len[] = { 2, 167 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 168 3, 3, 3, 2, 1, 1, 1, 2, 169 }; 170 static const YYINT quote_calc_defred[] = { 1, 171 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 172 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 173 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 174 0, 0, 175 }; 176 static const YYINT quote_calc_dgoto[] = { 1, 177 7, 8, 9, 178 }; 179 static const YYINT quote_calc_sindex[] = { 0, 180 -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 181 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, 182 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, 183 -121, -243, 184 }; 185 static const YYINT quote_calc_rindex[] = { 0, 186 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 187 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 188 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 189 3, -4, 190 }; 191 static const YYINT quote_calc_gindex[] = { 0, 192 0, 42, 0, 193 }; 194 #define YYTABLESIZE 258 195 static const YYINT quote_calc_table[] = { 16, 196 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 197 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 198 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 199 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 200 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 201 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 202 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 207 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 208 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 210 0, 19, 0, 20, 0, 21, 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, 0, 0, 0, 216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 218 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 219 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 220 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 221 16, 15, 16, 15, 16, 15, 16, 15, 222 }; 223 static const YYINT quote_calc_check[] = { 10, 224 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 225 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 226 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 227 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, 228 -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, 229 -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 230 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, 235 -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, 236 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 237 -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, 238 -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, 244 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 245 -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 246 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 247 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 248 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 249 261, 261, 263, 263, 265, 265, 267, 267, 250 }; 251 #define YYFINAL 1 252 #ifndef YYDEBUG 253 #define YYDEBUG 0 254 #endif 255 #define YYMAXTOKEN 271 256 #define YYUNDFTOKEN 277 257 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 258 #if YYDEBUG 259 static const char *const quote_calc_name[] = { 260 261 "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, 262 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, 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, 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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0, 268 0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", 269 "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, 270 0,0,"illegal-symbol", 271 }; 272 static const char *const quote_calc_rule[] = { 273 "$accept : list", 274 "list :", 275 "list : list stat '\\n'", 276 "list : list error '\\n'", 277 "stat : expr", 278 "stat : LETTER '=' expr", 279 "expr : '(' expr ')'", 280 "expr : expr OP_ADD expr", 281 "expr : expr OP_SUB expr", 282 "expr : expr OP_MUL expr", 283 "expr : expr OP_DIV expr", 284 "expr : expr OP_MOD expr", 285 "expr : expr OP_AND expr", 286 "expr : expr '|' expr", 287 "expr : OP_SUB expr", 288 "expr : LETTER", 289 "expr : number", 290 "number : DIGIT", 291 "number : number DIGIT", 292 293 }; 294 #endif 295 296 int yydebug; 297 int yynerrs; 298 299 int yyerrflag; 300 int yychar; 301 YYSTYPE yyval; 302 YYSTYPE yylval; 303 304 /* define the initial stack-sizes */ 305 #ifdef YYSTACKSIZE 306 #undef YYMAXDEPTH 307 #define YYMAXDEPTH YYSTACKSIZE 308 #else 309 #ifdef YYMAXDEPTH 310 #define YYSTACKSIZE YYMAXDEPTH 311 #else 312 #define YYSTACKSIZE 10000 313 #define YYMAXDEPTH 10000 314 #endif 315 #endif 316 317 #define YYINITSTACKSIZE 200 318 319 typedef struct { 320 unsigned stacksize; 321 YYINT *s_base; 322 YYINT *s_mark; 323 YYINT *s_last; 324 YYSTYPE *l_base; 325 YYSTYPE *l_mark; 326 } YYSTACKDATA; 327 /* variables for the parser stack */ 328 static YYSTACKDATA yystack; 329 #line 73 "quote_calc.y" 330 /* start of programs */ 331 332 int 333 main (void) 334 { 335 while(!feof(stdin)) { 336 yyparse(); 337 } 338 return 0; 339 } 340 341 static void 342 yyerror(const char *s) 343 { 344 fprintf(stderr, "%s\n", s); 345 } 346 347 int 348 yylex(void) { 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'; 366 return ( DIGIT ); 367 } 368 return( c ); 369 } 370 #line 369 "quote_calc-s.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 yynerrs = 0; 446 yyerrflag = 0; 447 yychar = YYEMPTY; 448 yystate = 0; 449 450 #if YYPURE 451 memset(&yystack, 0, sizeof(yystack)); 452 #endif 453 454 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 455 yystack.s_mark = yystack.s_base; 456 yystack.l_mark = yystack.l_base; 457 yystate = 0; 458 *yystack.s_mark = 0; 459 460 yyloop: 461 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 462 if (yychar < 0) 463 { 464 if ((yychar = YYLEX) < 0) yychar = YYEOF; 465 #if YYDEBUG 466 if (yydebug) 467 { 468 yys = yyname[YYTRANSLATE(yychar)]; 469 printf("%sdebug: state %d, reading %d (%s)\n", 470 YYPREFIX, yystate, yychar, yys); 471 } 472 #endif 473 } 474 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 475 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 476 { 477 #if YYDEBUG 478 if (yydebug) 479 printf("%sdebug: state %d, shifting to state %d\n", 480 YYPREFIX, yystate, yytable[yyn]); 481 #endif 482 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 483 { 484 goto yyoverflow; 485 } 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]) && (yyn += yychar) >= 0 && 494 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 495 { 496 yyn = yytable[yyn]; 497 goto yyreduce; 498 } 499 if (yyerrflag) goto yyinrecovery; 500 501 YYERROR_CALL("syntax error"); 502 503 goto yyerrlab; 504 505 yyerrlab: 506 ++yynerrs; 507 508 yyinrecovery: 509 if (yyerrflag < 3) 510 { 511 yyerrflag = 3; 512 for (;;) 513 { 514 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 515 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 516 { 517 #if YYDEBUG 518 if (yydebug) 519 printf("%sdebug: state %d, error recovery shifting\ 520 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 521 #endif 522 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 523 { 524 goto yyoverflow; 525 } 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 yys = yyname[YYTRANSLATE(yychar)]; 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) 567 yyval = yystack.l_mark[1-yym]; 568 else 569 memset(&yyval, 0, sizeof yyval); 570 switch (yyn) 571 { 572 case 3: 573 #line 35 "quote_calc.y" 574 { yyerrok ; } 575 break; 576 case 4: 577 #line 39 "quote_calc.y" 578 { printf("%d\n",yystack.l_mark[0]);} 579 break; 580 case 5: 581 #line 41 "quote_calc.y" 582 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 583 break; 584 case 6: 585 #line 45 "quote_calc.y" 586 { yyval = yystack.l_mark[-1]; } 587 break; 588 case 7: 589 #line 47 "quote_calc.y" 590 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 591 break; 592 case 8: 593 #line 49 "quote_calc.y" 594 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 595 break; 596 case 9: 597 #line 51 "quote_calc.y" 598 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 599 break; 600 case 10: 601 #line 53 "quote_calc.y" 602 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 603 break; 604 case 11: 605 #line 55 "quote_calc.y" 606 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 607 break; 608 case 12: 609 #line 57 "quote_calc.y" 610 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 611 break; 612 case 13: 613 #line 59 "quote_calc.y" 614 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 615 break; 616 case 14: 617 #line 61 "quote_calc.y" 618 { yyval = - yystack.l_mark[0]; } 619 break; 620 case 15: 621 #line 63 "quote_calc.y" 622 { yyval = regs[yystack.l_mark[0]]; } 623 break; 624 case 17: 625 #line 68 "quote_calc.y" 626 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } 627 break; 628 case 18: 629 #line 70 "quote_calc.y" 630 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } 631 break; 632 #line 631 "quote_calc-s.tab.c" 633 } 634 yystack.s_mark -= yym; 635 yystate = *yystack.s_mark; 636 yystack.l_mark -= yym; 637 yym = yylhs[yyn]; 638 if (yystate == 0 && yym == 0) 639 { 640 #if YYDEBUG 641 if (yydebug) 642 printf("%sdebug: after reduction, shifting from state 0 to\ 643 state %d\n", YYPREFIX, YYFINAL); 644 #endif 645 yystate = YYFINAL; 646 *++yystack.s_mark = YYFINAL; 647 *++yystack.l_mark = yyval; 648 if (yychar < 0) 649 { 650 if ((yychar = YYLEX) < 0) yychar = YYEOF; 651 #if YYDEBUG 652 if (yydebug) 653 { 654 yys = yyname[YYTRANSLATE(yychar)]; 655 printf("%sdebug: state %d, reading %d (%s)\n", 656 YYPREFIX, YYFINAL, yychar, yys); 657 } 658 #endif 659 } 660 if (yychar == YYEOF) goto yyaccept; 661 goto yyloop; 662 } 663 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 664 yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 665 yystate = yytable[yyn]; 666 else 667 yystate = yydgoto[yym]; 668 #if YYDEBUG 669 if (yydebug) 670 printf("%sdebug: after reduction, shifting from state %d \ 671 to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 672 #endif 673 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 674 { 675 goto yyoverflow; 676 } 677 *++yystack.s_mark = (YYINT) yystate; 678 *++yystack.l_mark = yyval; 679 goto yyloop; 680 681 yyoverflow: 682 YYERROR_CALL("yacc stack overflow"); 683 684 yyabort: 685 yyfreestack(&yystack); 686 return (1); 687 688 yyaccept: 689 yyfreestack(&yystack); 690 return (0); 691 } 692