1313101Sjkim/* output from Ox version G1.04 */ 2313101Sjkim#line 1 "expr.Y" 3313101Sjkim#line 4 "expr.oxout.y" 4313101Sjkim%{ 5313101Sjkim#include <stdlib.h> 6313101Sjkim#include <string.h> 7313101Sjkim%} 8313101Sjkim#line 1 "expr.Y" 9313101Sjkim/* Y-file for translation of infix expressions to prefix and postfix */ 10313101Sjkim%token ID CONST 11313101Sjkim%start yyyAugNonterm 12313101Sjkim%left '+' '-' 13313101Sjkim%left '*' '/' 14313101Sjkim%nonassoc '*' 15313101Sjkim 16313101Sjkim%{ 17313101Sjkim#include "expr.oxout.h" 18313101Sjkim#include <stdio.h> 19313101Sjkim 20313101Sjkimextern int yylex(void); 21313101Sjkimextern void yyerror(const char *); 22313101Sjkim%} 23313101Sjkim 24313101Sjkim#line 25 "expr.oxout.y" 25313101Sjkim 26313101Sjkim%{ 27313101Sjkim#include <limits.h> 28313101Sjkim#define yyyR USHRT_MAX 29313101Sjkim%} 30313101Sjkim%type <yyyOxAttrbs> yyyAugNonterm 31313101Sjkim%union { 32313101Sjkimstruct yyyOxAttrbs { 33313101Sjkimstruct yyyStackItem *yyyOxStackItem; 34313101Sjkim} yyyOxAttrbs; 35313101Sjkim} 36313101Sjkim 37313101Sjkim%{ 38313101Sjkim#include <stdio.h> 39313101Sjkim#include <stdarg.h> 40313101Sjkim 41313101Sjkimstatic int yyyYok = 1; 42313101Sjkim 43313101Sjkimextern yyyFT yyyRCIL[]; 44313101Sjkim 45313101Sjkimvoid yyyExecuteRRsection(yyyGNT *rootNode); 46313101Sjkimvoid yyyYoxInit(void); 47313101Sjkimvoid yyyDecorate(void); 48313101Sjkimstruct yyyOxAttrbs; /* hack required to compensate for 'msta' behavior */ 49313101Sjkimvoid yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...); 50313101Sjkimvoid yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...); 51313101Sjkimvoid yyyCheckUnsolvedInstTrav(yyyGNT *rootNode,long *nNZrc,long *cycleSum); 52313101Sjkimvoid yyyUnsolvedInstSearchTrav(yyyGNT *pNode); 53313101Sjkimvoid yyyUnsolvedInstSearchTravAux(yyyGNT *pNode); 54313101Sjkimvoid yyyabort(void); 55313101Sjkim 56313101Sjkim%} 57313101Sjkim 58313101Sjkim 59313101Sjkim#line 20 "expr.Y" 60313101Sjkim%% 61313101Sjkim 62313101Sjkim#line 63 "expr.oxout.y" 63313101SjkimyyyAugNonterm 64313101Sjkim : {yyyYoxInit();} 65313101Sjkim s 66313101Sjkim { 67313101Sjkim yyyDecorate(); yyyExecuteRRsection($<yyyOxAttrbs>2.yyyOxStackItem->node); 68313101Sjkim } 69313101Sjkim ; 70313101Sjkim#line 21 "expr.Y" 71313101Sjkims : expr 72313101Sjkim#line 73 "expr.oxout.y" 73313101Sjkim{if(yyyYok){ 74313101SjkimyyyGenIntNode(1,1,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1); 75313101SjkimyyyAdjustINRC(1,1,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);}} 76313101Sjkim 77313101Sjkim#line 27 "expr.Y" 78313101Sjkimexpr : expr '*' expr 79313101Sjkim#line 80 "expr.oxout.y" 80313101Sjkim{if(yyyYok){ 81313101SjkimyyyGenIntNode(2,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3); 82313101SjkimyyyAdjustINRC(2,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}} 83313101Sjkim 84313101Sjkim#line 31 "expr.Y" 85313101Sjkim | expr '+' expr 86313101Sjkim#line 87 "expr.oxout.y" 87313101Sjkim{if(yyyYok){ 88313101SjkimyyyGenIntNode(3,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3); 89313101SjkimyyyAdjustINRC(3,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}} 90313101Sjkim 91313101Sjkim#line 35 "expr.Y" 92313101Sjkim | expr '/' expr 93313101Sjkim#line 94 "expr.oxout.y" 94313101Sjkim{if(yyyYok){ 95313101SjkimyyyGenIntNode(4,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3); 96313101SjkimyyyAdjustINRC(4,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}} 97313101Sjkim 98313101Sjkim#line 39 "expr.Y" 99313101Sjkim | expr '-' expr 100313101Sjkim#line 101 "expr.oxout.y" 101313101Sjkim{if(yyyYok){ 102313101SjkimyyyGenIntNode(5,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3); 103313101SjkimyyyAdjustINRC(5,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}} 104313101Sjkim 105313101Sjkim#line 43 "expr.Y" 106313101Sjkim | '(' expr ')' 107313101Sjkim#line 108 "expr.oxout.y" 108313101Sjkim{if(yyyYok){ 109313101SjkimyyyGenIntNode(6,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3); 110313101SjkimyyyAdjustINRC(6,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}} 111313101Sjkim#line 44 "expr.Y" 112313101Sjkim | ID 113313101Sjkim#line 114 "expr.oxout.y" 114313101Sjkim{if(yyyYok){ 115313101SjkimyyyGenIntNode(7,1,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1); 116313101SjkimyyyAdjustINRC(7,1,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);}} 117313101Sjkim 118313101Sjkim#line 48 "expr.Y" 119313101Sjkim | CONST 120313101Sjkim#line 121 "expr.oxout.y" 121313101Sjkim{if(yyyYok){ 122313101SjkimyyyGenIntNode(8,1,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1); 123313101SjkimyyyAdjustINRC(8,1,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);}} 124313101Sjkim 125313101Sjkim#line 52 "expr.Y" 126313101Sjkim ; 127313101Sjkim%% 128313101Sjkim 129313101Sjkimint yyparse(void); 130313101Sjkim 131313101Sjkimint main() 132313101Sjkim {yyparse(); 133313101Sjkim } 134313101Sjkim 135313101Sjkim 136313101Sjkim 137313101Sjkim#line 138 "expr.oxout.y" 138313101Sjkimlong yyySSALspaceSize = 20000; 139313101Sjkimlong yyyRSmaxSize = 1000; 140313101Sjkimlong yyyTravStackMaxSize = 2000; 141313101Sjkim 142313101Sjkimstruct yyySolvedSAlistCell {yyyWAT attrbNum; 143313101Sjkim long next; 144313101Sjkim }; 145313101Sjkim 146313101Sjkim#define yyyLambdaSSAL 0 147313101Sjkimlong yyySSALCfreeList = yyyLambdaSSAL; 148313101Sjkimlong yyyNewSSALC = 1; 149313101Sjkim 150313101Sjkimstruct yyySolvedSAlistCell *yyySSALspace; 151313101Sjkim 152313101Sjkimlong yyyNbytesStackStg; 153313101Sjkim 154313101Sjkim 155313101Sjkim 156313101SjkimyyyFT yyyRCIL[1]; 157313101Sjkim 158313101Sjkimshort yyyIIIEL[] = {0, 159313101Sjkim0,2,6,10,14,18,22,24, 160313101Sjkim}; 161313101Sjkim 162313101Sjkimlong yyyIIEL[] = { 163313101Sjkim0,0,0,0,0,0,0,0,0,0,0,0, 164313101Sjkim0,0,0,0,0,0,0,0,0,0,0,0, 165313101Sjkim1,1, 166313101Sjkim}; 167313101Sjkim 168313101Sjkimlong yyyIEL[] = { 169313101Sjkim0,0,0, 170313101Sjkim}; 171313101Sjkim 172313101SjkimyyyFT yyyEntL[1]; 173313101Sjkim 174313101Sjkimvoid yyyfatal(char *msg) 175313101Sjkim{fputs(msg,stderr);exit(-1);} 176313101Sjkim 177313101Sjkim 178313101Sjkim 179313101Sjkim#define yyySSALof 'S' 180313101Sjkim#define yyyRSof 'q' 181313101Sjkim#define yyyTSof 't' 182313101Sjkim 183313101Sjkim 184313101Sjkim 185313101Sjkimvoid yyyHandleOverflow(char which) 186313101Sjkim {char *msg1,*msg2; 187313101Sjkim long oldSize,newSize; 188313101Sjkim switch(which) 189313101Sjkim { 190313101Sjkim case yyySSALof : 191313101Sjkim msg1 = "SSAL overflow: "; 192313101Sjkim oldSize = yyySSALspaceSize; 193313101Sjkim break; 194313101Sjkim case yyyRSof : 195313101Sjkim msg1 = "ready set overflow: "; 196313101Sjkim oldSize = yyyRSmaxSize; 197313101Sjkim break; 198313101Sjkim case yyyTSof : 199313101Sjkim msg1 = "traversal stack overflow: "; 200313101Sjkim oldSize = yyyTravStackMaxSize; 201313101Sjkim break; 202313101Sjkim default :; 203313101Sjkim } 204313101Sjkim newSize = (3*oldSize)/2; 205313101Sjkim if (newSize < 100) newSize = 100; 206313101Sjkim fputs(msg1,stderr); 207313101Sjkim fprintf(stderr,"size was %ld.\n",oldSize); 208313101Sjkim msg2 = " Have to modify evaluator: -Y%c%ld.\n"; 209313101Sjkim fprintf(stderr,msg2,which,newSize); 210313101Sjkim exit(-1); 211313101Sjkim } 212313101Sjkim 213313101Sjkim 214313101Sjkim 215313101Sjkimvoid yyySignalEnts(yyyGNT *node,long startP,long stopP) 216313101Sjkim {yyyGNT *dumNode; 217313101Sjkim 218313101Sjkim while (startP < stopP) 219313101Sjkim { 220313101Sjkim if (!yyyEntL[startP]) dumNode = node; 221313101Sjkim else dumNode = (node->cL)[yyyEntL[startP]-1]; 222313101Sjkim if (!(--((dumNode->refCountList)[yyyEntL[startP+1]] 223313101Sjkim ) 224313101Sjkim ) 225313101Sjkim ) 226313101Sjkim { 227313101Sjkim if (++yyyRSTop == yyyAfterRS) 228313101Sjkim {yyyHandleOverflow(yyyRSof); 229313101Sjkim break; 230313101Sjkim } 231313101Sjkim yyyRSTop->node = dumNode; 232313101Sjkim yyyRSTop->whichSym = yyyEntL[startP]; 233313101Sjkim yyyRSTop->wa = yyyEntL[startP+1]; 234313101Sjkim } 235313101Sjkim startP += 2; 236313101Sjkim } 237313101Sjkim } 238313101Sjkim 239313101Sjkim 240313101Sjkim 241313101Sjkim 242313101Sjkim 243313101Sjkim 244313101Sjkimvoid yyySolveAndSignal() { 245313101Sjkimlong yyyiDum,*yyypL; 246313101Sjkimint yyyws,yyywa; 247313101SjkimyyyGNT *yyyRSTopN,*yyyRefN; 248313101SjkimyyyParent yyyRSTopNp; 249313101Sjkim 250313101Sjkim 251313101SjkimyyyRSTopNp = (yyyRSTopN = yyyRSTop->node)->parent; 252313101SjkimyyyRefN= (yyyws = (yyyRSTop->whichSym))?yyyRSTopNp.noderef:yyyRSTopN; 253313101Sjkimyyywa = yyyRSTop->wa; 254313101SjkimyyyRSTop--; 255313101Sjkimswitch(yyyRefN->prodNum) { 256313101Sjkimcase 1: /***yacc rule 1***/ 257313101Sjkim switch (yyyws) { 258313101Sjkim } 259313101Sjkimbreak; 260313101Sjkimcase 2: /***yacc rule 2***/ 261313101Sjkim switch (yyyws) { 262313101Sjkim } 263313101Sjkimbreak; 264313101Sjkimcase 3: /***yacc rule 3***/ 265313101Sjkim switch (yyyws) { 266313101Sjkim } 267313101Sjkimbreak; 268313101Sjkimcase 4: /***yacc rule 4***/ 269313101Sjkim switch (yyyws) { 270313101Sjkim } 271313101Sjkimbreak; 272313101Sjkimcase 5: /***yacc rule 5***/ 273313101Sjkim switch (yyyws) { 274313101Sjkim } 275313101Sjkimbreak; 276313101Sjkimcase 6: /***yacc rule 6***/ 277313101Sjkim switch (yyyws) { 278313101Sjkim } 279313101Sjkimbreak; 280313101Sjkimcase 7: /***yacc rule 7***/ 281313101Sjkim switch (yyyws) { 282313101Sjkim case 1: /**/ 283313101Sjkim switch (yyywa) { 284313101Sjkim } 285313101Sjkim break; 286313101Sjkim } 287313101Sjkimbreak; 288313101Sjkimcase 8: /***yacc rule 8***/ 289313101Sjkim switch (yyyws) { 290313101Sjkim case 1: /**/ 291313101Sjkim switch (yyywa) { 292313101Sjkim } 293313101Sjkim break; 294313101Sjkim } 295313101Sjkimbreak; 296313101Sjkim} /* switch */ 297313101Sjkim 298313101Sjkimif (yyyws) /* the just-solved instance was inherited. */ 299313101Sjkim {if (yyyRSTopN->prodNum) 300313101Sjkim {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopN->prodNum]] + yyywa; 301313101Sjkim yyySignalEnts(yyyRSTopN,yyyIEL[yyyiDum], 302313101Sjkim yyyIEL[yyyiDum+1] 303313101Sjkim ); 304313101Sjkim } 305313101Sjkim } 306313101Sjkim else /* the just-solved instance was synthesized. */ 307313101Sjkim {if (!(yyyRSTopN->parentIsStack)) /* node has a parent. */ 308313101Sjkim {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopNp.noderef->prodNum] + 309313101Sjkim yyyRSTopN->whichSym 310313101Sjkim ] + 311313101Sjkim yyywa; 312313101Sjkim yyySignalEnts(yyyRSTopNp.noderef, 313313101Sjkim yyyIEL[yyyiDum], 314313101Sjkim yyyIEL[yyyiDum+1] 315313101Sjkim ); 316313101Sjkim } 317313101Sjkim else /* node is still on the stack--it has no parent yet. */ 318313101Sjkim {yyypL = &(yyyRSTopNp.stackref->solvedSAlist); 319313101Sjkim if (yyySSALCfreeList == yyyLambdaSSAL) 320313101Sjkim {yyySSALspace[yyyNewSSALC].next = *yyypL; 321313101Sjkim if ((*yyypL = yyyNewSSALC++) == yyySSALspaceSize) 322313101Sjkim yyyHandleOverflow(yyySSALof); 323313101Sjkim } 324313101Sjkim else 325313101Sjkim {yyyiDum = yyySSALCfreeList; 326313101Sjkim yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; 327313101Sjkim yyySSALspace[yyyiDum].next = *yyypL; 328313101Sjkim *yyypL = yyyiDum; 329313101Sjkim } 330313101Sjkim yyySSALspace[*yyypL].attrbNum = yyywa; 331313101Sjkim } 332313101Sjkim } 333313101Sjkim 334313101Sjkim} /* yyySolveAndSignal */ 335313101Sjkim 336313101Sjkim 337313101Sjkim 338313101Sjkim 339313101Sjkim 340313101Sjkim 341313101Sjkim#define condStg unsigned int conds; 342313101Sjkim#define yyyClearConds {yyyTST->conds = 0;} 343313101Sjkim#define yyySetCond(n) {yyyTST->conds += (1<<(n));} 344313101Sjkim#define yyyCond(n) ((yyyTST->conds & (1<<(n)))?1:0) 345313101Sjkim 346313101Sjkim 347313101Sjkim 348313101Sjkimstruct yyyTravStackItem {yyyGNT *node; 349313101Sjkim char isReady; 350313101Sjkim condStg 351313101Sjkim }; 352313101Sjkim 353313101Sjkim 354313101Sjkim 355313101Sjkimvoid yyyDoTraversals(yyyGNT *rootNode) 356313101Sjkim{struct yyyTravStackItem *yyyTravStack,*yyyTST,*yyyAfterTravStack; 357313101Sjkim yyyGNT *yyyTSTn,**yyyCLptr2; 358313101Sjkim int yyyi,yyyRL,yyyPass; 359313101Sjkim int i; 360313101Sjkim 361313101Sjkim if (!yyyYok) return; 362313101Sjkim if ((yyyTravStack = 363313101Sjkim ((struct yyyTravStackItem *) 364313101Sjkim calloc((size_t)yyyTravStackMaxSize, 365313101Sjkim (size_t)sizeof(struct yyyTravStackItem) 366313101Sjkim ) 367313101Sjkim ) 368313101Sjkim ) 369313101Sjkim == 370313101Sjkim (struct yyyTravStackItem *)NULL 371313101Sjkim ) 372313101Sjkim {fputs("malloc error in traversal stack allocation\n",stderr); 373313101Sjkim exit(-1); 374313101Sjkim } 375313101Sjkim 376313101SjkimyyyAfterTravStack = yyyTravStack + yyyTravStackMaxSize; 377313101SjkimyyyTravStack++; 378313101Sjkim 379313101Sjkim 380313101Sjkimfor (yyyi=0; yyyi<2; yyyi++) { 381313101SjkimyyyTST = yyyTravStack; 382313101SjkimyyyTST->node = rootNode; 383313101SjkimyyyTST->isReady = 0; 384313101SjkimyyyClearConds 385313101Sjkim 386313101Sjkimwhile(yyyTST >= yyyTravStack) 387313101Sjkim {yyyTSTn = yyyTST->node; 388313101Sjkim if (yyyTST->isReady) 389313101Sjkim {yyyPass = 1; 390313101Sjkim goto yyyTravSwitch; 391313101SjkimyyyTpop: 392313101Sjkim yyyTST--; 393313101Sjkim } 394313101Sjkim else 395313101Sjkim {yyyPass = 0; 396313101Sjkim goto yyyTravSwitch; 397313101SjkimyyyTpush: 398313101Sjkim yyyTST->isReady = 1; 399313101Sjkim if (yyyTSTn->prodNum) 400313101Sjkim {if (yyyRL) 401313101Sjkim {yyyCLptr2 = yyyTSTn->cL; 402313101Sjkim i = yyyTSTn->cLlen; 403313101Sjkim while (i--) 404313101Sjkim {if (++yyyTST == yyyAfterTravStack) 405313101Sjkim yyyHandleOverflow(yyyTSof); 406313101Sjkim else 407313101Sjkim {yyyTST->node = *yyyCLptr2; 408313101Sjkim yyyTST->isReady = 0; 409313101Sjkim yyyClearConds 410313101Sjkim } 411313101Sjkim yyyCLptr2++; 412313101Sjkim } 413313101Sjkim } /* right to left */ 414313101Sjkim else /* left to right */ 415313101Sjkim {i = yyyTSTn->cLlen; 416313101Sjkim yyyCLptr2 = yyyTSTn->cL + i; 417313101Sjkim while (i--) 418313101Sjkim {yyyCLptr2--; 419313101Sjkim if (++yyyTST == yyyAfterTravStack) 420313101Sjkim yyyHandleOverflow(yyyTSof); 421313101Sjkim else 422313101Sjkim {yyyTST->node = *yyyCLptr2; 423313101Sjkim yyyTST->isReady = 0; 424313101Sjkim yyyClearConds 425313101Sjkim } 426313101Sjkim } 427313101Sjkim } /* left to right */ 428313101Sjkim } 429313101Sjkim } /* else */ 430313101Sjkim continue; 431313101SjkimyyyTravSwitch: 432313101Sjkim switch(yyyTSTn->prodNum) { 433313101Sjkimcase 1: 434313101Sjkim switch(yyyi) { 435313101Sjkim case 0: 436313101Sjkim switch(yyyPass) { 437313101Sjkim case 0: 438313101SjkimyyyRL = 0;yyySetCond(0) 439313101Sjkim 440313101Sjkimif (! 441313101Sjkim#line 24 "expr.Y" 442313101Sjkim (1) 443313101Sjkim#line 444 "expr.oxout.y" 444313101Sjkim) yyySetCond(1) 445313101SjkimyyySetCond(2) 446313101Sjkim 447313101Sjkim case 1: 448313101Sjkim 449313101Sjkimif (yyyCond(0) != yyyPass) { 450313101Sjkim#line 24 "expr.Y" 451313101Sjkim 452313101Sjkim#line 453 "expr.oxout.y" 453313101Sjkim} 454313101Sjkimif (yyyCond(1) != yyyPass) { 455313101Sjkim#line 24 "expr.Y" 456313101Sjkim printf("\n"); 457313101Sjkim 458313101Sjkim#line 459 "expr.oxout.y" 459313101Sjkim} 460313101Sjkimif (yyyCond(2) != yyyPass) { 461313101Sjkim#line 25 "expr.Y" 462313101Sjkim printf("prefix: "); 463313101Sjkim 464313101Sjkim#line 465 "expr.oxout.y" 465313101Sjkim} 466313101Sjkim break; 467313101Sjkim } 468313101Sjkim break; 469313101Sjkim case 1: 470313101Sjkim switch(yyyPass) { 471313101Sjkim case 0: 472313101SjkimyyyRL = 0; 473313101Sjkimif ( 474313101Sjkim#line 23 "expr.Y" 475313101Sjkim (1) 476313101Sjkim#line 477 "expr.oxout.y" 477313101Sjkim) yyySetCond(2) 478313101Sjkim 479313101Sjkim case 1: 480313101Sjkim 481313101Sjkimif (yyyCond(0) != yyyPass) { 482313101Sjkim#line 22 "expr.Y" 483313101Sjkim printf("\n"); 484313101Sjkim 485313101Sjkim#line 486 "expr.oxout.y" 486313101Sjkim} 487313101Sjkimif (yyyCond(1) != yyyPass) { 488313101Sjkim#line 23 "expr.Y" 489313101Sjkim 490313101Sjkim#line 491 "expr.oxout.y" 491313101Sjkim} 492313101Sjkimif (yyyCond(2) != yyyPass) { 493313101Sjkim#line 23 "expr.Y" 494313101Sjkim printf("postfix: ")/* missing ; */ 495313101Sjkim 496313101Sjkim#line 497 "expr.oxout.y" 497313101Sjkim} 498313101Sjkim break; 499313101Sjkim } 500313101Sjkim break; 501313101Sjkim } 502313101Sjkim 503313101Sjkimbreak; 504313101Sjkimcase 2: 505313101Sjkim switch(yyyi) { 506313101Sjkim case 0: 507313101Sjkim switch(yyyPass) { 508313101Sjkim case 0: 509313101SjkimyyyRL = 0;yyySetCond(0) 510313101Sjkim 511313101Sjkim case 1: 512313101Sjkim 513313101Sjkimif (yyyCond(0) != yyyPass) { 514313101Sjkim#line 29 "expr.Y" 515313101Sjkim printf(" * "); 516313101Sjkim 517313101Sjkim#line 518 "expr.oxout.y" 518313101Sjkim} 519313101Sjkim break; 520313101Sjkim } 521313101Sjkim break; 522313101Sjkim case 1: 523313101Sjkim switch(yyyPass) { 524313101Sjkim case 0: 525313101SjkimyyyRL = 0; 526313101Sjkim case 1: 527313101Sjkim 528313101Sjkimif (yyyCond(0) != yyyPass) { 529313101Sjkim#line 28 "expr.Y" 530313101Sjkim printf(" * "); 531313101Sjkim 532313101Sjkim#line 533 "expr.oxout.y" 533313101Sjkim} 534313101Sjkim break; 535313101Sjkim } 536313101Sjkim break; 537313101Sjkim } 538313101Sjkim 539313101Sjkimbreak; 540313101Sjkimcase 3: 541313101Sjkim switch(yyyi) { 542313101Sjkim case 0: 543313101Sjkim switch(yyyPass) { 544313101Sjkim case 0: 545313101SjkimyyyRL = 0;yyySetCond(0) 546313101Sjkim 547313101Sjkim case 1: 548313101Sjkim 549313101Sjkimif (yyyCond(0) != yyyPass) { 550313101Sjkim#line 32 "expr.Y" 551313101Sjkim printf(" + "); 552313101Sjkim 553313101Sjkim#line 554 "expr.oxout.y" 554313101Sjkim} 555313101Sjkim break; 556313101Sjkim } 557313101Sjkim break; 558313101Sjkim case 1: 559313101Sjkim switch(yyyPass) { 560313101Sjkim case 0: 561313101SjkimyyyRL = 0; 562313101Sjkim case 1: 563313101Sjkim 564313101Sjkimif (yyyCond(0) != yyyPass) { 565313101Sjkim#line 33 "expr.Y" 566313101Sjkim printf(" + "); 567313101Sjkim 568313101Sjkim#line 569 "expr.oxout.y" 569313101Sjkim} 570313101Sjkim break; 571313101Sjkim } 572313101Sjkim break; 573313101Sjkim } 574313101Sjkim 575313101Sjkimbreak; 576313101Sjkimcase 4: 577313101Sjkim switch(yyyi) { 578313101Sjkim case 0: 579313101Sjkim switch(yyyPass) { 580313101Sjkim case 0: 581313101SjkimyyyRL = 0;yyySetCond(0) 582313101Sjkim 583313101Sjkim case 1: 584313101Sjkim 585313101Sjkimif (yyyCond(0) != yyyPass) { 586313101Sjkim#line 37 "expr.Y" 587313101Sjkim printf(" / "); 588313101Sjkim 589313101Sjkim#line 590 "expr.oxout.y" 590313101Sjkim} 591313101Sjkim break; 592313101Sjkim } 593313101Sjkim break; 594313101Sjkim case 1: 595313101Sjkim switch(yyyPass) { 596313101Sjkim case 0: 597313101SjkimyyyRL = 0; 598313101Sjkim case 1: 599313101Sjkim 600313101Sjkimif (yyyCond(0) != yyyPass) { 601313101Sjkim#line 36 "expr.Y" 602313101Sjkim printf(" / "); 603313101Sjkim 604313101Sjkim#line 605 "expr.oxout.y" 605313101Sjkim} 606313101Sjkim break; 607313101Sjkim } 608313101Sjkim break; 609313101Sjkim } 610313101Sjkim 611313101Sjkimbreak; 612313101Sjkimcase 5: 613313101Sjkim switch(yyyi) { 614313101Sjkim case 0: 615313101Sjkim switch(yyyPass) { 616313101Sjkim case 0: 617313101SjkimyyyRL = 0;yyySetCond(0) 618313101Sjkim 619313101Sjkim case 1: 620313101Sjkim 621313101Sjkimif (yyyCond(0) != yyyPass) { 622313101Sjkim#line 41 "expr.Y" 623313101Sjkim printf(" - "); 624313101Sjkim 625313101Sjkim#line 626 "expr.oxout.y" 626313101Sjkim} 627313101Sjkim break; 628313101Sjkim } 629313101Sjkim break; 630313101Sjkim case 1: 631313101Sjkim switch(yyyPass) { 632313101Sjkim case 0: 633313101SjkimyyyRL = 0; 634313101Sjkim case 1: 635313101Sjkim 636313101Sjkimif (yyyCond(0) != yyyPass) { 637313101Sjkim#line 40 "expr.Y" 638313101Sjkim printf(" - "); 639313101Sjkim 640313101Sjkim#line 641 "expr.oxout.y" 641313101Sjkim} 642313101Sjkim break; 643313101Sjkim } 644313101Sjkim break; 645313101Sjkim } 646313101Sjkim 647313101Sjkimbreak; 648313101Sjkimcase 6: 649313101Sjkim switch(yyyi) { 650313101Sjkim case 0: 651313101Sjkim switch(yyyPass) { 652313101Sjkim case 0: 653313101SjkimyyyRL = 0; 654313101Sjkim case 1: 655313101Sjkim 656313101Sjkim break; 657313101Sjkim } 658313101Sjkim break; 659313101Sjkim case 1: 660313101Sjkim switch(yyyPass) { 661313101Sjkim case 0: 662313101SjkimyyyRL = 0; 663313101Sjkim case 1: 664313101Sjkim 665313101Sjkim break; 666313101Sjkim } 667313101Sjkim break; 668313101Sjkim } 669313101Sjkim 670313101Sjkimbreak; 671313101Sjkimcase 7: 672313101Sjkim switch(yyyi) { 673313101Sjkim case 0: 674313101Sjkim switch(yyyPass) { 675313101Sjkim case 0: 676313101SjkimyyyRL = 0;yyySetCond(0) 677313101Sjkim 678313101Sjkim case 1: 679313101Sjkim 680313101Sjkimif (yyyCond(0) != yyyPass) { 681313101Sjkim#line 46 "expr.Y" 682313101Sjkim printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); 683313101Sjkim 684313101Sjkim#line 685 "expr.oxout.y" 685313101Sjkim} 686313101Sjkim break; 687313101Sjkim } 688313101Sjkim break; 689313101Sjkim case 1: 690313101Sjkim switch(yyyPass) { 691313101Sjkim case 0: 692313101SjkimyyyRL = 0; 693313101Sjkim case 1: 694313101Sjkim 695313101Sjkimif (yyyCond(0) != yyyPass) { 696313101Sjkim#line 45 "expr.Y" 697313101Sjkim printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); 698313101Sjkim 699313101Sjkim#line 700 "expr.oxout.y" 700313101Sjkim} 701313101Sjkim break; 702313101Sjkim } 703313101Sjkim break; 704313101Sjkim } 705313101Sjkim 706313101Sjkimbreak; 707313101Sjkimcase 8: 708313101Sjkim switch(yyyi) { 709313101Sjkim case 0: 710313101Sjkim switch(yyyPass) { 711313101Sjkim case 0: 712313101SjkimyyyRL = 0;yyySetCond(0) 713313101Sjkim 714313101Sjkim case 1: 715313101Sjkim 716313101Sjkimif (yyyCond(0) != yyyPass) { 717313101Sjkim#line 50 "expr.Y" 718313101Sjkim printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); 719313101Sjkim 720313101Sjkim#line 721 "expr.oxout.y" 721313101Sjkim} 722313101Sjkim break; 723313101Sjkim } 724313101Sjkim break; 725313101Sjkim case 1: 726313101Sjkim switch(yyyPass) { 727313101Sjkim case 0: 728313101SjkimyyyRL = 0; 729313101Sjkim case 1: 730313101Sjkim 731313101Sjkimif (yyyCond(0) != yyyPass) { 732313101Sjkim#line 49 "expr.Y" 733313101Sjkim printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); 734313101Sjkim 735313101Sjkim#line 736 "expr.oxout.y" 736313101Sjkim} 737313101Sjkim break; 738313101Sjkim } 739313101Sjkim break; 740313101Sjkim } 741313101Sjkim 742313101Sjkimbreak; 743313101Sjkim } /* switch */ 744313101Sjkim if (yyyPass) goto yyyTpop; else goto yyyTpush; 745313101Sjkim } /* while */ 746313101Sjkim } /* for */ 747313101Sjkim} /* yyyDoTraversals */ 748313101Sjkim 749313101Sjkimvoid yyyExecuteRRsection(yyyGNT *rootNode) { 750313101Sjkim int yyyi; 751313101Sjkim long cycleSum = 0; 752313101Sjkim long nNZrc = 0; 753313101Sjkim 754313101Sjkim if (!yyyYok) return; 755313101Sjkim yyyCheckUnsolvedInstTrav(rootNode,&nNZrc,&cycleSum); 756313101Sjkim if (nNZrc) 757313101Sjkim { 758313101Sjkim fputs("\n\n\n**********\n",stderr); 759313101Sjkim fputs("cycle detected in completed parse tree",stderr); 760313101Sjkim fputs(" after decoration.\n",stderr); 761313101Sjkim#if CYCLE_VERBOSE 762313101Sjkim fprintf(stderr, 763313101Sjkim "number of unsolved attribute instances == %ld.\n", 764313101Sjkim nNZrc 765313101Sjkim ); 766313101Sjkim fprintf(stderr, 767313101Sjkim "total number of remaining dependencies == %ld.\n", 768313101Sjkim cycleSum 769313101Sjkim ); 770313101Sjkim fputs("average number of remaining dependencies\n",stderr); 771313101Sjkim fprintf(stderr," per unsolved instance == %f.\n", 772313101Sjkim ((float)(cycleSum)/(float)(nNZrc)) 773313101Sjkim ); 774313101Sjkim#endif 775313101Sjkim fprintf(stderr, 776313101Sjkim "searching parse tree for %ld unsolved instances:\n", 777313101Sjkim nNZrc 778313101Sjkim ); 779313101Sjkim yyyUnsolvedInstSearchTravAux(rootNode); 780313101Sjkim } 781313101Sjkim yyyDoTraversals(rootNode); 782313101Sjkim} /* yyyExecuteRRsection */ 783313101Sjkim 784313101Sjkim 785313101Sjkim 786313101SjkimyyyWAT yyyLRCIL[2] = {0,0, 787313101Sjkim}; 788313101Sjkim 789313101Sjkim 790313101Sjkim 791313101Sjkimvoid yyyYoxInit(void) 792313101Sjkim { 793313101Sjkim static int yyyInitDone = 0; 794313101Sjkim if (yyyInitDone) return; 795313101Sjkim 796313101Sjkim if ((yyyRS = (struct yyyRSitem *) 797313101Sjkim calloc((size_t)(yyyRSmaxSize+1), (size_t)sizeof(struct yyyRSitem)) 798313101Sjkim ) 799313101Sjkim == 800313101Sjkim ((struct yyyRSitem *) NULL) 801313101Sjkim ) 802313101Sjkim yyyfatal("malloc error in ox ready set space allocation\n"); 803313101Sjkim yyyRS++; 804313101Sjkim yyyAfterRS = yyyRS + yyyRSmaxSize; 805313101Sjkim 806313101Sjkim 807313101Sjkim if ((yyySSALspace = (struct yyySolvedSAlistCell *) 808313101Sjkim calloc((size_t)(yyySSALspaceSize+1), (size_t)sizeof(struct yyySolvedSAlistCell)) 809313101Sjkim ) 810313101Sjkim == 811313101Sjkim ((struct yyySolvedSAlistCell *) NULL) 812313101Sjkim ) 813313101Sjkim yyyfatal("malloc error in stack solved list space allocation\n"); 814313101Sjkim yyyInitDone = 1; 815313101Sjkim 816313101Sjkim yyyRSTop = yyyRS - 1; 817313101Sjkim } /* yyyYoxInit */ 818313101Sjkim 819313101Sjkim 820313101Sjkim 821313101Sjkimvoid yyyDecorate(void) 822313101Sjkim { 823313101Sjkim while (yyyRSTop >= yyyRS) 824313101Sjkim yyySolveAndSignal(); 825313101Sjkim } 826313101Sjkim 827313101Sjkim 828313101Sjkim 829313101Sjkimvoid yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...) 830313101Sjkim {yyyWST i; 831313101Sjkim yyySIT **yyyOxStackItem = &yyval_OxAttrbs->yyyOxStackItem; 832313101Sjkim yyyGNT *gnpDum; 833313101Sjkim va_list ap; 834313101Sjkim 835313101Sjkim *yyyOxStackItem = (yyySIT *) malloc((size_t)sizeof(yyySIT)); 836313101Sjkim if (*yyyOxStackItem == (yyySIT *) NULL) 837313101Sjkim yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); 838313101Sjkim (*yyyOxStackItem)->node = 839313101Sjkim (yyyGNT *) malloc((size_t)sizeof(yyyGNT)); 840313101Sjkim if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) 841313101Sjkim yyyfatal("malloc error in ox node space allocation\n"); 842313101Sjkim (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; 843313101Sjkim (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; 844313101Sjkim (*yyyOxStackItem)->node->parentIsStack = 1; 845313101Sjkim (*yyyOxStackItem)->node->cLlen = yyyRHSlength; 846313101Sjkim (*yyyOxStackItem)->node->cL = 847313101Sjkim (yyyGNT **) calloc((size_t)yyyRHSlength, (size_t)sizeof(yyyGNT *)); 848313101Sjkim if ((*yyyOxStackItem)->node->cL == (yyyGNT **) NULL) 849313101Sjkim yyyfatal("malloc error in ox child list space allocation\n"); 850313101Sjkim (*yyyOxStackItem)->node->refCountListLen = yyyNattrbs; 851313101Sjkim (*yyyOxStackItem)->node->refCountList = 852313101Sjkim (yyyRCT *) calloc((size_t)yyyNattrbs, (size_t)sizeof(yyyRCT)); 853313101Sjkim if ((*yyyOxStackItem)->node->refCountList == (yyyRCT *) NULL) 854313101Sjkim yyyfatal("malloc error in ox reference count list space allocation\n"); 855313101Sjkim (*yyyOxStackItem)->node->prodNum = yyyProdNum; 856313101Sjkim va_start(ap, yyval_OxAttrbs); 857313101Sjkim for (i=1;i<=yyyRHSlength;i++) 858313101Sjkim {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; 859313101Sjkim gnpDum = (*yyyOxStackItem)->node->cL[i-1] = yaccStDum->node; 860313101Sjkim gnpDum->whichSym = i; 861313101Sjkim gnpDum->parent.noderef = (*yyyOxStackItem)->node; 862313101Sjkim gnpDum->parentIsStack = 0; 863313101Sjkim } 864313101Sjkim va_end(ap); 865313101Sjkim } 866313101Sjkim 867313101Sjkim 868313101Sjkim 869313101Sjkim#define yyyDECORfREQ 50 870313101Sjkim 871313101Sjkim 872313101Sjkim 873313101Sjkimvoid yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...) 874313101Sjkim {yyyWST i; 875313101Sjkim yyySIT *yyyOxStackItem = yyval_OxAttrbs->yyyOxStackItem; 876313101Sjkim long SSALptr,SSALptrHead,*cPtrPtr; 877313101Sjkim long *pL; 878313101Sjkim yyyGNT *gnpDum; 879313101Sjkim long iTemp; 880313101Sjkim long nextP; 881313101Sjkim static unsigned short intNodeCount = yyyDECORfREQ; 882313101Sjkim va_list ap; 883313101Sjkim 884313101Sjkim nextP = startP; 885313101Sjkim while (nextP < stopP) 886313101Sjkim {if (yyyRCIL[nextP] == yyyR) 887313101Sjkim {(yyyOxStackItem->node->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; 888313101Sjkim } 889313101Sjkim else 890313101Sjkim {(((yyyOxStackItem->node->cL)[yyyRCIL[nextP]])->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; 891313101Sjkim } 892313101Sjkim nextP += 3; 893313101Sjkim } 894313101Sjkim pL = yyyIIEL + yyyIIIEL[yyyProdNum]; 895313101Sjkim va_start(ap, yyval_OxAttrbs); 896313101Sjkim for (i=1;i<=yyyRHSlength;i++) 897313101Sjkim {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; 898313101Sjkim pL++; 899313101Sjkim SSALptrHead = SSALptr = *(cPtrPtr = &(yaccStDum->solvedSAlist)); 900313101Sjkim if (SSALptr != yyyLambdaSSAL) 901313101Sjkim {*cPtrPtr = yyyLambdaSSAL; 902313101Sjkim do 903313101Sjkim { 904313101Sjkim iTemp = (*pL+yyySSALspace[SSALptr].attrbNum); 905313101Sjkim yyySignalEnts(yyyOxStackItem->node, 906313101Sjkim yyyIEL[iTemp], 907313101Sjkim yyyIEL[iTemp+1] 908313101Sjkim ); 909313101Sjkim SSALptr = *(cPtrPtr = &(yyySSALspace[SSALptr].next)); 910313101Sjkim } 911313101Sjkim while (SSALptr != yyyLambdaSSAL); 912313101Sjkim *cPtrPtr = yyySSALCfreeList; 913313101Sjkim yyySSALCfreeList = SSALptrHead; 914313101Sjkim } 915313101Sjkim } 916313101Sjkim va_end(ap); 917313101Sjkim nextP = startP + 2; 918313101Sjkim while (nextP < stopP) 919313101Sjkim {if (!yyyRCIL[nextP]) 920313101Sjkim {if (yyyRCIL[nextP-2] == yyyR) 921313101Sjkim {pL = &(yyyOxStackItem->solvedSAlist); 922313101Sjkim if (yyySSALCfreeList == yyyLambdaSSAL) 923313101Sjkim {yyySSALspace[yyyNewSSALC].next = *pL; 924313101Sjkim if ((*pL = yyyNewSSALC++) == yyySSALspaceSize) 925313101Sjkim yyyHandleOverflow(yyySSALof); 926313101Sjkim } 927313101Sjkim else 928313101Sjkim {iTemp = yyySSALCfreeList; 929313101Sjkim yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; 930313101Sjkim yyySSALspace[iTemp].next = *pL; 931313101Sjkim *pL = iTemp; 932313101Sjkim } 933313101Sjkim yyySSALspace[*pL].attrbNum = yyyRCIL[nextP-1]; 934313101Sjkim } 935313101Sjkim else 936313101Sjkim {if ((gnpDum = (yyyOxStackItem->node->cL)[yyyRCIL[nextP-2]])->prodNum != 0) 937313101Sjkim { 938313101Sjkim iTemp = yyyIIEL[yyyIIIEL[gnpDum->prodNum]] + yyyRCIL[nextP-1]; 939313101Sjkim yyySignalEnts(gnpDum, 940313101Sjkim yyyIEL[iTemp], 941313101Sjkim yyyIEL[iTemp+1] 942313101Sjkim ); 943313101Sjkim } 944313101Sjkim } 945313101Sjkim } 946313101Sjkim nextP += 3; 947313101Sjkim } 948313101Sjkim if (!--intNodeCount) 949313101Sjkim {intNodeCount = yyyDECORfREQ; 950313101Sjkim yyyDecorate(); 951313101Sjkim } 952313101Sjkim } 953313101Sjkim 954313101Sjkim 955313101Sjkim 956313101Sjkimvoid yyyGenLeaf(int nAttrbs,int typeNum,long startP,long stopP,YYSTYPE *yylval) 957313101Sjkim {yyyRCT *rcPdum; 958313101Sjkim yyySIT **yyyOxStackItem = &yylval->yyyOxAttrbs.yyyOxStackItem; 959313101Sjkim (*yyyOxStackItem) = (yyySIT *) malloc((size_t)sizeof(yyySIT)); 960313101Sjkim if ((*yyyOxStackItem) == (yyySIT *) NULL) 961313101Sjkim yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); 962313101Sjkim (*yyyOxStackItem)->node = 963313101Sjkim (yyyGNT *) malloc((size_t)sizeof(yyyGNT)) 964313101Sjkim ; 965313101Sjkim if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) 966313101Sjkim yyyfatal("malloc error in ox node space allocation\n"); 967313101Sjkim (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; 968313101Sjkim (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; 969313101Sjkim (*yyyOxStackItem)->node->parentIsStack = 1; 970313101Sjkim (*yyyOxStackItem)->node->cLlen = 0; 971313101Sjkim (*yyyOxStackItem)->node->cL = (yyyGNT **)NULL; 972313101Sjkim (*yyyOxStackItem)->node->refCountListLen = nAttrbs; 973313101Sjkim rcPdum = (*yyyOxStackItem)->node->refCountList = 974313101Sjkim (yyyRCT *) calloc((size_t)nAttrbs, (size_t)sizeof(yyyRCT)); 975313101Sjkim if (rcPdum == (yyyRCT *) NULL) 976313101Sjkim yyyfatal("malloc error in ox reference count list space allocation\n"); 977313101Sjkim while (startP < stopP) rcPdum[yyyLRCIL[startP++]] = 0; 978313101Sjkim (*yyyOxStackItem)->node->prodNum = 0; 979313101Sjkim (*yyyOxStackItem)->node->whichSym = 0; 980313101Sjkim } 981313101Sjkim 982313101Sjkim 983313101Sjkim 984313101Sjkimvoid yyyabort(void) 985313101Sjkim {yyyYok = 0; 986313101Sjkim } 987313101Sjkim 988313101Sjkim 989313101Sjkim 990313101Sjkim 991313101Sjkim 992313101Sjkim#define yyyLastProdNum 8 993313101Sjkim 994313101Sjkim 995313101Sjkim#define yyyNsorts 1 996313101Sjkim 997313101Sjkim 998313101Sjkimint yyyProdsInd[] = { 999313101Sjkim 0, 1000313101Sjkim 0, 2, 6, 10, 14, 18, 22, 24, 1001313101Sjkim 26, 1002313101Sjkim}; 1003313101Sjkim 1004313101Sjkim 1005313101Sjkimint yyyProds[][2] = { 1006313101Sjkim{ 116, 0},{ 462, 0},{ 462, 0},{ 462, 0},{ 412, 0}, 1007313101Sjkim{ 462, 0},{ 462, 0},{ 462, 0},{ 420, 0},{ 462, 0}, 1008313101Sjkim{ 462, 0},{ 462, 0},{ 452, 0},{ 462, 0},{ 462, 0}, 1009313101Sjkim{ 462, 0},{ 436, 0},{ 462, 0},{ 462, 0},{ 396, 0}, 1010313101Sjkim{ 462, 0},{ 404, 0},{ 462, 0},{ 619, 1},{ 462, 0}, 1011313101Sjkim{ 567, 1}, 1012313101Sjkim}; 1013313101Sjkim 1014313101Sjkim 1015313101Sjkimint yyySortsInd[] = { 1016313101Sjkim 0, 1017313101Sjkim 0, 1018313101Sjkim 1, 1019313101Sjkim}; 1020313101Sjkim 1021313101Sjkim 1022313101Sjkimint yyySorts[] = { 1023313101Sjkim 413, 1024313101Sjkim}; 1025313101Sjkim 1026313101Sjkim 1027313101Sjkim 1028313101Sjkimchar *yyyStringTab[] = { 1029313101Sjkim0,0,0,0,0, 1030313101Sjkim0,0,0,0,0, 1031313101Sjkim0,0,0,0,0, 1032313101Sjkim0,0,0,0,0, 1033313101Sjkim0,0,0,0,0, 1034313101Sjkim0,0,0,0,0, 1035313101Sjkim0,0,0,0,0, 1036313101Sjkim0,0,0,0,0, 1037313101Sjkim0,0,0,0,0, 1038313101Sjkim0,0,0,0,0, 1039313101Sjkim0,0,0,0,0, 1040313101Sjkim0,0,0,0,0, 1041313101Sjkim0,0,0,0,0, 1042313101Sjkim0,0,0,0,0, 1043313101Sjkim0,0,0,0,0, 1044313101Sjkim0,0,0,0,0, 1045313101Sjkim0,0,0,0,0, 1046313101Sjkim0,0,0,0,0, 1047313101Sjkim0,0,0,0,0, 1048313101Sjkim0,0,0,0,0, 1049313101Sjkim0,0,0,0,0, 1050313101Sjkim0,0,0,0,0, 1051313101Sjkim0,0,0,0,0, 1052313101Sjkim0,"s",0,0,0, 1053313101Sjkim0,0,"y",0,0, 1054313101Sjkim0,0,0,0,0, 1055313101Sjkim0,0,0,0,0, 1056313101Sjkim0,0,0,0,0, 1057313101Sjkim0,0,0,0,0, 1058313101Sjkim0,0,0,0,0, 1059313101Sjkim0,0,0,0,0, 1060313101Sjkim0,0,0,0,0, 1061313101Sjkim0,0,0,0,0, 1062313101Sjkim0,0,0,0,0, 1063313101Sjkim0,0,0,0,0, 1064313101Sjkim0,0,0,0,0, 1065313101Sjkim0,0,0,0,0, 1066313101Sjkim0,0,0,0,0, 1067313101Sjkim0,0,0,0,0, 1068313101Sjkim0,0,0,0,0, 1069313101Sjkim0,0,0,0,0, 1070313101Sjkim0,0,0,0,0, 1071313101Sjkim0,0,0,0,0, 1072313101Sjkim0,0,0,0,0, 1073313101Sjkim0,0,0,0,0, 1074313101Sjkim0,0,0,0,0, 1075313101Sjkim0,0,0,0,0, 1076313101Sjkim0,0,0,0,0, 1077313101Sjkim0,0,0,0,0, 1078313101Sjkim0,0,0,0,0, 1079313101Sjkim0,0,0,0,0, 1080313101Sjkim0,0,0,0,0, 1081313101Sjkim0,0,0,0,0, 1082313101Sjkim0,0,0,0,0, 1083313101Sjkim0,0,0,0,0, 1084313101Sjkim0,0,0,0,0, 1085313101Sjkim0,0,0,0,0, 1086313101Sjkim0,0,0,0,0, 1087313101Sjkim0,0,0,0,0, 1088313101Sjkim0,0,0,0,0, 1089313101Sjkim0,0,0,0,0, 1090313101Sjkim0,0,0,0,0, 1091313101Sjkim0,0,0,0,0, 1092313101Sjkim0,0,0,0,0, 1093313101Sjkim0,0,0,0,0, 1094313101Sjkim0,"LRpre",0,0,0, 1095313101Sjkim0,0,0,0,0, 1096313101Sjkim0,0,0,0,0, 1097313101Sjkim0,0,0,0,0, 1098313101Sjkim0,0,0,0,0, 1099313101Sjkim0,0,0,0,0, 1100313101Sjkim0,0,0,0,0, 1101313101Sjkim0,0,0,0,0, 1102313101Sjkim0,0,0,0,0, 1103313101Sjkim0,0,0,0,0, 1104313101Sjkim0,0,0,0,0, 1105313101Sjkim0,0,0,0,0, 1106313101Sjkim0,0,0,0,0, 1107313101Sjkim0,0,0,0,0, 1108313101Sjkim0,"'('",0,0,0, 1109313101Sjkim0,0,0,0,"')'", 1110313101Sjkim0,0,0,0,0, 1111313101Sjkim0,0,"'*'","lexeme",0, 1112313101Sjkim0,0,0,0,0, 1113313101Sjkim"'+'",0,0,0,0, 1114313101Sjkim0,0,0,0,0, 1115313101Sjkim0,0,0,0,0, 1116313101Sjkim0,"'-'",0,0,0, 1117313101Sjkim0,0,0,0,0, 1118313101Sjkim0,0,0,0,0, 1119313101Sjkim0,0,"'/'",0,0, 1120313101Sjkim0,0,0,0,0, 1121313101Sjkim0,0,"expr",0,0, 1122313101Sjkim0,0,0,0,0, 1123313101Sjkim0,0,0,0,0, 1124313101Sjkim0,"printf",0,0,0, 1125313101Sjkim0,0,0,0,0, 1126313101Sjkim0,0,0,0,0, 1127313101Sjkim0,0,0,0,0, 1128313101Sjkim0,0,0,0,0, 1129313101Sjkim0,0,0,0,0, 1130313101Sjkim0,0,0,0,0, 1131313101Sjkim0,0,0,0,0, 1132313101Sjkim0,0,0,0,0, 1133313101Sjkim0,0,0,0,0, 1134313101Sjkim0,0,0,0,0, 1135313101Sjkim0,0,0,0,0, 1136313101Sjkim0,0,0,0,0, 1137313101Sjkim0,0,0,0,0, 1138313101Sjkim0,0,0,0,0, 1139313101Sjkim0,0,0,0,0, 1140313101Sjkim0,0,0,0,0, 1141313101Sjkim0,0,0,0,0, 1142313101Sjkim0,0,"CONST","LRpost",0, 1143313101Sjkim0,0,0,0,0, 1144313101Sjkim0,0,0,0,0, 1145313101Sjkim0,0,0,0,0, 1146313101Sjkim0,0,0,0,0, 1147313101Sjkim0,0,0,0,0, 1148313101Sjkim0,0,0,0,0, 1149313101Sjkim0,0,0,0,0, 1150313101Sjkim0,0,0,0,0, 1151313101Sjkim0,0,0,0,0, 1152313101Sjkim0,0,0,0,"ID", 1153313101Sjkim0,0,0,0,0, 1154313101Sjkim0,0,0,0,0, 1155313101Sjkim0,0,0,0,0, 1156313101Sjkim0,0,0,0,0, 1157313101Sjkim0,0,0,0,0, 1158313101Sjkim0,0,0,0,0, 1159313101Sjkim0,0,0,0,0, 1160313101Sjkim0,0,0,0,0, 1161313101Sjkim0,0,0,0,0, 1162313101Sjkim0,0,0,0,0, 1163313101Sjkim0,0,0,0,0, 1164313101Sjkim0,0,0,0,0, 1165313101Sjkim0,0,0,0,0, 1166313101Sjkim0,0,0,0,0, 1167313101Sjkim0,0,0,0,0, 1168313101Sjkim0,0,0,0,0, 1169313101Sjkim0,0,0,0,0, 1170313101Sjkim0,0,0,0,0, 1171313101Sjkim0,0,0,0,0, 1172313101Sjkim0,0,0,0,0, 1173313101Sjkim0,0,0,0,0, 1174313101Sjkim0,0,0,0,0, 1175313101Sjkim0,0,0,0,0, 1176313101Sjkim0,0,0,0,0, 1177313101Sjkim0,0,0,0,0, 1178313101Sjkim0,0,0,0,0, 1179313101Sjkim0,0,0,0,0, 1180313101Sjkim0,0,0,0,0, 1181313101Sjkim0,0,0,0,0, 1182313101Sjkim0,0,0,0,0, 1183313101Sjkim0,0,0,0,0, 1184313101Sjkim0,0,0,0,0, 1185313101Sjkim0,0,0,0,0, 1186313101Sjkim0,0,0,0,0, 1187313101Sjkim0,0,0,0,0, 1188313101Sjkim0,0,0,0,0, 1189313101Sjkim0,0,0,0,0, 1190313101Sjkim0,0,0,0,0, 1191313101Sjkim0,0,0,0,0, 1192313101Sjkim0,0,0,0,0, 1193313101Sjkim0,0,0,0,0, 1194313101Sjkim0,0,0,0,0, 1195313101Sjkim0,0,0,0,0, 1196313101Sjkim0,0,0,0,0, 1197313101Sjkim0,0,0,0,0, 1198313101Sjkim0,0,0,0,0, 1199313101Sjkim0,0,0,0,0, 1200313101Sjkim0,0,0,0,0, 1201313101Sjkim0,0,0,0,0, 1202313101Sjkim0,0,0,0,0, 1203313101Sjkim0,0,0,0,0, 1204313101Sjkim0,0,0,0,0, 1205313101Sjkim0,0,0,0,0, 1206313101Sjkim0,0,0,0,0, 1207313101Sjkim0,0,0,0,0, 1208313101Sjkim0,0,0,0,0, 1209313101Sjkim0,0,0,0,0, 1210313101Sjkim0,0,0,0,0, 1211313101Sjkim0,0,0,0,0, 1212313101Sjkim0,0,0,0,0, 1213313101Sjkim0,0,0,0,0, 1214313101Sjkim0,0,0,0,0, 1215313101Sjkim0,0,0,0,0, 1216313101Sjkim0,0,0,0,0, 1217313101Sjkim0,0,0,0,0, 1218313101Sjkim0,0,0,0,0, 1219313101Sjkim0,0,0,0,0, 1220313101Sjkim0,0,0,0,0, 1221313101Sjkim0,0,0,0,0, 1222313101Sjkim0,0,0,0,0, 1223313101Sjkim0,0,0,0,0, 1224313101Sjkim0,0,0,0,0, 1225313101Sjkim0,0,0,0,0, 1226313101Sjkim0,0,0,0,0, 1227313101Sjkim0,0,0,0,0, 1228313101Sjkim0,0,0,0,0, 1229313101Sjkim0,0,0,0,0, 1230313101Sjkim0,0,0,0,0, 1231313101Sjkim0,0,0,0,0, 1232313101Sjkim0,0,0,0,0, 1233313101Sjkim0,0,0,0,0, 1234313101Sjkim0,0,0,0,0, 1235313101Sjkim0,0,0,0,0, 1236313101Sjkim0,0,0,0,0, 1237313101Sjkim0,0,0,0,0, 1238313101Sjkim0,0,0,0,0, 1239313101Sjkim0,0,0,0,0, 1240313101Sjkim0,0,0,0,0, 1241313101Sjkim0,0,0,0,0, 1242313101Sjkim0,0,0,0,0, 1243313101Sjkim0,0,0,0,0, 1244313101Sjkim0,0,0,0,0, 1245313101Sjkim0,0,0,0,0, 1246313101Sjkim0,0,0,0,0, 1247313101Sjkim0,0,0,0,0, 1248313101Sjkim0,0,0,0,0, 1249313101Sjkim0,0,0,0,0, 1250313101Sjkim0,0,0,0,0, 1251313101Sjkim0,0,0,0,0, 1252313101Sjkim0,0,0,0,0, 1253313101Sjkim0,0,0,0,0, 1254313101Sjkim0,0,0,0,0, 1255313101Sjkim0,0,0,0,0, 1256313101Sjkim0,0,0,0,0, 1257313101Sjkim0,0,0,0,0, 1258313101Sjkim0,0,0,0,0, 1259313101Sjkim0,0,0,0,0, 1260313101Sjkim0,0,0,0,0, 1261313101Sjkim0,0,0,0,0, 1262313101Sjkim0,0,0,0,0, 1263313101Sjkim0,0,0,0,0, 1264313101Sjkim0,0,0,0,0, 1265313101Sjkim0,0,0,0,0, 1266313101Sjkim0,0,0,0,0, 1267313101Sjkim0,0,0,0,0, 1268313101Sjkim0,0,0,0,0, 1269313101Sjkim0,0,0,0,0, 1270313101Sjkim0,0,0,0,0, 1271313101Sjkim0,0,0,0,0, 1272313101Sjkim0,0,0,0,0, 1273313101Sjkim0,0,0,0,0, 1274313101Sjkim0,0,0,0,0, 1275313101Sjkim0, 1276313101Sjkim}; 1277313101Sjkim 1278313101Sjkim 1279313101Sjkim 1280313101Sjkim#define yyySizeofProd(num) (yyyProdsInd[(num)+1] - yyyProdsInd[(num)]) 1281313101Sjkim 1282313101Sjkim#define yyyGSoccurStr(prodNum,symPos) \ 1283313101Sjkim (yyyStringTab[yyyProds[yyyProdsInd[(prodNum)] + (symPos)][0]]) 1284313101Sjkim 1285313101Sjkim#define yyySizeofSort(num) (yyySortsInd[(num)+1] - yyySortsInd[(num)]) 1286313101Sjkim 1287313101Sjkim#define yyySortOf(prodNum,symPos) \ 1288313101Sjkim (yyyProds[yyyProdsInd[(prodNum)] + (symPos)][1]) 1289313101Sjkim 1290313101Sjkim#define yyyAttrbStr(prodNum,symPos,attrbNum) \ 1291313101Sjkim (yyyStringTab[yyySorts[yyySortsInd[yyySortOf(prodNum,symPos)] + \ 1292313101Sjkim (attrbNum) \ 1293313101Sjkim ] \ 1294313101Sjkim ] \ 1295313101Sjkim ) 1296313101Sjkim 1297313101Sjkim 1298313101Sjkim 1299313101Sjkimvoid yyyShowProd(int i) 1300313101Sjkim {int j,nSyms; 1301313101Sjkim 1302313101Sjkim nSyms = yyySizeofProd(i); 1303313101Sjkim for (j=0; j<nSyms; j++) 1304313101Sjkim { 1305313101Sjkim fprintf(stderr,"%s",yyyGSoccurStr(i,j)); 1306313101Sjkim if (j == 0) fputs(" : ",stderr); else putc(' ',stderr); 1307313101Sjkim } 1308313101Sjkim fputs(";\n",stderr); 1309313101Sjkim } 1310313101Sjkim 1311313101Sjkim 1312313101Sjkim 1313313101Sjkimvoid yyyShowProds() 1314313101Sjkim {int i; for (i=1; i<=yyyLastProdNum; i++) yyyShowProd(i);} 1315313101Sjkim 1316313101Sjkim 1317313101Sjkim 1318313101Sjkimvoid yyyShowSymsAndSorts() 1319313101Sjkim {int i; 1320313101Sjkim 1321313101Sjkim for (i=1; i<=yyyLastProdNum; i++) 1322313101Sjkim {int j, nSyms; 1323313101Sjkim 1324313101Sjkim fprintf(stderr, 1325313101Sjkim "\n\n\n---------------------------------- %3.1d\n",i); 1326313101Sjkim /* yyyShowProd(i); */ 1327313101Sjkim nSyms = yyySizeofProd(i); 1328313101Sjkim for (j=0; j<nSyms; j++) 1329313101Sjkim {int k, sortSize; 1330313101Sjkim 1331313101Sjkim fprintf(stderr,"%s\n",yyyGSoccurStr(i,j)); 1332313101Sjkim sortSize = yyySizeofSort(yyySortOf(i,j)); 1333313101Sjkim for (k=0; k<sortSize; k++) 1334313101Sjkim fprintf(stderr," %s\n",yyyAttrbStr(i,j,k)); 1335313101Sjkim if (j == 0) fputs("->\n",stderr); 1336313101Sjkim else 1337313101Sjkim putc('\n',stderr); 1338313101Sjkim } 1339313101Sjkim } 1340313101Sjkim } 1341313101Sjkim 1342313101Sjkim 1343313101Sjkim 1344313101Sjkimvoid yyyCheckNodeInstancesSolved(yyyGNT *np) 1345313101Sjkim {int mysort,sortSize,i,prodNum,symPos,inTerminalNode; 1346313101Sjkim int nUnsolvedInsts = 0; 1347313101Sjkim 1348313101Sjkim if (np->prodNum != 0) 1349313101Sjkim {inTerminalNode = 0; 1350313101Sjkim prodNum = np->prodNum; 1351313101Sjkim symPos = 0; 1352313101Sjkim } 1353313101Sjkim else 1354313101Sjkim {inTerminalNode = 1; 1355313101Sjkim prodNum = np->parent.noderef->prodNum; 1356313101Sjkim symPos = np->whichSym; 1357313101Sjkim } 1358313101Sjkim mysort = yyySortOf(prodNum,symPos); 1359313101Sjkim sortSize = yyySizeofSort(mysort); 1360313101Sjkim for (i=0; i<sortSize; i++) 1361313101Sjkim if ((np->refCountList)[i] != 0) nUnsolvedInsts += 1; 1362313101Sjkim if (nUnsolvedInsts) 1363313101Sjkim {fprintf(stderr, 1364313101Sjkim "\nFound node that has %d unsolved attribute instance(s).\n", 1365313101Sjkim nUnsolvedInsts 1366313101Sjkim ); 1367313101Sjkim fprintf(stderr,"Node is labeled \"%s\".\n", 1368313101Sjkim yyyGSoccurStr(prodNum,symPos)); 1369313101Sjkim if (inTerminalNode) 1370313101Sjkim {fputs("Node is terminal. Its parent production is:\n ",stderr); 1371313101Sjkim yyyShowProd(prodNum); 1372313101Sjkim } 1373313101Sjkim else 1374313101Sjkim {fputs("Node is nonterminal. ",stderr); 1375313101Sjkim if (!(np->parentIsStack)) 1376313101Sjkim {fprintf(stderr, 1377313101Sjkim "Node is %dth child in its parent production:\n ", 1378313101Sjkim np->whichSym 1379313101Sjkim ); 1380313101Sjkim yyyShowProd(np->parent.noderef->prodNum); 1381313101Sjkim } 1382313101Sjkim fputs("Node is on left hand side of this production:\n ",stderr); 1383313101Sjkim yyyShowProd(np->prodNum); 1384313101Sjkim } 1385313101Sjkim fputs("The following instances are unsolved:\n",stderr); 1386313101Sjkim for (i=0; i<sortSize; i++) 1387313101Sjkim if ((np->refCountList)[i] != 0) 1388313101Sjkim fprintf(stderr," %-16s still has %1d dependencies.\n", 1389313101Sjkim yyyAttrbStr(prodNum,symPos,i),(np->refCountList)[i]); 1390313101Sjkim } 1391313101Sjkim } 1392313101Sjkim 1393313101Sjkim 1394313101Sjkim 1395313101Sjkimvoid yyyCheckUnsolvedInstTrav(yyyGNT *pNode,long *nNZrc,long *cycleSum) 1396313101Sjkim {yyyGNT **yyyCLpdum; 1397313101Sjkim yyyRCT *rcp; 1398313101Sjkim int i; 1399313101Sjkim 1400313101Sjkim /* visit the refCountList of each node in the tree, and sum the non-zero refCounts */ 1401313101Sjkim rcp = pNode->refCountList; 1402313101Sjkim i = pNode->refCountListLen; 1403313101Sjkim while (i--) 1404313101Sjkim if (*rcp++) {*cycleSum += *(rcp - 1); (*nNZrc)++;} 1405313101Sjkim yyyCLpdum = pNode->cL; 1406313101Sjkim i = pNode->cLlen; 1407313101Sjkim while (i--) 1408313101Sjkim { 1409313101Sjkim yyyCheckUnsolvedInstTrav(*yyyCLpdum,nNZrc,cycleSum); 1410313101Sjkim yyyCLpdum++; 1411313101Sjkim } 1412313101Sjkim } 1413313101Sjkim 1414313101Sjkim 1415313101Sjkim 1416313101Sjkimvoid yyyUnsolvedInstSearchTravAux(yyyGNT *pNode) 1417313101Sjkim {yyyGNT **yyyCLpdum; 1418313101Sjkim int i; 1419313101Sjkim 1420313101Sjkim yyyCheckNodeInstancesSolved(pNode); 1421313101Sjkim yyyCLpdum = pNode->cL; 1422313101Sjkim i = pNode->cLlen; 1423313101Sjkim while (i--) 1424313101Sjkim { 1425313101Sjkim yyyUnsolvedInstSearchTravAux(*yyyCLpdum); 1426313101Sjkim yyyCLpdum++; 1427313101Sjkim } 1428313101Sjkim } 1429313101Sjkim 1430313101Sjkim 1431313101Sjkim 1432313101Sjkimvoid yyyUnsolvedInstSearchTrav(yyyGNT *pNode) 1433313101Sjkim {yyyGNT **yyyCLpdum; 1434313101Sjkim int i; 1435313101Sjkim 1436313101Sjkim yyyCLpdum = pNode->cL; 1437313101Sjkim i = pNode->cLlen; 1438313101Sjkim while (i--) 1439313101Sjkim { 1440313101Sjkim yyyUnsolvedInstSearchTravAux(*yyyCLpdum); 1441313101Sjkim yyyCLpdum++; 1442313101Sjkim } 1443313101Sjkim } 1444313101Sjkim 1445313101Sjkim 1446313101Sjkim 1447