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