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