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