1 /* $NetBSD: expr.oxout.tab.c,v 1.3 2018/12/23 15:38:54 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 expr.oxout_parse 21 #endif /* yyparse */ 22 23 #ifndef yylex 24 #define yylex expr.oxout_lex 25 #endif /* yylex */ 26 27 #ifndef yyerror 28 #define yyerror expr.oxout_error 29 #endif /* yyerror */ 30 31 #ifndef yychar 32 #define yychar expr.oxout_char 33 #endif /* yychar */ 34 35 #ifndef yyval 36 #define yyval expr.oxout_val 37 #endif /* yyval */ 38 39 #ifndef yylval 40 #define yylval expr.oxout_lval 41 #endif /* yylval */ 42 43 #ifndef yydebug 44 #define yydebug expr.oxout_debug 45 #endif /* yydebug */ 46 47 #ifndef yynerrs 48 #define yynerrs expr.oxout_nerrs 49 #endif /* yynerrs */ 50 51 #ifndef yyerrflag 52 #define yyerrflag expr.oxout_errflag 53 #endif /* yyerrflag */ 54 55 #ifndef yylhs 56 #define yylhs expr.oxout_lhs 57 #endif /* yylhs */ 58 59 #ifndef yylen 60 #define yylen expr.oxout_len 61 #endif /* yylen */ 62 63 #ifndef yydefred 64 #define yydefred expr.oxout_defred 65 #endif /* yydefred */ 66 67 #ifndef yydgoto 68 #define yydgoto expr.oxout_dgoto 69 #endif /* yydgoto */ 70 71 #ifndef yysindex 72 #define yysindex expr.oxout_sindex 73 #endif /* yysindex */ 74 75 #ifndef yyrindex 76 #define yyrindex expr.oxout_rindex 77 #endif /* yyrindex */ 78 79 #ifndef yygindex 80 #define yygindex expr.oxout_gindex 81 #endif /* yygindex */ 82 83 #ifndef yytable 84 #define yytable expr.oxout_table 85 #endif /* yytable */ 86 87 #ifndef yycheck 88 #define yycheck expr.oxout_check 89 #endif /* yycheck */ 90 91 #ifndef yyname 92 #define yyname expr.oxout_name 93 #endif /* yyname */ 94 95 #ifndef yyrule 96 #define yyrule expr.oxout_rule 97 #endif /* yyrule */ 98 #define YYPREFIX "expr.oxout_" 99 100 #define YYPURE 0 101 102 #line 5 "expr.oxout.y" 103 #include <stdlib.h> 104 #include <string.h> 105 #line 8 "expr.Y" 106 107 #include "expr.oxout.h" 108 #include <stdio.h> 109 110 extern int yylex(void); 111 extern void yyerror(const char *); 112 #line 27 "expr.oxout.y" 113 #include <limits.h> 114 #define yyyR USHRT_MAX 115 #ifdef YYSTYPE 116 #undef YYSTYPE_IS_DECLARED 117 #define YYSTYPE_IS_DECLARED 1 118 #endif 119 #ifndef YYSTYPE_IS_DECLARED 120 #define YYSTYPE_IS_DECLARED 1 121 #line 31 "expr.oxout.y" 122 typedef union { 123 struct yyyOxAttrbs { 124 struct yyyStackItem *yyyOxStackItem; 125 } yyyOxAttrbs; 126 } YYSTYPE; 127 #endif /* !YYSTYPE_IS_DECLARED */ 128 #line 38 "expr.oxout.y" 129 #include <stdio.h> 130 #include <stdarg.h> 131 132 static int yyyYok = 1; 133 134 extern yyyFT yyyRCIL[]; 135 136 void yyyExecuteRRsection(yyyGNT *rootNode); 137 void yyyYoxInit(void); 138 void yyyDecorate(void); 139 struct yyyOxAttrbs; /* hack required to compensate for 'msta' behavior */ 140 void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...); 141 void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...); 142 void yyyCheckUnsolvedInstTrav(yyyGNT *rootNode,long *nNZrc,long *cycleSum); 143 void yyyUnsolvedInstSearchTrav(yyyGNT *pNode); 144 void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode); 145 void yyyabort(void); 146 147 #line 146 "expr.oxout.tab.c" 148 149 /* compatibility with bison */ 150 #ifdef YYPARSE_PARAM 151 /* compatibility with FreeBSD */ 152 # ifdef YYPARSE_PARAM_TYPE 153 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 154 # else 155 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 156 # endif 157 #else 158 # define YYPARSE_DECL() yyparse(void) 159 #endif 160 161 /* Parameters sent to lex. */ 162 #ifdef YYLEX_PARAM 163 # define YYLEX_DECL() yylex(void *YYLEX_PARAM) 164 # define YYLEX yylex(YYLEX_PARAM) 165 #else 166 # define YYLEX_DECL() yylex(void) 167 # define YYLEX yylex() 168 #endif 169 170 /* Parameters sent to yyerror. */ 171 #ifndef YYERROR_DECL 172 #define YYERROR_DECL() yyerror(const char *s) 173 #endif 174 #ifndef YYERROR_CALL 175 #define YYERROR_CALL(msg) yyerror(msg) 176 #endif 177 178 extern int YYPARSE_DECL(); 179 180 #define ID 257 181 #define CONST 258 182 #define YYERRCODE 256 183 typedef short YYINT; 184 static const YYINT expr.oxout_lhs[] = { -1, 185 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, 186 }; 187 static const YYINT expr.oxout_len[] = { 2, 188 0, 2, 1, 3, 3, 3, 3, 3, 1, 1, 189 }; 190 static const YYINT expr.oxout_defred[] = { 1, 191 0, 0, 9, 10, 0, 2, 0, 0, 0, 0, 192 0, 0, 8, 0, 0, 4, 0, 193 }; 194 static const YYINT expr.oxout_dgoto[] = { 1, 195 6, 2, 7, 196 }; 197 static const YYINT expr.oxout_sindex[] = { 0, 198 0, -40, 0, 0, -40, 0, -18, -24, -40, -40, 199 -40, -40, 0, -37, -37, 0, -39, 200 }; 201 static const YYINT expr.oxout_rindex[] = { 0, 202 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 203 0, 0, 0, 2, 8, 0, 1, 204 }; 205 static const YYINT expr.oxout_gindex[] = { 0, 206 0, 0, 4, 207 }; 208 #define YYTABLESIZE 218 209 static const YYINT expr.oxout_table[] = { 5, 210 6, 5, 11, 0, 11, 3, 0, 7, 8, 12, 211 0, 0, 14, 15, 16, 17, 13, 11, 9, 0, 212 10, 0, 12, 11, 9, 0, 10, 0, 12, 0, 213 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214 0, 6, 5, 6, 5, 6, 5, 6, 7, 0, 215 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 216 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231 0, 0, 0, 0, 0, 0, 3, 4, 232 }; 233 static const YYINT expr.oxout_check[] = { 40, 234 0, 0, 42, -1, 42, 0, -1, 0, 5, 47, 235 -1, -1, 9, 10, 11, 12, 41, 42, 43, -1, 236 45, -1, 47, 42, 43, -1, 45, -1, 47, -1, 237 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 238 -1, 41, 41, 43, 43, 45, 45, 47, 41, -1, 239 43, -1, 45, -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, -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, -1, -1, -1, 252 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 253 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 254 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 255 -1, -1, -1, -1, -1, -1, 257, 258, 256 }; 257 #define YYFINAL 1 258 #ifndef YYDEBUG 259 #define YYDEBUG 0 260 #endif 261 #define YYMAXTOKEN 258 262 #define YYUNDFTOKEN 264 263 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 264 #if YYDEBUG 265 static const char *const expr.oxout_name[] = { 266 267 "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,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,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,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,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,"ID", 274 "CONST",0,0,0,0,0,"illegal-symbol", 275 }; 276 static const char *const expr.oxout_rule[] = { 277 "$accept : yyyAugNonterm", 278 "$$1 :", 279 "yyyAugNonterm : $$1 s", 280 "s : expr", 281 "expr : expr '*' expr", 282 "expr : expr '+' expr", 283 "expr : expr '/' expr", 284 "expr : expr '-' expr", 285 "expr : '(' expr ')'", 286 "expr : ID", 287 "expr : CONST", 288 289 }; 290 #endif 291 292 #if YYDEBUG 293 int yydebug; 294 #endif 295 296 int yyerrflag; 297 int yychar; 298 YYSTYPE yyval; 299 YYSTYPE yylval; 300 int yynerrs; 301 302 /* define the initial stack-sizes */ 303 #ifdef YYSTACKSIZE 304 #undef YYMAXDEPTH 305 #define YYMAXDEPTH YYSTACKSIZE 306 #else 307 #ifdef YYMAXDEPTH 308 #define YYSTACKSIZE YYMAXDEPTH 309 #else 310 #define YYSTACKSIZE 10000 311 #define YYMAXDEPTH 10000 312 #endif 313 #endif 314 315 #define YYINITSTACKSIZE 200 316 317 typedef struct { 318 unsigned stacksize; 319 YYINT *s_base; 320 YYINT *s_mark; 321 YYINT *s_last; 322 YYSTYPE *l_base; 323 YYSTYPE *l_mark; 324 } YYSTACKDATA; 325 /* variables for the parser stack */ 326 static YYSTACKDATA yystack; 327 #line 53 "expr.Y" 328 329 330 int yyparse(void); 331 332 int main() 333 {yyparse(); 334 } 335 336 337 338 #line 138 "expr.oxout.y" 339 long yyySSALspaceSize = 20000; 340 long yyyRSmaxSize = 1000; 341 long yyyTravStackMaxSize = 2000; 342 343 struct yyySolvedSAlistCell {yyyWAT attrbNum; 344 long next; 345 }; 346 347 #define yyyLambdaSSAL 0 348 long yyySSALCfreeList = yyyLambdaSSAL; 349 long yyyNewSSALC = 1; 350 351 struct yyySolvedSAlistCell *yyySSALspace; 352 353 long yyyNbytesStackStg; 354 355 356 357 yyyFT yyyRCIL[1]; 358 359 short yyyIIIEL[] = {0, 360 0,2,6,10,14,18,22,24, 361 }; 362 363 long yyyIIEL[] = { 364 0,0,0,0,0,0,0,0,0,0,0,0, 365 0,0,0,0,0,0,0,0,0,0,0,0, 366 1,1, 367 }; 368 369 long yyyIEL[] = { 370 0,0,0, 371 }; 372 373 yyyFT yyyEntL[1]; 374 375 void yyyfatal(char *msg) 376 {fputs(msg,stderr);exit(-1);} 377 378 379 380 #define yyySSALof 'S' 381 #define yyyRSof 'q' 382 #define yyyTSof 't' 383 384 385 386 void yyyHandleOverflow(char which) 387 {char *msg1,*msg2; 388 long oldSize,newSize; 389 switch(which) 390 { 391 case yyySSALof : 392 msg1 = "SSAL overflow: "; 393 oldSize = yyySSALspaceSize; 394 break; 395 case yyyRSof : 396 msg1 = "ready set overflow: "; 397 oldSize = yyyRSmaxSize; 398 break; 399 case yyyTSof : 400 msg1 = "traversal stack overflow: "; 401 oldSize = yyyTravStackMaxSize; 402 break; 403 default :; 404 } 405 newSize = (3*oldSize)/2; 406 if (newSize < 100) newSize = 100; 407 fputs(msg1,stderr); 408 fprintf(stderr,"size was %ld.\n",oldSize); 409 msg2 = " Have to modify evaluator: -Y%c%ld.\n"; 410 fprintf(stderr,msg2,which,newSize); 411 exit(-1); 412 } 413 414 415 416 void yyySignalEnts(yyyGNT *node,long startP,long stopP) 417 {yyyGNT *dumNode; 418 419 while (startP < stopP) 420 { 421 if (!yyyEntL[startP]) dumNode = node; 422 else dumNode = (node->cL)[yyyEntL[startP]-1]; 423 if (!(--((dumNode->refCountList)[yyyEntL[startP+1]] 424 ) 425 ) 426 ) 427 { 428 if (++yyyRSTop == yyyAfterRS) 429 {yyyHandleOverflow(yyyRSof); 430 break; 431 } 432 yyyRSTop->node = dumNode; 433 yyyRSTop->whichSym = yyyEntL[startP]; 434 yyyRSTop->wa = yyyEntL[startP+1]; 435 } 436 startP += 2; 437 } 438 } 439 440 441 442 443 444 445 void yyySolveAndSignal() { 446 long yyyiDum,*yyypL; 447 int yyyws,yyywa; 448 yyyGNT *yyyRSTopN,*yyyRefN; 449 yyyParent yyyRSTopNp; 450 451 452 yyyRSTopNp = (yyyRSTopN = yyyRSTop->node)->parent; 453 yyyRefN= (yyyws = (yyyRSTop->whichSym))?yyyRSTopNp.noderef:yyyRSTopN; 454 yyywa = yyyRSTop->wa; 455 yyyRSTop--; 456 switch(yyyRefN->prodNum) { 457 case 1: /***yacc rule 1***/ 458 switch (yyyws) { 459 } 460 break; 461 case 2: /***yacc rule 2***/ 462 switch (yyyws) { 463 } 464 break; 465 case 3: /***yacc rule 3***/ 466 switch (yyyws) { 467 } 468 break; 469 case 4: /***yacc rule 4***/ 470 switch (yyyws) { 471 } 472 break; 473 case 5: /***yacc rule 5***/ 474 switch (yyyws) { 475 } 476 break; 477 case 6: /***yacc rule 6***/ 478 switch (yyyws) { 479 } 480 break; 481 case 7: /***yacc rule 7***/ 482 switch (yyyws) { 483 case 1: /**/ 484 switch (yyywa) { 485 } 486 break; 487 } 488 break; 489 case 8: /***yacc rule 8***/ 490 switch (yyyws) { 491 case 1: /**/ 492 switch (yyywa) { 493 } 494 break; 495 } 496 break; 497 } /* switch */ 498 499 if (yyyws) /* the just-solved instance was inherited. */ 500 {if (yyyRSTopN->prodNum) 501 {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopN->prodNum]] + yyywa; 502 yyySignalEnts(yyyRSTopN,yyyIEL[yyyiDum], 503 yyyIEL[yyyiDum+1] 504 ); 505 } 506 } 507 else /* the just-solved instance was synthesized. */ 508 {if (!(yyyRSTopN->parentIsStack)) /* node has a parent. */ 509 {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopNp.noderef->prodNum] + 510 yyyRSTopN->whichSym 511 ] + 512 yyywa; 513 yyySignalEnts(yyyRSTopNp.noderef, 514 yyyIEL[yyyiDum], 515 yyyIEL[yyyiDum+1] 516 ); 517 } 518 else /* node is still on the stack--it has no parent yet. */ 519 {yyypL = &(yyyRSTopNp.stackref->solvedSAlist); 520 if (yyySSALCfreeList == yyyLambdaSSAL) 521 {yyySSALspace[yyyNewSSALC].next = *yyypL; 522 if ((*yyypL = yyyNewSSALC++) == yyySSALspaceSize) 523 yyyHandleOverflow(yyySSALof); 524 } 525 else 526 {yyyiDum = yyySSALCfreeList; 527 yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; 528 yyySSALspace[yyyiDum].next = *yyypL; 529 *yyypL = yyyiDum; 530 } 531 yyySSALspace[*yyypL].attrbNum = yyywa; 532 } 533 } 534 535 } /* yyySolveAndSignal */ 536 537 538 539 540 541 542 #define condStg unsigned int conds; 543 #define yyyClearConds {yyyTST->conds = 0;} 544 #define yyySetCond(n) {yyyTST->conds += (1<<(n));} 545 #define yyyCond(n) ((yyyTST->conds & (1<<(n)))?1:0) 546 547 548 549 struct yyyTravStackItem {yyyGNT *node; 550 char isReady; 551 condStg 552 }; 553 554 555 556 void yyyDoTraversals(yyyGNT *rootNode) 557 {struct yyyTravStackItem *yyyTravStack,*yyyTST,*yyyAfterTravStack; 558 yyyGNT *yyyTSTn,**yyyCLptr2; 559 int yyyi,yyyRL,yyyPass; 560 int i; 561 562 if (!yyyYok) return; 563 if ((yyyTravStack = 564 ((struct yyyTravStackItem *) 565 calloc((size_t)yyyTravStackMaxSize, 566 (size_t)sizeof(struct yyyTravStackItem) 567 ) 568 ) 569 ) 570 == 571 (struct yyyTravStackItem *)NULL 572 ) 573 {fputs("malloc error in traversal stack allocation\n",stderr); 574 exit(-1); 575 } 576 577 yyyAfterTravStack = yyyTravStack + yyyTravStackMaxSize; 578 yyyTravStack++; 579 580 581 for (yyyi=0; yyyi<2; yyyi++) { 582 yyyTST = yyyTravStack; 583 yyyTST->node = rootNode; 584 yyyTST->isReady = 0; 585 yyyClearConds 586 587 while(yyyTST >= yyyTravStack) 588 {yyyTSTn = yyyTST->node; 589 if (yyyTST->isReady) 590 {yyyPass = 1; 591 goto yyyTravSwitch; 592 yyyTpop: 593 yyyTST--; 594 } 595 else 596 {yyyPass = 0; 597 goto yyyTravSwitch; 598 yyyTpush: 599 yyyTST->isReady = 1; 600 if (yyyTSTn->prodNum) 601 {if (yyyRL) 602 {yyyCLptr2 = yyyTSTn->cL; 603 i = yyyTSTn->cLlen; 604 while (i--) 605 {if (++yyyTST == yyyAfterTravStack) 606 yyyHandleOverflow(yyyTSof); 607 else 608 {yyyTST->node = *yyyCLptr2; 609 yyyTST->isReady = 0; 610 yyyClearConds 611 } 612 yyyCLptr2++; 613 } 614 } /* right to left */ 615 else /* left to right */ 616 {i = yyyTSTn->cLlen; 617 yyyCLptr2 = yyyTSTn->cL + i; 618 while (i--) 619 {yyyCLptr2--; 620 if (++yyyTST == yyyAfterTravStack) 621 yyyHandleOverflow(yyyTSof); 622 else 623 {yyyTST->node = *yyyCLptr2; 624 yyyTST->isReady = 0; 625 yyyClearConds 626 } 627 } 628 } /* left to right */ 629 } 630 } /* else */ 631 continue; 632 yyyTravSwitch: 633 switch(yyyTSTn->prodNum) { 634 case 1: 635 switch(yyyi) { 636 case 0: 637 switch(yyyPass) { 638 case 0: 639 yyyRL = 0;yyySetCond(0) 640 641 if (! 642 #line 24 "expr.Y" 643 (1) 644 #line 444 "expr.oxout.y" 645 ) yyySetCond(1) 646 yyySetCond(2) 647 648 case 1: 649 650 if (yyyCond(0) != yyyPass) { 651 #line 24 "expr.Y" 652 653 #line 453 "expr.oxout.y" 654 } 655 if (yyyCond(1) != yyyPass) { 656 #line 24 "expr.Y" 657 printf("\n"); 658 659 #line 459 "expr.oxout.y" 660 } 661 if (yyyCond(2) != yyyPass) { 662 #line 25 "expr.Y" 663 printf("prefix: "); 664 665 #line 465 "expr.oxout.y" 666 } 667 break; 668 } 669 break; 670 case 1: 671 switch(yyyPass) { 672 case 0: 673 yyyRL = 0; 674 if ( 675 #line 23 "expr.Y" 676 (1) 677 #line 477 "expr.oxout.y" 678 ) yyySetCond(2) 679 680 case 1: 681 682 if (yyyCond(0) != yyyPass) { 683 #line 22 "expr.Y" 684 printf("\n"); 685 686 #line 486 "expr.oxout.y" 687 } 688 if (yyyCond(1) != yyyPass) { 689 #line 23 "expr.Y" 690 691 #line 491 "expr.oxout.y" 692 } 693 if (yyyCond(2) != yyyPass) { 694 #line 23 "expr.Y" 695 printf("postfix: ")/* missing ; */ 696 697 #line 497 "expr.oxout.y" 698 } 699 break; 700 } 701 break; 702 } 703 704 break; 705 case 2: 706 switch(yyyi) { 707 case 0: 708 switch(yyyPass) { 709 case 0: 710 yyyRL = 0;yyySetCond(0) 711 712 case 1: 713 714 if (yyyCond(0) != yyyPass) { 715 #line 29 "expr.Y" 716 printf(" * "); 717 718 #line 518 "expr.oxout.y" 719 } 720 break; 721 } 722 break; 723 case 1: 724 switch(yyyPass) { 725 case 0: 726 yyyRL = 0; 727 case 1: 728 729 if (yyyCond(0) != yyyPass) { 730 #line 28 "expr.Y" 731 printf(" * "); 732 733 #line 533 "expr.oxout.y" 734 } 735 break; 736 } 737 break; 738 } 739 740 break; 741 case 3: 742 switch(yyyi) { 743 case 0: 744 switch(yyyPass) { 745 case 0: 746 yyyRL = 0;yyySetCond(0) 747 748 case 1: 749 750 if (yyyCond(0) != yyyPass) { 751 #line 32 "expr.Y" 752 printf(" + "); 753 754 #line 554 "expr.oxout.y" 755 } 756 break; 757 } 758 break; 759 case 1: 760 switch(yyyPass) { 761 case 0: 762 yyyRL = 0; 763 case 1: 764 765 if (yyyCond(0) != yyyPass) { 766 #line 33 "expr.Y" 767 printf(" + "); 768 769 #line 569 "expr.oxout.y" 770 } 771 break; 772 } 773 break; 774 } 775 776 break; 777 case 4: 778 switch(yyyi) { 779 case 0: 780 switch(yyyPass) { 781 case 0: 782 yyyRL = 0;yyySetCond(0) 783 784 case 1: 785 786 if (yyyCond(0) != yyyPass) { 787 #line 37 "expr.Y" 788 printf(" / "); 789 790 #line 590 "expr.oxout.y" 791 } 792 break; 793 } 794 break; 795 case 1: 796 switch(yyyPass) { 797 case 0: 798 yyyRL = 0; 799 case 1: 800 801 if (yyyCond(0) != yyyPass) { 802 #line 36 "expr.Y" 803 printf(" / "); 804 805 #line 605 "expr.oxout.y" 806 } 807 break; 808 } 809 break; 810 } 811 812 break; 813 case 5: 814 switch(yyyi) { 815 case 0: 816 switch(yyyPass) { 817 case 0: 818 yyyRL = 0;yyySetCond(0) 819 820 case 1: 821 822 if (yyyCond(0) != yyyPass) { 823 #line 41 "expr.Y" 824 printf(" - "); 825 826 #line 626 "expr.oxout.y" 827 } 828 break; 829 } 830 break; 831 case 1: 832 switch(yyyPass) { 833 case 0: 834 yyyRL = 0; 835 case 1: 836 837 if (yyyCond(0) != yyyPass) { 838 #line 40 "expr.Y" 839 printf(" - "); 840 841 #line 641 "expr.oxout.y" 842 } 843 break; 844 } 845 break; 846 } 847 848 break; 849 case 6: 850 switch(yyyi) { 851 case 0: 852 switch(yyyPass) { 853 case 0: 854 yyyRL = 0; 855 case 1: 856 857 break; 858 } 859 break; 860 case 1: 861 switch(yyyPass) { 862 case 0: 863 yyyRL = 0; 864 case 1: 865 866 break; 867 } 868 break; 869 } 870 871 break; 872 case 7: 873 switch(yyyi) { 874 case 0: 875 switch(yyyPass) { 876 case 0: 877 yyyRL = 0;yyySetCond(0) 878 879 case 1: 880 881 if (yyyCond(0) != yyyPass) { 882 #line 46 "expr.Y" 883 printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); 884 885 #line 685 "expr.oxout.y" 886 } 887 break; 888 } 889 break; 890 case 1: 891 switch(yyyPass) { 892 case 0: 893 yyyRL = 0; 894 case 1: 895 896 if (yyyCond(0) != yyyPass) { 897 #line 45 "expr.Y" 898 printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); 899 900 #line 700 "expr.oxout.y" 901 } 902 break; 903 } 904 break; 905 } 906 907 break; 908 case 8: 909 switch(yyyi) { 910 case 0: 911 switch(yyyPass) { 912 case 0: 913 yyyRL = 0;yyySetCond(0) 914 915 case 1: 916 917 if (yyyCond(0) != yyyPass) { 918 #line 50 "expr.Y" 919 printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); 920 921 #line 721 "expr.oxout.y" 922 } 923 break; 924 } 925 break; 926 case 1: 927 switch(yyyPass) { 928 case 0: 929 yyyRL = 0; 930 case 1: 931 932 if (yyyCond(0) != yyyPass) { 933 #line 49 "expr.Y" 934 printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); 935 936 #line 736 "expr.oxout.y" 937 } 938 break; 939 } 940 break; 941 } 942 943 break; 944 } /* switch */ 945 if (yyyPass) goto yyyTpop; else goto yyyTpush; 946 } /* while */ 947 } /* for */ 948 } /* yyyDoTraversals */ 949 950 void yyyExecuteRRsection(yyyGNT *rootNode) { 951 int yyyi; 952 long cycleSum = 0; 953 long nNZrc = 0; 954 955 if (!yyyYok) return; 956 yyyCheckUnsolvedInstTrav(rootNode,&nNZrc,&cycleSum); 957 if (nNZrc) 958 { 959 fputs("\n\n\n**********\n",stderr); 960 fputs("cycle detected in completed parse tree",stderr); 961 fputs(" after decoration.\n",stderr); 962 #if CYCLE_VERBOSE 963 fprintf(stderr, 964 "number of unsolved attribute instances == %ld.\n", 965 nNZrc 966 ); 967 fprintf(stderr, 968 "total number of remaining dependencies == %ld.\n", 969 cycleSum 970 ); 971 fputs("average number of remaining dependencies\n",stderr); 972 fprintf(stderr," per unsolved instance == %f.\n", 973 ((float)(cycleSum)/(float)(nNZrc)) 974 ); 975 #endif 976 fprintf(stderr, 977 "searching parse tree for %ld unsolved instances:\n", 978 nNZrc 979 ); 980 yyyUnsolvedInstSearchTravAux(rootNode); 981 } 982 yyyDoTraversals(rootNode); 983 } /* yyyExecuteRRsection */ 984 985 986 987 yyyWAT yyyLRCIL[2] = {0,0, 988 }; 989 990 991 992 void yyyYoxInit(void) 993 { 994 static int yyyInitDone = 0; 995 if (yyyInitDone) return; 996 997 if ((yyyRS = (struct yyyRSitem *) 998 calloc((size_t)(yyyRSmaxSize+1), (size_t)sizeof(struct yyyRSitem)) 999 ) 1000 == 1001 ((struct yyyRSitem *) NULL) 1002 ) 1003 yyyfatal("malloc error in ox ready set space allocation\n"); 1004 yyyRS++; 1005 yyyAfterRS = yyyRS + yyyRSmaxSize; 1006 1007 1008 if ((yyySSALspace = (struct yyySolvedSAlistCell *) 1009 calloc((size_t)(yyySSALspaceSize+1), (size_t)sizeof(struct yyySolvedSAlistCell)) 1010 ) 1011 == 1012 ((struct yyySolvedSAlistCell *) NULL) 1013 ) 1014 yyyfatal("malloc error in stack solved list space allocation\n"); 1015 yyyInitDone = 1; 1016 1017 yyyRSTop = yyyRS - 1; 1018 } /* yyyYoxInit */ 1019 1020 1021 1022 void yyyDecorate(void) 1023 { 1024 while (yyyRSTop >= yyyRS) 1025 yyySolveAndSignal(); 1026 } 1027 1028 1029 1030 void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...) 1031 {yyyWST i; 1032 yyySIT **yyyOxStackItem = &yyval_OxAttrbs->yyyOxStackItem; 1033 yyyGNT *gnpDum; 1034 va_list ap; 1035 1036 *yyyOxStackItem = (yyySIT *) malloc((size_t)sizeof(yyySIT)); 1037 if (*yyyOxStackItem == (yyySIT *) NULL) 1038 yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); 1039 (*yyyOxStackItem)->node = 1040 (yyyGNT *) malloc((size_t)sizeof(yyyGNT)); 1041 if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) 1042 yyyfatal("malloc error in ox node space allocation\n"); 1043 (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; 1044 (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; 1045 (*yyyOxStackItem)->node->parentIsStack = 1; 1046 (*yyyOxStackItem)->node->cLlen = yyyRHSlength; 1047 (*yyyOxStackItem)->node->cL = 1048 (yyyGNT **) calloc((size_t)yyyRHSlength, (size_t)sizeof(yyyGNT *)); 1049 if ((*yyyOxStackItem)->node->cL == (yyyGNT **) NULL) 1050 yyyfatal("malloc error in ox child list space allocation\n"); 1051 (*yyyOxStackItem)->node->refCountListLen = yyyNattrbs; 1052 (*yyyOxStackItem)->node->refCountList = 1053 (yyyRCT *) calloc((size_t)yyyNattrbs, (size_t)sizeof(yyyRCT)); 1054 if ((*yyyOxStackItem)->node->refCountList == (yyyRCT *) NULL) 1055 yyyfatal("malloc error in ox reference count list space allocation\n"); 1056 (*yyyOxStackItem)->node->prodNum = yyyProdNum; 1057 va_start(ap, yyval_OxAttrbs); 1058 for (i=1;i<=yyyRHSlength;i++) 1059 {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; 1060 gnpDum = (*yyyOxStackItem)->node->cL[i-1] = yaccStDum->node; 1061 gnpDum->whichSym = i; 1062 gnpDum->parent.noderef = (*yyyOxStackItem)->node; 1063 gnpDum->parentIsStack = 0; 1064 } 1065 va_end(ap); 1066 } 1067 1068 1069 1070 #define yyyDECORfREQ 50 1071 1072 1073 1074 void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...) 1075 {yyyWST i; 1076 yyySIT *yyyOxStackItem = yyval_OxAttrbs->yyyOxStackItem; 1077 long SSALptr,SSALptrHead,*cPtrPtr; 1078 long *pL; 1079 yyyGNT *gnpDum; 1080 long iTemp; 1081 long nextP; 1082 static unsigned short intNodeCount = yyyDECORfREQ; 1083 va_list ap; 1084 1085 nextP = startP; 1086 while (nextP < stopP) 1087 {if (yyyRCIL[nextP] == yyyR) 1088 {(yyyOxStackItem->node->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; 1089 } 1090 else 1091 {(((yyyOxStackItem->node->cL)[yyyRCIL[nextP]])->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; 1092 } 1093 nextP += 3; 1094 } 1095 pL = yyyIIEL + yyyIIIEL[yyyProdNum]; 1096 va_start(ap, yyval_OxAttrbs); 1097 for (i=1;i<=yyyRHSlength;i++) 1098 {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; 1099 pL++; 1100 SSALptrHead = SSALptr = *(cPtrPtr = &(yaccStDum->solvedSAlist)); 1101 if (SSALptr != yyyLambdaSSAL) 1102 {*cPtrPtr = yyyLambdaSSAL; 1103 do 1104 { 1105 iTemp = (*pL+yyySSALspace[SSALptr].attrbNum); 1106 yyySignalEnts(yyyOxStackItem->node, 1107 yyyIEL[iTemp], 1108 yyyIEL[iTemp+1] 1109 ); 1110 SSALptr = *(cPtrPtr = &(yyySSALspace[SSALptr].next)); 1111 } 1112 while (SSALptr != yyyLambdaSSAL); 1113 *cPtrPtr = yyySSALCfreeList; 1114 yyySSALCfreeList = SSALptrHead; 1115 } 1116 } 1117 va_end(ap); 1118 nextP = startP + 2; 1119 while (nextP < stopP) 1120 {if (!yyyRCIL[nextP]) 1121 {if (yyyRCIL[nextP-2] == yyyR) 1122 {pL = &(yyyOxStackItem->solvedSAlist); 1123 if (yyySSALCfreeList == yyyLambdaSSAL) 1124 {yyySSALspace[yyyNewSSALC].next = *pL; 1125 if ((*pL = yyyNewSSALC++) == yyySSALspaceSize) 1126 yyyHandleOverflow(yyySSALof); 1127 } 1128 else 1129 {iTemp = yyySSALCfreeList; 1130 yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; 1131 yyySSALspace[iTemp].next = *pL; 1132 *pL = iTemp; 1133 } 1134 yyySSALspace[*pL].attrbNum = yyyRCIL[nextP-1]; 1135 } 1136 else 1137 {if ((gnpDum = (yyyOxStackItem->node->cL)[yyyRCIL[nextP-2]])->prodNum != 0) 1138 { 1139 iTemp = yyyIIEL[yyyIIIEL[gnpDum->prodNum]] + yyyRCIL[nextP-1]; 1140 yyySignalEnts(gnpDum, 1141 yyyIEL[iTemp], 1142 yyyIEL[iTemp+1] 1143 ); 1144 } 1145 } 1146 } 1147 nextP += 3; 1148 } 1149 if (!--intNodeCount) 1150 {intNodeCount = yyyDECORfREQ; 1151 yyyDecorate(); 1152 } 1153 } 1154 1155 1156 1157 void yyyGenLeaf(int nAttrbs,int typeNum,long startP,long stopP,YYSTYPE *yylval) 1158 {yyyRCT *rcPdum; 1159 yyySIT **yyyOxStackItem = &yylval->yyyOxAttrbs.yyyOxStackItem; 1160 (*yyyOxStackItem) = (yyySIT *) malloc((size_t)sizeof(yyySIT)); 1161 if ((*yyyOxStackItem) == (yyySIT *) NULL) 1162 yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); 1163 (*yyyOxStackItem)->node = 1164 (yyyGNT *) malloc((size_t)sizeof(yyyGNT)) 1165 ; 1166 if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) 1167 yyyfatal("malloc error in ox node space allocation\n"); 1168 (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; 1169 (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; 1170 (*yyyOxStackItem)->node->parentIsStack = 1; 1171 (*yyyOxStackItem)->node->cLlen = 0; 1172 (*yyyOxStackItem)->node->cL = (yyyGNT **)NULL; 1173 (*yyyOxStackItem)->node->refCountListLen = nAttrbs; 1174 rcPdum = (*yyyOxStackItem)->node->refCountList = 1175 (yyyRCT *) calloc((size_t)nAttrbs, (size_t)sizeof(yyyRCT)); 1176 if (rcPdum == (yyyRCT *) NULL) 1177 yyyfatal("malloc error in ox reference count list space allocation\n"); 1178 while (startP < stopP) rcPdum[yyyLRCIL[startP++]] = 0; 1179 (*yyyOxStackItem)->node->prodNum = 0; 1180 (*yyyOxStackItem)->node->whichSym = 0; 1181 } 1182 1183 1184 1185 void yyyabort(void) 1186 {yyyYok = 0; 1187 } 1188 1189 1190 1191 1192 1193 #define yyyLastProdNum 8 1194 1195 1196 #define yyyNsorts 1 1197 1198 1199 int yyyProdsInd[] = { 1200 0, 1201 0, 2, 6, 10, 14, 18, 22, 24, 1202 26, 1203 }; 1204 1205 1206 int yyyProds[][2] = { 1207 { 116, 0},{ 462, 0},{ 462, 0},{ 462, 0},{ 412, 0}, 1208 { 462, 0},{ 462, 0},{ 462, 0},{ 420, 0},{ 462, 0}, 1209 { 462, 0},{ 462, 0},{ 452, 0},{ 462, 0},{ 462, 0}, 1210 { 462, 0},{ 436, 0},{ 462, 0},{ 462, 0},{ 396, 0}, 1211 { 462, 0},{ 404, 0},{ 462, 0},{ 619, 1},{ 462, 0}, 1212 { 567, 1}, 1213 }; 1214 1215 1216 int yyySortsInd[] = { 1217 0, 1218 0, 1219 1, 1220 }; 1221 1222 1223 int yyySorts[] = { 1224 413, 1225 }; 1226 1227 1228 1229 char *yyyStringTab[] = { 1230 0,0,0,0,0, 1231 0,0,0,0,0, 1232 0,0,0,0,0, 1233 0,0,0,0,0, 1234 0,0,0,0,0, 1235 0,0,0,0,0, 1236 0,0,0,0,0, 1237 0,0,0,0,0, 1238 0,0,0,0,0, 1239 0,0,0,0,0, 1240 0,0,0,0,0, 1241 0,0,0,0,0, 1242 0,0,0,0,0, 1243 0,0,0,0,0, 1244 0,0,0,0,0, 1245 0,0,0,0,0, 1246 0,0,0,0,0, 1247 0,0,0,0,0, 1248 0,0,0,0,0, 1249 0,0,0,0,0, 1250 0,0,0,0,0, 1251 0,0,0,0,0, 1252 0,0,0,0,0, 1253 0,"s",0,0,0, 1254 0,0,"y",0,0, 1255 0,0,0,0,0, 1256 0,0,0,0,0, 1257 0,0,0,0,0, 1258 0,0,0,0,0, 1259 0,0,0,0,0, 1260 0,0,0,0,0, 1261 0,0,0,0,0, 1262 0,0,0,0,0, 1263 0,0,0,0,0, 1264 0,0,0,0,0, 1265 0,0,0,0,0, 1266 0,0,0,0,0, 1267 0,0,0,0,0, 1268 0,0,0,0,0, 1269 0,0,0,0,0, 1270 0,0,0,0,0, 1271 0,0,0,0,0, 1272 0,0,0,0,0, 1273 0,0,0,0,0, 1274 0,0,0,0,0, 1275 0,0,0,0,0, 1276 0,0,0,0,0, 1277 0,0,0,0,0, 1278 0,0,0,0,0, 1279 0,0,0,0,0, 1280 0,0,0,0,0, 1281 0,0,0,0,0, 1282 0,0,0,0,0, 1283 0,0,0,0,0, 1284 0,0,0,0,0, 1285 0,0,0,0,0, 1286 0,0,0,0,0, 1287 0,0,0,0,0, 1288 0,0,0,0,0, 1289 0,0,0,0,0, 1290 0,0,0,0,0, 1291 0,0,0,0,0, 1292 0,0,0,0,0, 1293 0,0,0,0,0, 1294 0,0,0,0,0, 1295 0,"LRpre",0,0,0, 1296 0,0,0,0,0, 1297 0,0,0,0,0, 1298 0,0,0,0,0, 1299 0,0,0,0,0, 1300 0,0,0,0,0, 1301 0,0,0,0,0, 1302 0,0,0,0,0, 1303 0,0,0,0,0, 1304 0,0,0,0,0, 1305 0,0,0,0,0, 1306 0,0,0,0,0, 1307 0,0,0,0,0, 1308 0,0,0,0,0, 1309 0,"'('",0,0,0, 1310 0,0,0,0,"')'", 1311 0,0,0,0,0, 1312 0,0,"'*'","lexeme",0, 1313 0,0,0,0,0, 1314 "'+'",0,0,0,0, 1315 0,0,0,0,0, 1316 0,0,0,0,0, 1317 0,"'-'",0,0,0, 1318 0,0,0,0,0, 1319 0,0,0,0,0, 1320 0,0,"'/'",0,0, 1321 0,0,0,0,0, 1322 0,0,"expr",0,0, 1323 0,0,0,0,0, 1324 0,0,0,0,0, 1325 0,"printf",0,0,0, 1326 0,0,0,0,0, 1327 0,0,0,0,0, 1328 0,0,0,0,0, 1329 0,0,0,0,0, 1330 0,0,0,0,0, 1331 0,0,0,0,0, 1332 0,0,0,0,0, 1333 0,0,0,0,0, 1334 0,0,0,0,0, 1335 0,0,0,0,0, 1336 0,0,0,0,0, 1337 0,0,0,0,0, 1338 0,0,0,0,0, 1339 0,0,0,0,0, 1340 0,0,0,0,0, 1341 0,0,0,0,0, 1342 0,0,0,0,0, 1343 0,0,"CONST","LRpost",0, 1344 0,0,0,0,0, 1345 0,0,0,0,0, 1346 0,0,0,0,0, 1347 0,0,0,0,0, 1348 0,0,0,0,0, 1349 0,0,0,0,0, 1350 0,0,0,0,0, 1351 0,0,0,0,0, 1352 0,0,0,0,0, 1353 0,0,0,0,"ID", 1354 0,0,0,0,0, 1355 0,0,0,0,0, 1356 0,0,0,0,0, 1357 0,0,0,0,0, 1358 0,0,0,0,0, 1359 0,0,0,0,0, 1360 0,0,0,0,0, 1361 0,0,0,0,0, 1362 0,0,0,0,0, 1363 0,0,0,0,0, 1364 0,0,0,0,0, 1365 0,0,0,0,0, 1366 0,0,0,0,0, 1367 0,0,0,0,0, 1368 0,0,0,0,0, 1369 0,0,0,0,0, 1370 0,0,0,0,0, 1371 0,0,0,0,0, 1372 0,0,0,0,0, 1373 0,0,0,0,0, 1374 0,0,0,0,0, 1375 0,0,0,0,0, 1376 0,0,0,0,0, 1377 0,0,0,0,0, 1378 0,0,0,0,0, 1379 0,0,0,0,0, 1380 0,0,0,0,0, 1381 0,0,0,0,0, 1382 0,0,0,0,0, 1383 0,0,0,0,0, 1384 0,0,0,0,0, 1385 0,0,0,0,0, 1386 0,0,0,0,0, 1387 0,0,0,0,0, 1388 0,0,0,0,0, 1389 0,0,0,0,0, 1390 0,0,0,0,0, 1391 0,0,0,0,0, 1392 0,0,0,0,0, 1393 0,0,0,0,0, 1394 0,0,0,0,0, 1395 0,0,0,0,0, 1396 0,0,0,0,0, 1397 0,0,0,0,0, 1398 0,0,0,0,0, 1399 0,0,0,0,0, 1400 0,0,0,0,0, 1401 0,0,0,0,0, 1402 0,0,0,0,0, 1403 0,0,0,0,0, 1404 0,0,0,0,0, 1405 0,0,0,0,0, 1406 0,0,0,0,0, 1407 0,0,0,0,0, 1408 0,0,0,0,0, 1409 0,0,0,0,0, 1410 0,0,0,0,0, 1411 0,0,0,0,0, 1412 0,0,0,0,0, 1413 0,0,0,0,0, 1414 0,0,0,0,0, 1415 0,0,0,0,0, 1416 0,0,0,0,0, 1417 0,0,0,0,0, 1418 0,0,0,0,0, 1419 0,0,0,0,0, 1420 0,0,0,0,0, 1421 0,0,0,0,0, 1422 0,0,0,0,0, 1423 0,0,0,0,0, 1424 0,0,0,0,0, 1425 0,0,0,0,0, 1426 0,0,0,0,0, 1427 0,0,0,0,0, 1428 0,0,0,0,0, 1429 0,0,0,0,0, 1430 0,0,0,0,0, 1431 0,0,0,0,0, 1432 0,0,0,0,0, 1433 0,0,0,0,0, 1434 0,0,0,0,0, 1435 0,0,0,0,0, 1436 0,0,0,0,0, 1437 0,0,0,0,0, 1438 0,0,0,0,0, 1439 0,0,0,0,0, 1440 0,0,0,0,0, 1441 0,0,0,0,0, 1442 0,0,0,0,0, 1443 0,0,0,0,0, 1444 0,0,0,0,0, 1445 0,0,0,0,0, 1446 0,0,0,0,0, 1447 0,0,0,0,0, 1448 0,0,0,0,0, 1449 0,0,0,0,0, 1450 0,0,0,0,0, 1451 0,0,0,0,0, 1452 0,0,0,0,0, 1453 0,0,0,0,0, 1454 0,0,0,0,0, 1455 0,0,0,0,0, 1456 0,0,0,0,0, 1457 0,0,0,0,0, 1458 0,0,0,0,0, 1459 0,0,0,0,0, 1460 0,0,0,0,0, 1461 0,0,0,0,0, 1462 0,0,0,0,0, 1463 0,0,0,0,0, 1464 0,0,0,0,0, 1465 0,0,0,0,0, 1466 0,0,0,0,0, 1467 0,0,0,0,0, 1468 0,0,0,0,0, 1469 0,0,0,0,0, 1470 0,0,0,0,0, 1471 0,0,0,0,0, 1472 0,0,0,0,0, 1473 0,0,0,0,0, 1474 0,0,0,0,0, 1475 0,0,0,0,0, 1476 0, 1477 }; 1478 1479 1480 1481 #define yyySizeofProd(num) (yyyProdsInd[(num)+1] - yyyProdsInd[(num)]) 1482 1483 #define yyyGSoccurStr(prodNum,symPos) \ 1484 (yyyStringTab[yyyProds[yyyProdsInd[(prodNum)] + (symPos)][0]]) 1485 1486 #define yyySizeofSort(num) (yyySortsInd[(num)+1] - yyySortsInd[(num)]) 1487 1488 #define yyySortOf(prodNum,symPos) \ 1489 (yyyProds[yyyProdsInd[(prodNum)] + (symPos)][1]) 1490 1491 #define yyyAttrbStr(prodNum,symPos,attrbNum) \ 1492 (yyyStringTab[yyySorts[yyySortsInd[yyySortOf(prodNum,symPos)] + \ 1493 (attrbNum) \ 1494 ] \ 1495 ] \ 1496 ) 1497 1498 1499 1500 void yyyShowProd(int i) 1501 {int j,nSyms; 1502 1503 nSyms = yyySizeofProd(i); 1504 for (j=0; j<nSyms; j++) 1505 { 1506 fprintf(stderr,"%s",yyyGSoccurStr(i,j)); 1507 if (j == 0) fputs(" : ",stderr); else putc(' ',stderr); 1508 } 1509 fputs(";\n",stderr); 1510 } 1511 1512 1513 1514 void yyyShowProds() 1515 {int i; for (i=1; i<=yyyLastProdNum; i++) yyyShowProd(i);} 1516 1517 1518 1519 void yyyShowSymsAndSorts() 1520 {int i; 1521 1522 for (i=1; i<=yyyLastProdNum; i++) 1523 {int j, nSyms; 1524 1525 fprintf(stderr, 1526 "\n\n\n---------------------------------- %3.1d\n",i); 1527 /* yyyShowProd(i); */ 1528 nSyms = yyySizeofProd(i); 1529 for (j=0; j<nSyms; j++) 1530 {int k, sortSize; 1531 1532 fprintf(stderr,"%s\n",yyyGSoccurStr(i,j)); 1533 sortSize = yyySizeofSort(yyySortOf(i,j)); 1534 for (k=0; k<sortSize; k++) 1535 fprintf(stderr," %s\n",yyyAttrbStr(i,j,k)); 1536 if (j == 0) fputs("->\n",stderr); 1537 else 1538 putc('\n',stderr); 1539 } 1540 } 1541 } 1542 1543 1544 1545 void yyyCheckNodeInstancesSolved(yyyGNT *np) 1546 {int mysort,sortSize,i,prodNum,symPos,inTerminalNode; 1547 int nUnsolvedInsts = 0; 1548 1549 if (np->prodNum != 0) 1550 {inTerminalNode = 0; 1551 prodNum = np->prodNum; 1552 symPos = 0; 1553 } 1554 else 1555 {inTerminalNode = 1; 1556 prodNum = np->parent.noderef->prodNum; 1557 symPos = np->whichSym; 1558 } 1559 mysort = yyySortOf(prodNum,symPos); 1560 sortSize = yyySizeofSort(mysort); 1561 for (i=0; i<sortSize; i++) 1562 if ((np->refCountList)[i] != 0) nUnsolvedInsts += 1; 1563 if (nUnsolvedInsts) 1564 {fprintf(stderr, 1565 "\nFound node that has %d unsolved attribute instance(s).\n", 1566 nUnsolvedInsts 1567 ); 1568 fprintf(stderr,"Node is labeled \"%s\".\n", 1569 yyyGSoccurStr(prodNum,symPos)); 1570 if (inTerminalNode) 1571 {fputs("Node is terminal. Its parent production is:\n ",stderr); 1572 yyyShowProd(prodNum); 1573 } 1574 else 1575 {fputs("Node is nonterminal. ",stderr); 1576 if (!(np->parentIsStack)) 1577 {fprintf(stderr, 1578 "Node is %dth child in its parent production:\n ", 1579 np->whichSym 1580 ); 1581 yyyShowProd(np->parent.noderef->prodNum); 1582 } 1583 fputs("Node is on left hand side of this production:\n ",stderr); 1584 yyyShowProd(np->prodNum); 1585 } 1586 fputs("The following instances are unsolved:\n",stderr); 1587 for (i=0; i<sortSize; i++) 1588 if ((np->refCountList)[i] != 0) 1589 fprintf(stderr," %-16s still has %1d dependencies.\n", 1590 yyyAttrbStr(prodNum,symPos,i),(np->refCountList)[i]); 1591 } 1592 } 1593 1594 1595 1596 void yyyCheckUnsolvedInstTrav(yyyGNT *pNode,long *nNZrc,long *cycleSum) 1597 {yyyGNT **yyyCLpdum; 1598 yyyRCT *rcp; 1599 int i; 1600 1601 /* visit the refCountList of each node in the tree, and sum the non-zero refCounts */ 1602 rcp = pNode->refCountList; 1603 i = pNode->refCountListLen; 1604 while (i--) 1605 if (*rcp++) {*cycleSum += *(rcp - 1); (*nNZrc)++;} 1606 yyyCLpdum = pNode->cL; 1607 i = pNode->cLlen; 1608 while (i--) 1609 { 1610 yyyCheckUnsolvedInstTrav(*yyyCLpdum,nNZrc,cycleSum); 1611 yyyCLpdum++; 1612 } 1613 } 1614 1615 1616 1617 void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode) 1618 {yyyGNT **yyyCLpdum; 1619 int i; 1620 1621 yyyCheckNodeInstancesSolved(pNode); 1622 yyyCLpdum = pNode->cL; 1623 i = pNode->cLlen; 1624 while (i--) 1625 { 1626 yyyUnsolvedInstSearchTravAux(*yyyCLpdum); 1627 yyyCLpdum++; 1628 } 1629 } 1630 1631 1632 1633 void yyyUnsolvedInstSearchTrav(yyyGNT *pNode) 1634 {yyyGNT **yyyCLpdum; 1635 int i; 1636 1637 yyyCLpdum = pNode->cL; 1638 i = pNode->cLlen; 1639 while (i--) 1640 { 1641 yyyUnsolvedInstSearchTravAux(*yyyCLpdum); 1642 yyyCLpdum++; 1643 } 1644 } 1645 1646 1647 1648 #line 1647 "expr.oxout.tab.c" 1649 1650 #if YYDEBUG 1651 #include <stdio.h> /* needed for printf */ 1652 #endif 1653 1654 #include <stdlib.h> /* needed for malloc, etc */ 1655 #include <string.h> /* needed for memset */ 1656 1657 /* allocate initial stack or double stack size, up to YYMAXDEPTH */ 1658 static int yygrowstack(YYSTACKDATA *data) 1659 { 1660 int i; 1661 unsigned newsize; 1662 YYINT *newss; 1663 YYSTYPE *newvs; 1664 1665 if ((newsize = data->stacksize) == 0) 1666 newsize = YYINITSTACKSIZE; 1667 else if (newsize >= YYMAXDEPTH) 1668 return YYENOMEM; 1669 else if ((newsize *= 2) > YYMAXDEPTH) 1670 newsize = YYMAXDEPTH; 1671 1672 i = (int) (data->s_mark - data->s_base); 1673 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 1674 if (newss == 0) 1675 return YYENOMEM; 1676 1677 data->s_base = newss; 1678 data->s_mark = newss + i; 1679 1680 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 1681 if (newvs == 0) 1682 return YYENOMEM; 1683 1684 data->l_base = newvs; 1685 data->l_mark = newvs + i; 1686 1687 data->stacksize = newsize; 1688 data->s_last = data->s_base + newsize - 1; 1689 return 0; 1690 } 1691 1692 #if YYPURE || defined(YY_NO_LEAKS) 1693 static void yyfreestack(YYSTACKDATA *data) 1694 { 1695 free(data->s_base); 1696 free(data->l_base); 1697 memset(data, 0, sizeof(*data)); 1698 } 1699 #else 1700 #define yyfreestack(data) /* nothing */ 1701 #endif 1702 1703 #define YYABORT goto yyabort 1704 #define YYREJECT goto yyabort 1705 #define YYACCEPT goto yyaccept 1706 #define YYERROR goto yyerrlab 1707 1708 int 1709 YYPARSE_DECL() 1710 { 1711 int yym, yyn, yystate; 1712 #if YYDEBUG 1713 const char *yys; 1714 1715 if ((yys = getenv("YYDEBUG")) != 0) 1716 { 1717 yyn = *yys; 1718 if (yyn >= '0' && yyn <= '9') 1719 yydebug = yyn - '0'; 1720 } 1721 #endif 1722 1723 yym = 0; 1724 yyn = 0; 1725 yynerrs = 0; 1726 yyerrflag = 0; 1727 yychar = YYEMPTY; 1728 yystate = 0; 1729 1730 #if YYPURE 1731 memset(&yystack, 0, sizeof(yystack)); 1732 #endif 1733 1734 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1735 yystack.s_mark = yystack.s_base; 1736 yystack.l_mark = yystack.l_base; 1737 yystate = 0; 1738 *yystack.s_mark = 0; 1739 1740 yyloop: 1741 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 1742 if (yychar < 0) 1743 { 1744 yychar = YYLEX; 1745 if (yychar < 0) yychar = YYEOF; 1746 #if YYDEBUG 1747 if (yydebug) 1748 { 1749 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1750 printf("%sdebug: state %d, reading %d (%s)\n", 1751 YYPREFIX, yystate, yychar, yys); 1752 } 1753 #endif 1754 } 1755 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 1756 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 1757 { 1758 #if YYDEBUG 1759 if (yydebug) 1760 printf("%sdebug: state %d, shifting to state %d\n", 1761 YYPREFIX, yystate, yytable[yyn]); 1762 #endif 1763 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1764 yystate = yytable[yyn]; 1765 *++yystack.s_mark = yytable[yyn]; 1766 *++yystack.l_mark = yylval; 1767 yychar = YYEMPTY; 1768 if (yyerrflag > 0) --yyerrflag; 1769 goto yyloop; 1770 } 1771 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 1772 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 1773 { 1774 yyn = yytable[yyn]; 1775 goto yyreduce; 1776 } 1777 if (yyerrflag != 0) goto yyinrecovery; 1778 1779 YYERROR_CALL("syntax error"); 1780 1781 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 1782 yyerrlab: 1783 ++yynerrs; 1784 1785 yyinrecovery: 1786 if (yyerrflag < 3) 1787 { 1788 yyerrflag = 3; 1789 for (;;) 1790 { 1791 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 1792 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 1793 { 1794 #if YYDEBUG 1795 if (yydebug) 1796 printf("%sdebug: state %d, error recovery shifting\ 1797 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 1798 #endif 1799 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1800 yystate = yytable[yyn]; 1801 *++yystack.s_mark = yytable[yyn]; 1802 *++yystack.l_mark = yylval; 1803 goto yyloop; 1804 } 1805 else 1806 { 1807 #if YYDEBUG 1808 if (yydebug) 1809 printf("%sdebug: error recovery discarding state %d\n", 1810 YYPREFIX, *yystack.s_mark); 1811 #endif 1812 if (yystack.s_mark <= yystack.s_base) goto yyabort; 1813 --yystack.s_mark; 1814 --yystack.l_mark; 1815 } 1816 } 1817 } 1818 else 1819 { 1820 if (yychar == YYEOF) goto yyabort; 1821 #if YYDEBUG 1822 if (yydebug) 1823 { 1824 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1825 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 1826 YYPREFIX, yystate, yychar, yys); 1827 } 1828 #endif 1829 yychar = YYEMPTY; 1830 goto yyloop; 1831 } 1832 1833 yyreduce: 1834 #if YYDEBUG 1835 if (yydebug) 1836 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 1837 YYPREFIX, yystate, yyn, yyrule[yyn]); 1838 #endif 1839 yym = yylen[yyn]; 1840 if (yym > 0) 1841 yyval = yystack.l_mark[1-yym]; 1842 else 1843 memset(&yyval, 0, sizeof yyval); 1844 1845 switch (yyn) 1846 { 1847 case 1: 1848 #line 64 "expr.oxout.y" 1849 {yyyYoxInit();} 1850 break; 1851 case 2: 1852 #line 66 "expr.oxout.y" 1853 { 1854 yyyDecorate(); yyyExecuteRRsection(yystack.l_mark[0].yyyOxAttrbs.yyyOxStackItem->node); 1855 } 1856 break; 1857 case 3: 1858 #line 73 "expr.oxout.y" 1859 {if(yyyYok){ 1860 yyyGenIntNode(1,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); 1861 yyyAdjustINRC(1,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} 1862 break; 1863 case 4: 1864 #line 80 "expr.oxout.y" 1865 {if(yyyYok){ 1866 yyyGenIntNode(2,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); 1867 yyyAdjustINRC(2,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} 1868 break; 1869 case 5: 1870 #line 87 "expr.oxout.y" 1871 {if(yyyYok){ 1872 yyyGenIntNode(3,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); 1873 yyyAdjustINRC(3,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} 1874 break; 1875 case 6: 1876 #line 94 "expr.oxout.y" 1877 {if(yyyYok){ 1878 yyyGenIntNode(4,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); 1879 yyyAdjustINRC(4,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} 1880 break; 1881 case 7: 1882 #line 101 "expr.oxout.y" 1883 {if(yyyYok){ 1884 yyyGenIntNode(5,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); 1885 yyyAdjustINRC(5,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} 1886 break; 1887 case 8: 1888 #line 108 "expr.oxout.y" 1889 {if(yyyYok){ 1890 yyyGenIntNode(6,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); 1891 yyyAdjustINRC(6,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} 1892 break; 1893 case 9: 1894 #line 114 "expr.oxout.y" 1895 {if(yyyYok){ 1896 yyyGenIntNode(7,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); 1897 yyyAdjustINRC(7,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} 1898 break; 1899 case 10: 1900 #line 121 "expr.oxout.y" 1901 {if(yyyYok){ 1902 yyyGenIntNode(8,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); 1903 yyyAdjustINRC(8,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} 1904 break; 1905 #line 1904 "expr.oxout.tab.c" 1906 } 1907 yystack.s_mark -= yym; 1908 yystate = *yystack.s_mark; 1909 yystack.l_mark -= yym; 1910 yym = yylhs[yyn]; 1911 if (yystate == 0 && yym == 0) 1912 { 1913 #if YYDEBUG 1914 if (yydebug) 1915 printf("%sdebug: after reduction, shifting from state 0 to\ 1916 state %d\n", YYPREFIX, YYFINAL); 1917 #endif 1918 yystate = YYFINAL; 1919 *++yystack.s_mark = YYFINAL; 1920 *++yystack.l_mark = yyval; 1921 if (yychar < 0) 1922 { 1923 yychar = YYLEX; 1924 if (yychar < 0) yychar = YYEOF; 1925 #if YYDEBUG 1926 if (yydebug) 1927 { 1928 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1929 printf("%sdebug: state %d, reading %d (%s)\n", 1930 YYPREFIX, YYFINAL, yychar, yys); 1931 } 1932 #endif 1933 } 1934 if (yychar == YYEOF) goto yyaccept; 1935 goto yyloop; 1936 } 1937 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 1938 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 1939 yystate = yytable[yyn]; 1940 else 1941 yystate = yydgoto[yym]; 1942 #if YYDEBUG 1943 if (yydebug) 1944 printf("%sdebug: after reduction, shifting from state %d \ 1945 to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 1946 #endif 1947 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1948 *++yystack.s_mark = (YYINT) yystate; 1949 *++yystack.l_mark = yyval; 1950 goto yyloop; 1951 1952 yyoverflow: 1953 YYERROR_CALL("yacc stack overflow"); 1954 1955 yyabort: 1956 yyfreestack(&yystack); 1957 return (1); 1958 1959 yyaccept: 1960 yyfreestack(&yystack); 1961 return (0); 1962 } 1963