1/* $NetBSD: quote_calc.tab.c,v 1.4 2021/02/20 22:57:57 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 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 106int regs[26]; 107int base; 108 109int yylex(void); 110static 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. */ 116typedef 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 149extern 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 167typedef short YYINT; 168static 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}; 172static 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}; 176static 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}; 182static const YYINT quote_calc_dgoto[] = { 1, 183 7, 8, 9, 184}; 185static 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}; 191static 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}; 197static const YYINT quote_calc_gindex[] = { 0, 198 0, 42, 0, 199}; 200#define YYTABLESIZE 258 201static 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}; 229static 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 265static 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, 2680,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 2690,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 2710,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2720,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2730,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2740,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, 2760,0,"illegal-symbol", 277}; 278static 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#if YYDEBUG 303int yydebug; 304#endif 305 306int yyerrflag; 307int yychar; 308YYSTYPE yyval; 309YYSTYPE yylval; 310int yynerrs; 311 312/* define the initial stack-sizes */ 313#ifdef YYSTACKSIZE 314#undef YYMAXDEPTH 315#define YYMAXDEPTH YYSTACKSIZE 316#else 317#ifdef YYMAXDEPTH 318#define YYSTACKSIZE YYMAXDEPTH 319#else 320#define YYSTACKSIZE 10000 321#define YYMAXDEPTH 10000 322#endif 323#endif 324 325#define YYINITSTACKSIZE 200 326 327typedef struct { 328 unsigned stacksize; 329 YYINT *s_base; 330 YYINT *s_mark; 331 YYINT *s_last; 332 YYSTYPE *l_base; 333 YYSTYPE *l_mark; 334} YYSTACKDATA; 335/* variables for the parser stack */ 336static YYSTACKDATA yystack; 337#line 73 "quote_calc.y" 338 /* start of programs */ 339 340int 341main (void) 342{ 343 while(!feof(stdin)) { 344 yyparse(); 345 } 346 return 0; 347} 348 349static void 350yyerror(const char *s) 351{ 352 fprintf(stderr, "%s\n", s); 353} 354 355int 356yylex(void) { 357 /* lexical analysis routine */ 358 /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 359 /* return DIGIT for a digit, yylval = 0 through 9 */ 360 /* all other characters are returned immediately */ 361 362 int c; 363 364 while( (c=getchar()) == ' ' ) { /* skip blanks */ } 365 366 /* c is now nonblank */ 367 368 if( islower( c )) { 369 yylval = c - 'a'; 370 return ( LETTER ); 371 } 372 if( isdigit( c )) { 373 yylval = c - '0'; 374 return ( DIGIT ); 375 } 376 return( c ); 377} 378#line 377 "quote_calc.tab.c" 379 380#if YYDEBUG 381#include <stdio.h> /* needed for printf */ 382#endif 383 384#include <stdlib.h> /* needed for malloc, etc */ 385#include <string.h> /* needed for memset */ 386 387/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 388static int yygrowstack(YYSTACKDATA *data) 389{ 390 int i; 391 unsigned newsize; 392 YYINT *newss; 393 YYSTYPE *newvs; 394 395 if ((newsize = data->stacksize) == 0) 396 newsize = YYINITSTACKSIZE; 397 else if (newsize >= YYMAXDEPTH) 398 return YYENOMEM; 399 else if ((newsize *= 2) > YYMAXDEPTH) 400 newsize = YYMAXDEPTH; 401 402 i = (int) (data->s_mark - data->s_base); 403 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 404 if (newss == 0) 405 return YYENOMEM; 406 407 data->s_base = newss; 408 data->s_mark = newss + i; 409 410 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 411 if (newvs == 0) 412 return YYENOMEM; 413 414 data->l_base = newvs; 415 data->l_mark = newvs + i; 416 417 data->stacksize = newsize; 418 data->s_last = data->s_base + newsize - 1; 419 return 0; 420} 421 422#if YYPURE || defined(YY_NO_LEAKS) 423static void yyfreestack(YYSTACKDATA *data) 424{ 425 free(data->s_base); 426 free(data->l_base); 427 memset(data, 0, sizeof(*data)); 428} 429#else 430#define yyfreestack(data) /* nothing */ 431#endif 432 433#define YYABORT goto yyabort 434#define YYREJECT goto yyabort 435#define YYACCEPT goto yyaccept 436#define YYERROR goto yyerrlab 437 438int 439YYPARSE_DECL() 440{ 441 int yym, yyn, yystate; 442#if YYDEBUG 443 const char *yys; 444 445 if ((yys = getenv("YYDEBUG")) != 0) 446 { 447 yyn = *yys; 448 if (yyn >= '0' && yyn <= '9') 449 yydebug = yyn - '0'; 450 } 451#endif 452 453 yym = 0; 454 yyn = 0; 455 yynerrs = 0; 456 yyerrflag = 0; 457 yychar = YYEMPTY; 458 yystate = 0; 459 460#if YYPURE 461 memset(&yystack, 0, sizeof(yystack)); 462#endif 463 464 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 465 yystack.s_mark = yystack.s_base; 466 yystack.l_mark = yystack.l_base; 467 yystate = 0; 468 *yystack.s_mark = 0; 469 470yyloop: 471 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 472 if (yychar < 0) 473 { 474 yychar = YYLEX; 475 if (yychar < 0) yychar = YYEOF; 476#if YYDEBUG 477 if (yydebug) 478 { 479 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 480 printf("%sdebug: state %d, reading %d (%s)\n", 481 YYPREFIX, yystate, yychar, yys); 482 } 483#endif 484 } 485 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 486 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 487 { 488#if YYDEBUG 489 if (yydebug) 490 printf("%sdebug: state %d, shifting to state %d\n", 491 YYPREFIX, yystate, yytable[yyn]); 492#endif 493 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 494 yystate = yytable[yyn]; 495 *++yystack.s_mark = yytable[yyn]; 496 *++yystack.l_mark = yylval; 497 yychar = YYEMPTY; 498 if (yyerrflag > 0) --yyerrflag; 499 goto yyloop; 500 } 501 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 502 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 503 { 504 yyn = yytable[yyn]; 505 goto yyreduce; 506 } 507 if (yyerrflag != 0) goto yyinrecovery; 508 509 YYERROR_CALL("syntax error"); 510 511 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 512yyerrlab: 513 ++yynerrs; 514 515yyinrecovery: 516 if (yyerrflag < 3) 517 { 518 yyerrflag = 3; 519 for (;;) 520 { 521 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 522 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 523 { 524#if YYDEBUG 525 if (yydebug) 526 printf("%sdebug: state %d, error recovery shifting\ 527 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 528#endif 529 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 530 yystate = yytable[yyn]; 531 *++yystack.s_mark = yytable[yyn]; 532 *++yystack.l_mark = yylval; 533 goto yyloop; 534 } 535 else 536 { 537#if YYDEBUG 538 if (yydebug) 539 printf("%sdebug: error recovery discarding state %d\n", 540 YYPREFIX, *yystack.s_mark); 541#endif 542 if (yystack.s_mark <= yystack.s_base) goto yyabort; 543 --yystack.s_mark; 544 --yystack.l_mark; 545 } 546 } 547 } 548 else 549 { 550 if (yychar == YYEOF) goto yyabort; 551#if YYDEBUG 552 if (yydebug) 553 { 554 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 555 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 556 YYPREFIX, yystate, yychar, yys); 557 } 558#endif 559 yychar = YYEMPTY; 560 goto yyloop; 561 } 562 563yyreduce: 564#if YYDEBUG 565 if (yydebug) 566 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 567 YYPREFIX, yystate, yyn, yyrule[yyn]); 568#endif 569 yym = yylen[yyn]; 570 if (yym > 0) 571 yyval = yystack.l_mark[1-yym]; 572 else 573 memset(&yyval, 0, sizeof yyval); 574 575 switch (yyn) 576 { 577case 3: 578#line 35 "quote_calc.y" 579 { yyerrok ; } 580break; 581case 4: 582#line 39 "quote_calc.y" 583 { printf("%d\n",yystack.l_mark[0]);} 584break; 585case 5: 586#line 41 "quote_calc.y" 587 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 588break; 589case 6: 590#line 45 "quote_calc.y" 591 { yyval = yystack.l_mark[-1]; } 592break; 593case 7: 594#line 47 "quote_calc.y" 595 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 596break; 597case 8: 598#line 49 "quote_calc.y" 599 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 600break; 601case 9: 602#line 51 "quote_calc.y" 603 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 604break; 605case 10: 606#line 53 "quote_calc.y" 607 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 608break; 609case 11: 610#line 55 "quote_calc.y" 611 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 612break; 613case 12: 614#line 57 "quote_calc.y" 615 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 616break; 617case 13: 618#line 59 "quote_calc.y" 619 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 620break; 621case 14: 622#line 61 "quote_calc.y" 623 { yyval = - yystack.l_mark[0]; } 624break; 625case 15: 626#line 63 "quote_calc.y" 627 { yyval = regs[yystack.l_mark[0]]; } 628break; 629case 17: 630#line 68 "quote_calc.y" 631 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } 632break; 633case 18: 634#line 70 "quote_calc.y" 635 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } 636break; 637#line 636 "quote_calc.tab.c" 638 } 639 yystack.s_mark -= yym; 640 yystate = *yystack.s_mark; 641 yystack.l_mark -= yym; 642 yym = yylhs[yyn]; 643 if (yystate == 0 && yym == 0) 644 { 645#if YYDEBUG 646 if (yydebug) 647 printf("%sdebug: after reduction, shifting from state 0 to\ 648 state %d\n", YYPREFIX, YYFINAL); 649#endif 650 yystate = YYFINAL; 651 *++yystack.s_mark = YYFINAL; 652 *++yystack.l_mark = yyval; 653 if (yychar < 0) 654 { 655 yychar = YYLEX; 656 if (yychar < 0) yychar = YYEOF; 657#if YYDEBUG 658 if (yydebug) 659 { 660 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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]) != 0) && (yyn += yystate) >= 0 && 670 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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 \ 677to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 678#endif 679 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 680 *++yystack.s_mark = (YYINT) yystate; 681 *++yystack.l_mark = yyval; 682 goto yyloop; 683 684yyoverflow: 685 YYERROR_CALL("yacc stack overflow"); 686 687yyabort: 688 yyfreestack(&yystack); 689 return (1); 690 691yyaccept: 692 yyfreestack(&yystack); 693 return (0); 694} 695