1#ifndef lint 2static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; 3#endif 4 5#define YYBYACC 1 6#define YYMAJOR 1 7#define YYMINOR 9 8 9#define YYEMPTY (-1) 10#define yyclearin (yychar = YYEMPTY) 11#define yyerrok (yyerrflag = 0) 12#define YYRECOVERING() (yyerrflag != 0) 13 14 15#ifndef yyparse 16#define yyparse quote_calc_parse 17#endif /* yyparse */ 18 19#ifndef yylex 20#define yylex quote_calc_lex 21#endif /* yylex */ 22 23#ifndef yyerror 24#define yyerror quote_calc_error 25#endif /* yyerror */ 26 27#ifndef yychar 28#define yychar quote_calc_char 29#endif /* yychar */ 30 31#ifndef yyval 32#define yyval quote_calc_val 33#endif /* yyval */ 34 35#ifndef yylval 36#define yylval quote_calc_lval 37#endif /* yylval */ 38 39#ifndef yydebug 40#define yydebug quote_calc_debug 41#endif /* yydebug */ 42 43#ifndef yynerrs 44#define yynerrs quote_calc_nerrs 45#endif /* yynerrs */ 46 47#ifndef yyerrflag 48#define yyerrflag quote_calc_errflag 49#endif /* yyerrflag */ 50 51#ifndef yylhs 52#define yylhs quote_calc_lhs 53#endif /* yylhs */ 54 55#ifndef yylen 56#define yylen quote_calc_len 57#endif /* yylen */ 58 59#ifndef yydefred 60#define yydefred quote_calc_defred 61#endif /* yydefred */ 62 63#ifndef yydgoto 64#define yydgoto quote_calc_dgoto 65#endif /* yydgoto */ 66 67#ifndef yysindex 68#define yysindex quote_calc_sindex 69#endif /* yysindex */ 70 71#ifndef yyrindex 72#define yyrindex quote_calc_rindex 73#endif /* yyrindex */ 74 75#ifndef yygindex 76#define yygindex quote_calc_gindex 77#endif /* yygindex */ 78 79#ifndef yytable 80#define yytable quote_calc_table 81#endif /* yytable */ 82 83#ifndef yycheck 84#define yycheck quote_calc_check 85#endif /* yycheck */ 86 87#ifndef yyname 88#define yyname quote_calc_name 89#endif /* yyname */ 90 91#ifndef yyrule 92#define yyrule quote_calc_rule 93#endif /* yyrule */ 94#define YYPREFIX "quote_calc_" 95 96#define YYPURE 0 97 98#line 2 "quote_calc.y" 99# include <stdio.h> 100# include <ctype.h> 101 102int regs[26]; 103int base; 104 105int yylex(void); 106static void yyerror(const char *s); 107 108#line 109 "quote_calc.tab.c" 109 110#ifndef YYSTYPE 111typedef int YYSTYPE; 112#endif 113 114/* compatibility with bison */ 115#ifdef YYPARSE_PARAM 116/* compatibility with FreeBSD */ 117# ifdef YYPARSE_PARAM_TYPE 118# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 119# else 120# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 121# endif 122#else 123# define YYPARSE_DECL() yyparse(void) 124#endif 125 126/* Parameters sent to lex. */ 127#ifdef YYLEX_PARAM 128# define YYLEX_DECL() yylex(void *YYLEX_PARAM) 129# define YYLEX yylex(YYLEX_PARAM) 130#else 131# define YYLEX_DECL() yylex(void) 132# define YYLEX yylex() 133#endif 134 135/* Parameters sent to yyerror. */ 136#ifndef YYERROR_DECL 137#define YYERROR_DECL() yyerror(const char *s) 138#endif 139#ifndef YYERROR_CALL 140#define YYERROR_CALL(msg) yyerror(msg) 141#endif 142 143extern int YYPARSE_DECL(); 144 145#define OP_ADD 257 146#define ADD 258 147#define OP_SUB 259 148#define SUB 260 149#define OP_MUL 261 150#define MUL 262 151#define OP_DIV 263 152#define DIV 264 153#define OP_MOD 265 154#define MOD 266 155#define OP_AND 267 156#define AND 268 157#define DIGIT 269 158#define LETTER 270 159#define UMINUS 271 160#define YYERRCODE 256 161static const short quote_calc_lhs[] = { -1, 162 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 163 2, 2, 2, 2, 2, 2, 3, 3, 164}; 165static const short quote_calc_len[] = { 2, 166 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 167 3, 3, 3, 2, 1, 1, 1, 2, 168}; 169static const short quote_calc_defred[] = { 1, 170 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 171 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 172 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 173 0, 0, 174}; 175static const short quote_calc_dgoto[] = { 1, 176 7, 8, 9, 177}; 178static const short quote_calc_sindex[] = { 0, 179 -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 180 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, 181 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, 182 -121, -243, 183}; 184static const short quote_calc_rindex[] = { 0, 185 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 186 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 187 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 188 3, -4, 189}; 190static const short quote_calc_gindex[] = { 0, 191 0, 42, 0, 192}; 193#define YYTABLESIZE 258 194static const short quote_calc_table[] = { 16, 195 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 196 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 197 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 198 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 199 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 200 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 201 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 202 0, 0, 0, 0, 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, 22, 0, 0, 0, 0, 0, 0, 0, 0, 206 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 209 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0, 217 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 218 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 219 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 220 16, 15, 16, 15, 16, 15, 16, 15, 221}; 222static const short quote_calc_check[] = { 10, 223 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 224 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 225 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 226 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, 227 -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, 228 -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 229 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, 234 -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, 235 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 236 -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, 237 -1, 263, -1, 265, -1, 267, -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, -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, 256, -1, -1, 245 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 246 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 247 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 248 261, 261, 263, 263, 265, 265, 267, 267, 249}; 250#define YYFINAL 1 251#ifndef YYDEBUG 252#define YYDEBUG 0 253#endif 254#define YYMAXTOKEN 271 255#if YYDEBUG 256static const char *yyname[] = { 257 258"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, 2590,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 2600,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2610,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 2620,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2640,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2650,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", 266"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS", 267}; 268static const char *yyrule[] = { 269"$accept : list", 270"list :", 271"list : list stat '\\n'", 272"list : list error '\\n'", 273"stat : expr", 274"stat : LETTER '=' expr", 275"expr : '(' expr ')'", 276"expr : expr OP_ADD expr", 277"expr : expr OP_SUB expr", 278"expr : expr OP_MUL expr", 279"expr : expr OP_DIV expr", 280"expr : expr OP_MOD expr", 281"expr : expr OP_AND expr", 282"expr : expr '|' expr", 283"expr : OP_SUB expr", 284"expr : LETTER", 285"expr : number", 286"number : DIGIT", 287"number : number DIGIT", 288 289}; 290#endif 291 292int yydebug; 293int yynerrs; 294 295int yyerrflag; 296int yychar; 297YYSTYPE yyval; 298YYSTYPE yylval; 299 300/* define the initial stack-sizes */ 301#ifdef YYSTACKSIZE 302#undef YYMAXDEPTH 303#define YYMAXDEPTH YYSTACKSIZE 304#else 305#ifdef YYMAXDEPTH 306#define YYSTACKSIZE YYMAXDEPTH 307#else 308#define YYSTACKSIZE 500 309#define YYMAXDEPTH 500 310#endif 311#endif 312 313#define YYINITSTACKSIZE 500 314 315typedef struct { 316 unsigned stacksize; 317 short *s_base; 318 short *s_mark; 319 short *s_last; 320 YYSTYPE *l_base; 321 YYSTYPE *l_mark; 322} YYSTACKDATA; 323/* variables for the parser stack */ 324static YYSTACKDATA yystack; 325#line 73 "quote_calc.y" 326 /* start of programs */ 327 328int 329main (void) 330{ 331 while(!feof(stdin)) { 332 yyparse(); 333 } 334 return 0; 335} 336 337static void 338yyerror(const char *s) 339{ 340 fprintf(stderr, "%s\n", s); 341} 342 343int 344yylex(void) { 345 /* lexical analysis routine */ 346 /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 347 /* return DIGIT for a digit, yylval = 0 through 9 */ 348 /* all other characters are returned immediately */ 349 350 int c; 351 352 while( (c=getchar()) == ' ' ) { /* skip blanks */ } 353 354 /* c is now nonblank */ 355 356 if( islower( c )) { 357 yylval = c - 'a'; 358 return ( LETTER ); 359 } 360 if( isdigit( c )) { 361 yylval = c - '0'; 362 return ( DIGIT ); 363 } 364 return( c ); 365} 366#line 367 "quote_calc.tab.c" 367 368#if YYDEBUG 369#include <stdio.h> /* needed for printf */ 370#endif 371 372#include <stdlib.h> /* needed for malloc, etc */ 373#include <string.h> /* needed for memset */ 374 375/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 376static int yygrowstack(YYSTACKDATA *data) 377{ 378 int i; 379 unsigned newsize; 380 short *newss; 381 YYSTYPE *newvs; 382 383 if ((newsize = data->stacksize) == 0) 384 newsize = YYINITSTACKSIZE; 385 else if (newsize >= YYMAXDEPTH) 386 return -1; 387 else if ((newsize *= 2) > YYMAXDEPTH) 388 newsize = YYMAXDEPTH; 389 390 i = (int) (data->s_mark - data->s_base); 391 newss = (short *)realloc(data->s_base, newsize * sizeof(*newss)); 392 if (newss == 0) 393 return -1; 394 395 data->s_base = newss; 396 data->s_mark = newss + i; 397 398 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 399 if (newvs == 0) 400 return -1; 401 402 data->l_base = newvs; 403 data->l_mark = newvs + i; 404 405 data->stacksize = newsize; 406 data->s_last = data->s_base + newsize - 1; 407 return 0; 408} 409 410#if YYPURE || defined(YY_NO_LEAKS) 411static void yyfreestack(YYSTACKDATA *data) 412{ 413 free(data->s_base); 414 free(data->l_base); 415 memset(data, 0, sizeof(*data)); 416} 417#else 418#define yyfreestack(data) /* nothing */ 419#endif 420 421#define YYABORT goto yyabort 422#define YYREJECT goto yyabort 423#define YYACCEPT goto yyaccept 424#define YYERROR goto yyerrlab 425 426int 427YYPARSE_DECL() 428{ 429 int yym, yyn, yystate; 430#if YYDEBUG 431 const char *yys; 432 433 if ((yys = getenv("YYDEBUG")) != 0) 434 { 435 yyn = *yys; 436 if (yyn >= '0' && yyn <= '9') 437 yydebug = yyn - '0'; 438 } 439#endif 440 441 yynerrs = 0; 442 yyerrflag = 0; 443 yychar = YYEMPTY; 444 yystate = 0; 445 446#if YYPURE 447 memset(&yystack, 0, sizeof(yystack)); 448#endif 449 450 if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow; 451 yystack.s_mark = yystack.s_base; 452 yystack.l_mark = yystack.l_base; 453 yystate = 0; 454 *yystack.s_mark = 0; 455 456yyloop: 457 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 458 if (yychar < 0) 459 { 460 if ((yychar = YYLEX) < 0) yychar = 0; 461#if YYDEBUG 462 if (yydebug) 463 { 464 yys = 0; 465 if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 466 if (!yys) yys = "illegal-symbol"; 467 printf("%sdebug: state %d, reading %d (%s)\n", 468 YYPREFIX, yystate, yychar, yys); 469 } 470#endif 471 } 472 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 473 yyn <= YYTABLESIZE && yycheck[yyn] == 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)) 481 { 482 goto yyoverflow; 483 } 484 yystate = yytable[yyn]; 485 *++yystack.s_mark = yytable[yyn]; 486 *++yystack.l_mark = yylval; 487 yychar = YYEMPTY; 488 if (yyerrflag > 0) --yyerrflag; 489 goto yyloop; 490 } 491 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 492 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 493 { 494 yyn = yytable[yyn]; 495 goto yyreduce; 496 } 497 if (yyerrflag) goto yyinrecovery; 498 499 yyerror("syntax error"); 500 501 goto yyerrlab; 502 503yyerrlab: 504 ++yynerrs; 505 506yyinrecovery: 507 if (yyerrflag < 3) 508 { 509 yyerrflag = 3; 510 for (;;) 511 { 512 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 513 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 514 { 515#if YYDEBUG 516 if (yydebug) 517 printf("%sdebug: state %d, error recovery shifting\ 518 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 519#endif 520 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 521 { 522 goto yyoverflow; 523 } 524 yystate = yytable[yyn]; 525 *++yystack.s_mark = yytable[yyn]; 526 *++yystack.l_mark = yylval; 527 goto yyloop; 528 } 529 else 530 { 531#if YYDEBUG 532 if (yydebug) 533 printf("%sdebug: error recovery discarding state %d\n", 534 YYPREFIX, *yystack.s_mark); 535#endif 536 if (yystack.s_mark <= yystack.s_base) goto yyabort; 537 --yystack.s_mark; 538 --yystack.l_mark; 539 } 540 } 541 } 542 else 543 { 544 if (yychar == 0) goto yyabort; 545#if YYDEBUG 546 if (yydebug) 547 { 548 yys = 0; 549 if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 550 if (!yys) yys = "illegal-symbol"; 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 559yyreduce: 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 { 572case 3: 573#line 35 "quote_calc.y" 574 { yyerrok ; } 575break; 576case 4: 577#line 39 "quote_calc.y" 578 { printf("%d\n",yystack.l_mark[0]);} 579break; 580case 5: 581#line 41 "quote_calc.y" 582 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 583break; 584case 6: 585#line 45 "quote_calc.y" 586 { yyval = yystack.l_mark[-1]; } 587break; 588case 7: 589#line 47 "quote_calc.y" 590 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 591break; 592case 8: 593#line 49 "quote_calc.y" 594 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 595break; 596case 9: 597#line 51 "quote_calc.y" 598 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 599break; 600case 10: 601#line 53 "quote_calc.y" 602 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 603break; 604case 11: 605#line 55 "quote_calc.y" 606 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 607break; 608case 12: 609#line 57 "quote_calc.y" 610 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 611break; 612case 13: 613#line 59 "quote_calc.y" 614 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 615break; 616case 14: 617#line 61 "quote_calc.y" 618 { yyval = - yystack.l_mark[0]; } 619break; 620case 15: 621#line 63 "quote_calc.y" 622 { yyval = regs[yystack.l_mark[0]]; } 623break; 624case 17: 625#line 68 "quote_calc.y" 626 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } 627break; 628case 18: 629#line 70 "quote_calc.y" 630 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } 631break; 632#line 633 "quote_calc.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 = 0; 651#if YYDEBUG 652 if (yydebug) 653 { 654 yys = 0; 655 if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 656 if (!yys) yys = "illegal-symbol"; 657 printf("%sdebug: state %d, reading %d (%s)\n", 658 YYPREFIX, YYFINAL, yychar, yys); 659 } 660#endif 661 } 662 if (yychar == 0) goto yyaccept; 663 goto yyloop; 664 } 665 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 666 yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 667 yystate = yytable[yyn]; 668 else 669 yystate = yydgoto[yym]; 670#if YYDEBUG 671 if (yydebug) 672 printf("%sdebug: after reduction, shifting from state %d \ 673to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 674#endif 675 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 676 { 677 goto yyoverflow; 678 } 679 *++yystack.s_mark = (short) yystate; 680 *++yystack.l_mark = yyval; 681 goto yyloop; 682 683yyoverflow: 684 yyerror("yacc stack overflow"); 685 686yyabort: 687 yyfreestack(&yystack); 688 return (1); 689 690yyaccept: 691 yyfreestack(&yystack); 692 return (0); 693} 694