15992SN/A/* original parser id follows */ 25992SN/A/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 35992SN/A/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 45992SN/A 55992SN/A#define YYBYACC 1 65992SN/A#define YYMAJOR 1 75992SN/A#define YYMINOR 9 85992SN/A#define YYCHECK "yyyymmdd" 95992SN/A 105992SN/A#define YYEMPTY (-1) 115992SN/A#define yyclearin (yychar = YYEMPTY) 125992SN/A#define yyerrok (yyerrflag = 0) 135992SN/A#define YYRECOVERING() (yyerrflag != 0) 145992SN/A#define YYENOMEM (-2) 155992SN/A#define YYEOF 0 165992SN/A 175992SN/A#ifndef yyparse 185992SN/A#define yyparse calc_parse 195992SN/A#endif /* yyparse */ 205992SN/A 215992SN/A#ifndef yylex 225992SN/A#define yylex calc_lex 235992SN/A#endif /* yylex */ 245992SN/A 255992SN/A#ifndef yyerror 265992SN/A#define yyerror calc_error 275992SN/A#endif /* yyerror */ 285992SN/A 295992SN/A#ifndef yychar 305992SN/A#define yychar calc_char 315992SN/A#endif /* yychar */ 325992SN/A 335992SN/A#ifndef yyval 345992SN/A#define yyval calc_val 355992SN/A#endif /* yyval */ 365992SN/A 375992SN/A#ifndef yylval 385992SN/A#define yylval calc_lval 395992SN/A#endif /* yylval */ 405992SN/A 415992SN/A#ifndef yydebug 425992SN/A#define yydebug calc_debug 435992SN/A#endif /* yydebug */ 445992SN/A 455992SN/A#ifndef yynerrs 465992SN/A#define yynerrs calc_nerrs 475992SN/A#endif /* yynerrs */ 485992SN/A 495992SN/A#ifndef yyerrflag 505992SN/A#define yyerrflag calc_errflag 515992SN/A#endif /* yyerrflag */ 525992SN/A 535992SN/A#ifndef yylhs 545992SN/A#define yylhs calc_lhs 555992SN/A#endif /* yylhs */ 565992SN/A 575992SN/A#ifndef yylen 585992SN/A#define yylen calc_len 595992SN/A#endif /* yylen */ 605992SN/A 615992SN/A#ifndef yydefred 625992SN/A#define yydefred calc_defred 635992SN/A#endif /* yydefred */ 645992SN/A 655992SN/A#ifndef yydgoto 665992SN/A#define yydgoto calc_dgoto 675992SN/A#endif /* yydgoto */ 685992SN/A 695992SN/A#ifndef yysindex 705992SN/A#define yysindex calc_sindex 715992SN/A#endif /* yysindex */ 725992SN/A 735992SN/A#ifndef yyrindex 745992SN/A#define yyrindex calc_rindex 755992SN/A#endif /* yyrindex */ 765992SN/A 775992SN/A#ifndef yygindex 785992SN/A#define yygindex calc_gindex 795992SN/A#endif /* yygindex */ 805992SN/A 815992SN/A#ifndef yytable 825992SN/A#define yytable calc_table 835992SN/A#endif /* yytable */ 845992SN/A 855992SN/A#ifndef yycheck 865992SN/A#define yycheck calc_check 877084SN/A#endif /* yycheck */ 887084SN/A 897084SN/A#ifndef yyname 907084SN/A#define yyname calc_name 917084SN/A#endif /* yyname */ 925992SN/A 935992SN/A#ifndef yyrule 945992SN/A#define yyrule calc_rule 955992SN/A#endif /* yyrule */ 965992SN/A#define YYPREFIX "calc_" 975992SN/A 985992SN/A#define YYPURE 0 995992SN/A 1005992SN/A#line 2 "calc.y" 1015992SN/A# include <stdio.h> 1025992SN/A# include <ctype.h> 1035992SN/A 1045992SN/Aint regs[26]; 1055992SN/Aint base; 1065992SN/A 1075992SN/Aextern int yylex(void); 1085992SN/Astatic void yyerror(const char *s); 1095992SN/A 1105992SN/A#line 111 "calc.tab.c" 1115992SN/A 1125992SN/A#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) 1135992SN/A/* Default: YYSTYPE is the semantic value type. */ 114typedef 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 147extern int YYPARSE_DECL(); 148 149#define DIGIT 257 150#define LETTER 258 151#define UMINUS 259 152#define YYERRCODE 256 153typedef short YYINT; 154static const YYINT calc_lhs[] = { -1, 155 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 156 2, 2, 2, 2, 2, 2, 3, 3, 157}; 158static const YYINT calc_len[] = { 2, 159 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 160 3, 3, 3, 2, 1, 1, 1, 2, 161}; 162static const YYINT calc_defred[] = { 1, 163 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 164 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 165 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 166 10, 11, 167}; 168static const YYINT calc_dgoto[] = { 1, 169 7, 8, 9, 170}; 171static const YYINT calc_sindex[] = { 0, 172 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, 173 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, 174 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 175 0, 0, 176}; 177static const YYINT calc_rindex[] = { 0, 178 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 179 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 181 0, 0, 182}; 183static const YYINT calc_gindex[] = { 0, 184 0, 65, 0, 185}; 186#define YYTABLESIZE 220 187static const YYINT calc_table[] = { 6, 188 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 189 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 190 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 191 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 192 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 193 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 194 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 195 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 196 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 197 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 198 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 199 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 200 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 201 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 202 0, 0, 0, 0, 0, 16, 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, 0, 0, 0, 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, 2, 3, 4, 3, 12, 210}; 211static const YYINT calc_check[] = { 40, 212 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 213 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, 214 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, 215 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, 216 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 217 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, 218 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 219 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 220 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, 221 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, 222 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, 223 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, 224 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, 225 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, 226 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, 227 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 228 -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, 234}; 235#define YYFINAL 1 236#ifndef YYDEBUG 237#define YYDEBUG 0 238#endif 239#define YYMAXTOKEN 259 240#define YYUNDFTOKEN 265 241#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 242#if YYDEBUG 243static const char *const calc_name[] = { 244 245"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, 2460,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 2470,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 2490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2520,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", 253}; 254static const char *const calc_rule[] = { 255"$accept : list", 256"list :", 257"list : list stat '\\n'", 258"list : list error '\\n'", 259"stat : expr", 260"stat : LETTER '=' expr", 261"expr : '(' expr ')'", 262"expr : expr '+' expr", 263"expr : expr '-' expr", 264"expr : expr '*' expr", 265"expr : expr '/' expr", 266"expr : expr '%' expr", 267"expr : expr '&' expr", 268"expr : expr '|' expr", 269"expr : '-' expr", 270"expr : LETTER", 271"expr : number", 272"number : DIGIT", 273"number : number DIGIT", 274 275}; 276#endif 277 278int yydebug; 279int yynerrs; 280 281int yyerrflag; 282int yychar; 283YYSTYPE yyval; 284YYSTYPE yylval; 285 286/* define the initial stack-sizes */ 287#ifdef YYSTACKSIZE 288#undef YYMAXDEPTH 289#define YYMAXDEPTH YYSTACKSIZE 290#else 291#ifdef YYMAXDEPTH 292#define YYSTACKSIZE YYMAXDEPTH 293#else 294#define YYSTACKSIZE 10000 295#define YYMAXDEPTH 10000 296#endif 297#endif 298 299#define YYINITSTACKSIZE 200 300 301typedef struct { 302 unsigned stacksize; 303 YYINT *s_base; 304 YYINT *s_mark; 305 YYINT *s_last; 306 YYSTYPE *l_base; 307 YYSTYPE *l_mark; 308} YYSTACKDATA; 309/* variables for the parser stack */ 310static YYSTACKDATA yystack; 311#line 66 "calc.y" 312 /* start of programs */ 313 314int 315main (void) 316{ 317 while(!feof(stdin)) { 318 yyparse(); 319 } 320 return 0; 321} 322 323static void 324yyerror(const char *s) 325{ 326 fprintf(stderr, "%s\n", s); 327} 328 329int 330yylex(void) 331{ 332 /* lexical analysis routine */ 333 /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 334 /* return DIGIT for a digit, yylval = 0 through 9 */ 335 /* all other characters are returned immediately */ 336 337 int c; 338 339 while( (c=getchar()) == ' ' ) { /* skip blanks */ } 340 341 /* c is now nonblank */ 342 343 if( islower( c )) { 344 yylval = c - 'a'; 345 return ( LETTER ); 346 } 347 if( isdigit( c )) { 348 yylval = c - '0'; 349 return ( DIGIT ); 350 } 351 return( c ); 352} 353#line 354 "calc.tab.c" 354 355#if YYDEBUG 356#include <stdio.h> /* needed for printf */ 357#endif 358 359#include <stdlib.h> /* needed for malloc, etc */ 360#include <string.h> /* needed for memset */ 361 362/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 363static int yygrowstack(YYSTACKDATA *data) 364{ 365 int i; 366 unsigned newsize; 367 YYINT *newss; 368 YYSTYPE *newvs; 369 370 if ((newsize = data->stacksize) == 0) 371 newsize = YYINITSTACKSIZE; 372 else if (newsize >= YYMAXDEPTH) 373 return YYENOMEM; 374 else if ((newsize *= 2) > YYMAXDEPTH) 375 newsize = YYMAXDEPTH; 376 377 i = (int) (data->s_mark - data->s_base); 378 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 379 if (newss == 0) 380 return YYENOMEM; 381 382 data->s_base = newss; 383 data->s_mark = newss + i; 384 385 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 386 if (newvs == 0) 387 return YYENOMEM; 388 389 data->l_base = newvs; 390 data->l_mark = newvs + i; 391 392 data->stacksize = newsize; 393 data->s_last = data->s_base + newsize - 1; 394 return 0; 395} 396 397#if YYPURE || defined(YY_NO_LEAKS) 398static void yyfreestack(YYSTACKDATA *data) 399{ 400 free(data->s_base); 401 free(data->l_base); 402 memset(data, 0, sizeof(*data)); 403} 404#else 405#define yyfreestack(data) /* nothing */ 406#endif 407 408#define YYABORT goto yyabort 409#define YYREJECT goto yyabort 410#define YYACCEPT goto yyaccept 411#define YYERROR goto yyerrlab 412 413int 414YYPARSE_DECL() 415{ 416 int yym, yyn, yystate; 417#if YYDEBUG 418 const char *yys; 419 420 if ((yys = getenv("YYDEBUG")) != 0) 421 { 422 yyn = *yys; 423 if (yyn >= '0' && yyn <= '9') 424 yydebug = yyn - '0'; 425 } 426#endif 427 428 yynerrs = 0; 429 yyerrflag = 0; 430 yychar = YYEMPTY; 431 yystate = 0; 432 433#if YYPURE 434 memset(&yystack, 0, sizeof(yystack)); 435#endif 436 437 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 438 yystack.s_mark = yystack.s_base; 439 yystack.l_mark = yystack.l_base; 440 yystate = 0; 441 *yystack.s_mark = 0; 442 443yyloop: 444 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 445 if (yychar < 0) 446 { 447 if ((yychar = YYLEX) < 0) yychar = YYEOF; 448#if YYDEBUG 449 if (yydebug) 450 { 451 yys = yyname[YYTRANSLATE(yychar)]; 452 printf("%sdebug: state %d, reading %d (%s)\n", 453 YYPREFIX, yystate, yychar, yys); 454 } 455#endif 456 } 457 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 458 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 459 { 460#if YYDEBUG 461 if (yydebug) 462 printf("%sdebug: state %d, shifting to state %d\n", 463 YYPREFIX, yystate, yytable[yyn]); 464#endif 465 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 466 { 467 goto yyoverflow; 468 } 469 yystate = yytable[yyn]; 470 *++yystack.s_mark = yytable[yyn]; 471 *++yystack.l_mark = yylval; 472 yychar = YYEMPTY; 473 if (yyerrflag > 0) --yyerrflag; 474 goto yyloop; 475 } 476 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 477 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 478 { 479 yyn = yytable[yyn]; 480 goto yyreduce; 481 } 482 if (yyerrflag) goto yyinrecovery; 483 484 YYERROR_CALL("syntax error"); 485 486 goto yyerrlab; 487 488yyerrlab: 489 ++yynerrs; 490 491yyinrecovery: 492 if (yyerrflag < 3) 493 { 494 yyerrflag = 3; 495 for (;;) 496 { 497 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 498 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 499 { 500#if YYDEBUG 501 if (yydebug) 502 printf("%sdebug: state %d, error recovery shifting\ 503 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 504#endif 505 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 506 { 507 goto yyoverflow; 508 } 509 yystate = yytable[yyn]; 510 *++yystack.s_mark = yytable[yyn]; 511 *++yystack.l_mark = yylval; 512 goto yyloop; 513 } 514 else 515 { 516#if YYDEBUG 517 if (yydebug) 518 printf("%sdebug: error recovery discarding state %d\n", 519 YYPREFIX, *yystack.s_mark); 520#endif 521 if (yystack.s_mark <= yystack.s_base) goto yyabort; 522 --yystack.s_mark; 523 --yystack.l_mark; 524 } 525 } 526 } 527 else 528 { 529 if (yychar == YYEOF) goto yyabort; 530#if YYDEBUG 531 if (yydebug) 532 { 533 yys = yyname[YYTRANSLATE(yychar)]; 534 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 535 YYPREFIX, yystate, yychar, yys); 536 } 537#endif 538 yychar = YYEMPTY; 539 goto yyloop; 540 } 541 542yyreduce: 543#if YYDEBUG 544 if (yydebug) 545 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 546 YYPREFIX, yystate, yyn, yyrule[yyn]); 547#endif 548 yym = yylen[yyn]; 549 if (yym) 550 yyval = yystack.l_mark[1-yym]; 551 else 552 memset(&yyval, 0, sizeof yyval); 553 switch (yyn) 554 { 555case 3: 556#line 28 "calc.y" 557 { yyerrok ; } 558break; 559case 4: 560#line 32 "calc.y" 561 { printf("%d\n",yystack.l_mark[0]);} 562break; 563case 5: 564#line 34 "calc.y" 565 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 566break; 567case 6: 568#line 38 "calc.y" 569 { yyval = yystack.l_mark[-1]; } 570break; 571case 7: 572#line 40 "calc.y" 573 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 574break; 575case 8: 576#line 42 "calc.y" 577 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 578break; 579case 9: 580#line 44 "calc.y" 581 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 582break; 583case 10: 584#line 46 "calc.y" 585 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 586break; 587case 11: 588#line 48 "calc.y" 589 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 590break; 591case 12: 592#line 50 "calc.y" 593 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 594break; 595case 13: 596#line 52 "calc.y" 597 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 598break; 599case 14: 600#line 54 "calc.y" 601 { yyval = - yystack.l_mark[0]; } 602break; 603case 15: 604#line 56 "calc.y" 605 { yyval = regs[yystack.l_mark[0]]; } 606break; 607case 17: 608#line 61 "calc.y" 609 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } 610break; 611case 18: 612#line 63 "calc.y" 613 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } 614break; 615#line 616 "calc.tab.c" 616 } 617 yystack.s_mark -= yym; 618 yystate = *yystack.s_mark; 619 yystack.l_mark -= yym; 620 yym = yylhs[yyn]; 621 if (yystate == 0 && yym == 0) 622 { 623#if YYDEBUG 624 if (yydebug) 625 printf("%sdebug: after reduction, shifting from state 0 to\ 626 state %d\n", YYPREFIX, YYFINAL); 627#endif 628 yystate = YYFINAL; 629 *++yystack.s_mark = YYFINAL; 630 *++yystack.l_mark = yyval; 631 if (yychar < 0) 632 { 633 if ((yychar = YYLEX) < 0) yychar = YYEOF; 634#if YYDEBUG 635 if (yydebug) 636 { 637 yys = yyname[YYTRANSLATE(yychar)]; 638 printf("%sdebug: state %d, reading %d (%s)\n", 639 YYPREFIX, YYFINAL, yychar, yys); 640 } 641#endif 642 } 643 if (yychar == YYEOF) goto yyaccept; 644 goto yyloop; 645 } 646 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 647 yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 648 yystate = yytable[yyn]; 649 else 650 yystate = yydgoto[yym]; 651#if YYDEBUG 652 if (yydebug) 653 printf("%sdebug: after reduction, shifting from state %d \ 654to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 655#endif 656 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 657 { 658 goto yyoverflow; 659 } 660 *++yystack.s_mark = (YYINT) yystate; 661 *++yystack.l_mark = yyval; 662 goto yyloop; 663 664yyoverflow: 665 YYERROR_CALL("yacc stack overflow"); 666 667yyabort: 668 yyfreestack(&yystack); 669 return (1); 670 671yyaccept: 672 yyfreestack(&yystack); 673 return (0); 674} 675