Home | History | Annotate | Line # | Download | only in test
expr.oxout.y revision 1.4
      1 /*	$NetBSD: expr.oxout.y,v 1.4 2026/01/18 16:41:29 christos Exp $	*/
      2 
      3 /* output from Ox version G1.04 */
      4 #line 1 "expr.Y"
      5 #line 4 "expr.oxout.y"
      6 %{
      7 #include <stdlib.h>
      8 #include <string.h>
      9 %}
     10 #line 1 "expr.Y"
     11 /* Y-file for translation of infix expressions to prefix and postfix */
     12 %token ID CONST
     13 %start yyyAugNonterm
     14 %left '+' '-'
     15 %left '*' '/'
     16 %nonassoc '*'
     17 
     18 %{
     19 #include "expr.oxout.h"
     20 #include <stdio.h>
     21 
     22 extern int yylex(void);
     23 extern void yyerror(const char *);
     24 %}
     25 
     26 #line 25 "expr.oxout.y"
     27 
     28 %{
     29 #include <limits.h>
     30 #define yyyR USHRT_MAX
     31 %}
     32 %type <yyyOxAttrbs> yyyAugNonterm
     33 %union {
     34 struct yyyOxAttrbs {
     35 struct yyyStackItem *yyyOxStackItem;
     36 } yyyOxAttrbs;
     37 }
     38 
     39 %{
     40 #include <stdio.h>
     41 #include <stdarg.h>
     42 
     43 static int yyyYok = 1;
     44 
     45 extern yyyFT yyyRCIL[];
     46 
     47 void yyyExecuteRRsection(yyyGNT *rootNode);
     48 void yyyYoxInit(void);
     49 void yyyDecorate(void);
     50 struct yyyOxAttrbs; /* hack required to compensate for 'msta' behavior */
     51 void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...);
     52 void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...);
     53 void yyyCheckUnsolvedInstTrav(yyyGNT *rootNode,long *nNZrc,long *cycleSum);
     54 void yyyUnsolvedInstSearchTrav(yyyGNT *pNode);
     55 void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode);
     56 void yyyabort(void);
     57 
     58 %}
     59 
     60 
     61 #line 20 "expr.Y"
     62 %%
     63 
     64 #line 63 "expr.oxout.y"
     65 yyyAugNonterm
     66 	:	{yyyYoxInit();}
     67 		s
     68 		{
     69 		 yyyDecorate(); yyyExecuteRRsection($<yyyOxAttrbs>2.yyyOxStackItem->node);
     70 		}
     71 	;
     72 #line 21 "expr.Y"
     73 s       :       expr
     74 #line 73 "expr.oxout.y"
     75 {if(yyyYok){
     76 yyyGenIntNode(1,1,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);
     77 yyyAdjustINRC(1,1,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);}}
     78 
     79 #line 27 "expr.Y"
     80 expr    :       expr    '*'     expr
     81 #line 80 "expr.oxout.y"
     82 {if(yyyYok){
     83 yyyGenIntNode(2,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);
     84 yyyAdjustINRC(2,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}}
     85 
     86 #line 31 "expr.Y"
     87         |       expr    '+'     expr
     88 #line 87 "expr.oxout.y"
     89 {if(yyyYok){
     90 yyyGenIntNode(3,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);
     91 yyyAdjustINRC(3,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}}
     92 
     93 #line 35 "expr.Y"
     94         |       expr    '/'     expr
     95 #line 94 "expr.oxout.y"
     96 {if(yyyYok){
     97 yyyGenIntNode(4,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);
     98 yyyAdjustINRC(4,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}}
     99 
    100 #line 39 "expr.Y"
    101         |       expr    '-'     expr
    102 #line 101 "expr.oxout.y"
    103 {if(yyyYok){
    104 yyyGenIntNode(5,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);
    105 yyyAdjustINRC(5,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}}
    106 
    107 #line 43 "expr.Y"
    108         |       '('     expr    ')'
    109 #line 108 "expr.oxout.y"
    110 {if(yyyYok){
    111 yyyGenIntNode(6,3,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);
    112 yyyAdjustINRC(6,3,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1,&$<yyyOxAttrbs>2,&$<yyyOxAttrbs>3);}}
    113 #line 44 "expr.Y"
    114         |       ID
    115 #line 114 "expr.oxout.y"
    116 {if(yyyYok){
    117 yyyGenIntNode(7,1,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);
    118 yyyAdjustINRC(7,1,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);}}
    119 
    120 #line 48 "expr.Y"
    121         |       CONST
    122 #line 121 "expr.oxout.y"
    123 {if(yyyYok){
    124 yyyGenIntNode(8,1,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);
    125 yyyAdjustINRC(8,1,0,0,&$<yyyOxAttrbs>$,&$<yyyOxAttrbs>1);}}
    126 
    127 #line 52 "expr.Y"
    128         ;
    129 %%
    130 
    131 int yyparse(void);
    132 
    133 int main()
    134   {yyparse();
    135   }
    136 
    137 
    138 
    139 #line 138 "expr.oxout.y"
    140 long yyySSALspaceSize =    20000;
    141 long yyyRSmaxSize =        1000;
    142 long yyyTravStackMaxSize = 2000;
    143 
    144 struct yyySolvedSAlistCell {yyyWAT attrbNum;
    145                             long next;
    146                            };
    147 
    148 #define yyyLambdaSSAL 0
    149 long yyySSALCfreeList = yyyLambdaSSAL;
    150 long yyyNewSSALC = 1;
    151 
    152 struct yyySolvedSAlistCell *yyySSALspace;
    153 
    154 long yyyNbytesStackStg;
    155 
    156 
    157 
    158 yyyFT yyyRCIL[1];
    159 
    160 short yyyIIIEL[] = {0,
    161 0,2,6,10,14,18,22,24,
    162 };
    163 
    164 long yyyIIEL[] = {
    165 0,0,0,0,0,0,0,0,0,0,0,0,
    166 0,0,0,0,0,0,0,0,0,0,0,0,
    167 1,1,
    168 };
    169 
    170 long yyyIEL[] = {
    171 0,0,0,
    172 };
    173 
    174 yyyFT yyyEntL[1];
    175 
    176 void yyyfatal(char *msg)
    177 {fputs(msg,stderr);exit(-1);}
    178 
    179 
    180 
    181 #define yyySSALof 'S'
    182 #define yyyRSof   'q'
    183 #define yyyTSof   't'
    184 
    185 
    186 
    187 void yyyHandleOverflow(char which)
    188   {char *msg1 = "?", *msg2;
    189    long  oldSize = 0, newSize;
    190    switch(which)
    191      {
    192       case yyySSALof :
    193            msg1 = "SSAL overflow: ";
    194            oldSize = yyySSALspaceSize;
    195            break;
    196       case yyyRSof   :
    197            msg1 = "ready set overflow: ";
    198            oldSize = yyyRSmaxSize;
    199            break;
    200       case yyyTSof   :
    201            msg1 = "traversal stack overflow: ";
    202            oldSize = yyyTravStackMaxSize;
    203            break;
    204       default        :;
    205      }
    206    newSize = (3*oldSize)/2;
    207    if (newSize < 100) newSize = 100;
    208    fputs(msg1,stderr);
    209    fprintf(stderr,"size was %ld.\n",oldSize);
    210    msg2 = "     Have to modify evaluator:  -Y%c%ld.\n";
    211    fprintf(stderr,msg2,which,newSize);
    212    exit(-1);
    213   }
    214 
    215 
    216 
    217 void yyySignalEnts(yyyGNT *node,long startP,long stopP)
    218   {yyyGNT *dumNode;
    219 
    220    while (startP < stopP)
    221      {
    222       if (!yyyEntL[startP]) dumNode = node;
    223          else dumNode = (node->cL)[yyyEntL[startP]-1];
    224       if (!(--((dumNode->refCountList)[yyyEntL[startP+1]]
    225               )
    226            )
    227          )
    228          {
    229           if (++yyyRSTop == yyyAfterRS)
    230              {yyyHandleOverflow(yyyRSof);
    231               break;
    232              }
    233           yyyRSTop->node = dumNode;
    234           yyyRSTop->whichSym = yyyEntL[startP];
    235           yyyRSTop->wa = yyyEntL[startP+1];
    236          }
    237       startP += 2;
    238      }
    239   }
    240 
    241 
    242 
    243 
    244 
    245 
    246 void yyySolveAndSignal() {
    247 long yyyiDum,*yyypL;
    248 int yyyws,yyywa;
    249 yyyGNT *yyyRSTopN,*yyyRefN;
    250 yyyParent yyyRSTopNp;
    251 
    252 
    253 yyyRSTopNp = (yyyRSTopN = yyyRSTop->node)->parent;
    254 yyyRefN= (yyyws = (yyyRSTop->whichSym))?yyyRSTopNp.noderef:yyyRSTopN;
    255 yyywa = yyyRSTop->wa;
    256 yyyRSTop--;
    257 switch(yyyRefN->prodNum) {
    258 case 1:  /***yacc rule 1***/
    259   switch (yyyws) {
    260   }
    261 break;
    262 case 2:  /***yacc rule 2***/
    263   switch (yyyws) {
    264   }
    265 break;
    266 case 3:  /***yacc rule 3***/
    267   switch (yyyws) {
    268   }
    269 break;
    270 case 4:  /***yacc rule 4***/
    271   switch (yyyws) {
    272   }
    273 break;
    274 case 5:  /***yacc rule 5***/
    275   switch (yyyws) {
    276   }
    277 break;
    278 case 6:  /***yacc rule 6***/
    279   switch (yyyws) {
    280   }
    281 break;
    282 case 7:  /***yacc rule 7***/
    283   switch (yyyws) {
    284   case 1:  /**/
    285     switch (yyywa) {
    286     }
    287   break;
    288   }
    289 break;
    290 case 8:  /***yacc rule 8***/
    291   switch (yyyws) {
    292   case 1:  /**/
    293     switch (yyywa) {
    294     }
    295   break;
    296   }
    297 break;
    298 } /* switch */
    299 
    300 if (yyyws)  /* the just-solved instance was inherited. */
    301    {if (yyyRSTopN->prodNum)
    302        {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopN->prodNum]] + yyywa;
    303         yyySignalEnts(yyyRSTopN,yyyIEL[yyyiDum],
    304                                 yyyIEL[yyyiDum+1]
    305                      );
    306        }
    307    }
    308    else     /* the just-solved instance was synthesized. */
    309    {if (!(yyyRSTopN->parentIsStack)) /* node has a parent. */
    310        {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopNp.noderef->prodNum] +
    311                           yyyRSTopN->whichSym
    312                          ] +
    313                   yyywa;
    314         yyySignalEnts(yyyRSTopNp.noderef,
    315                       yyyIEL[yyyiDum],
    316                       yyyIEL[yyyiDum+1]
    317                      );
    318        }
    319        else   /* node is still on the stack--it has no parent yet. */
    320        {yyypL = &(yyyRSTopNp.stackref->solvedSAlist);
    321         if (yyySSALCfreeList == yyyLambdaSSAL)
    322            {yyySSALspace[yyyNewSSALC].next = *yyypL;
    323             if ((*yyypL = yyyNewSSALC++) == yyySSALspaceSize)
    324                yyyHandleOverflow(yyySSALof);
    325            }
    326            else
    327            {yyyiDum = yyySSALCfreeList;
    328             yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next;
    329             yyySSALspace[yyyiDum].next = *yyypL;
    330             *yyypL = yyyiDum;
    331            }
    332         yyySSALspace[*yyypL].attrbNum = yyywa;
    333        }
    334    }
    335 
    336 } /* yyySolveAndSignal */
    337 
    338 
    339 
    340 
    341 
    342 
    343 #define condStg unsigned int conds;
    344 #define yyyClearConds {yyyTST->conds = 0;}
    345 #define yyySetCond(n) {yyyTST->conds += (1<<(n));}
    346 #define yyyCond(n) ((yyyTST->conds & (1<<(n)))?1:0)
    347 
    348 
    349 
    350 struct yyyTravStackItem {yyyGNT *node;
    351                          char isReady;
    352                          condStg
    353                         };
    354 
    355 
    356 
    357 void yyyDoTraversals(yyyGNT *rootNode)
    358 {struct yyyTravStackItem *yyyTravStack,*yyyTST,*yyyAfterTravStack;
    359  yyyGNT *yyyTSTn,**yyyCLptr2;
    360  int yyyi,yyyRL,yyyPass;
    361  int i;
    362 
    363  if (!yyyYok) return;
    364  if ((yyyTravStack =
    365                  ((struct yyyTravStackItem *)
    366                   calloc((size_t)yyyTravStackMaxSize,
    367                          (size_t)sizeof(struct yyyTravStackItem)
    368                         )
    369                  )
    370      )
    371      ==
    372      (struct yyyTravStackItem *)NULL
    373     )
    374     {fputs("malloc error in traversal stack allocation\n",stderr);
    375      exit(-1);
    376     }
    377 
    378 yyyAfterTravStack = yyyTravStack + yyyTravStackMaxSize;
    379 yyyTravStack++;
    380 
    381 
    382 for (yyyi=0; yyyi<2; yyyi++) {
    383 yyyTST = yyyTravStack;
    384 yyyTST->node = rootNode;
    385 yyyTST->isReady = 0;
    386 yyyClearConds
    387 
    388 while(yyyTST >= yyyTravStack)
    389   {yyyTSTn = yyyTST->node;
    390    if (yyyTST->isReady)
    391       {yyyPass = 1;
    392        goto yyyTravSwitch;
    393 yyyTpop:
    394        yyyTST--;
    395       }
    396       else
    397       {yyyPass = 0;
    398        goto yyyTravSwitch;
    399 yyyTpush:
    400        yyyTST->isReady = 1;
    401        if (yyyTSTn->prodNum)
    402           {if (yyyRL)
    403              {yyyCLptr2 = yyyTSTn->cL;
    404               i = yyyTSTn->cLlen;
    405               while (i--)
    406                 {if (++yyyTST == yyyAfterTravStack)
    407                     yyyHandleOverflow(yyyTSof);
    408                     else
    409                     {yyyTST->node = *yyyCLptr2;
    410                      yyyTST->isReady = 0;
    411                      yyyClearConds
    412                     }
    413                  yyyCLptr2++;
    414                 }
    415              } /* right to left */
    416              else  /* left to right */
    417              {i = yyyTSTn->cLlen;
    418               yyyCLptr2 = yyyTSTn->cL + i;
    419               while (i--)
    420                 {yyyCLptr2--;
    421                  if (++yyyTST == yyyAfterTravStack)
    422                     yyyHandleOverflow(yyyTSof);
    423                     else
    424                     {yyyTST->node = *yyyCLptr2;
    425                      yyyTST->isReady = 0;
    426                      yyyClearConds
    427                     }
    428                 }
    429              } /* left to right */
    430           }
    431       } /* else */
    432    continue;
    433 yyyTravSwitch:
    434 				switch(yyyTSTn->prodNum)	{
    435 case 1:
    436 	switch(yyyi)	{
    437 		case 0:
    438 			switch(yyyPass)	{
    439 				case 0:
    440 yyyRL = 0;yyySetCond(0)
    441 
    442 if (!
    443 #line 24 "expr.Y"
    444   (1)
    445 #line 444 "expr.oxout.y"
    446 ) yyySetCond(1)
    447 yyySetCond(2)
    448 
    449 				case 1:
    450 
    451 if (yyyCond(0) != yyyPass) {
    452 #line 24 "expr.Y"
    453 
    454 #line 453 "expr.oxout.y"
    455 }
    456 if (yyyCond(1) != yyyPass) {
    457 #line 24 "expr.Y"
    458  printf("\n");
    459 
    460 #line 459 "expr.oxout.y"
    461 }
    462 if (yyyCond(2) != yyyPass) {
    463 #line 25 "expr.Y"
    464   printf("prefix:   ");
    465 
    466 #line 465 "expr.oxout.y"
    467 }
    468 				break;
    469 					}
    470 		break;
    471 		case 1:
    472 			switch(yyyPass)	{
    473 				case 0:
    474 yyyRL = 0;
    475 if (
    476 #line 23 "expr.Y"
    477   (1)
    478 #line 477 "expr.oxout.y"
    479 ) yyySetCond(2)
    480 
    481 				case 1:
    482 
    483 if (yyyCond(0) != yyyPass) {
    484 #line 22 "expr.Y"
    485  printf("\n");
    486 
    487 #line 486 "expr.oxout.y"
    488 }
    489 if (yyyCond(1) != yyyPass) {
    490 #line 23 "expr.Y"
    491 
    492 #line 491 "expr.oxout.y"
    493 }
    494 if (yyyCond(2) != yyyPass) {
    495 #line 23 "expr.Y"
    496  printf("postfix:  ");
    497 
    498 #line 497 "expr.oxout.y"
    499 }
    500 				break;
    501 					}
    502 		break;
    503 			}
    504 
    505 break;
    506 case 2:
    507 	switch(yyyi)	{
    508 		case 0:
    509 			switch(yyyPass)	{
    510 				case 0:
    511 yyyRL = 0;yyySetCond(0)
    512 
    513 				case 1:
    514 
    515 if (yyyCond(0) != yyyPass) {
    516 #line 29 "expr.Y"
    517   printf(" * ");
    518 
    519 #line 518 "expr.oxout.y"
    520 }
    521 				break;
    522 					}
    523 		break;
    524 		case 1:
    525 			switch(yyyPass)	{
    526 				case 0:
    527 yyyRL = 0;
    528 				case 1:
    529 
    530 if (yyyCond(0) != yyyPass) {
    531 #line 28 "expr.Y"
    532  printf(" * ");
    533 
    534 #line 533 "expr.oxout.y"
    535 }
    536 				break;
    537 					}
    538 		break;
    539 			}
    540 
    541 break;
    542 case 3:
    543 	switch(yyyi)	{
    544 		case 0:
    545 			switch(yyyPass)	{
    546 				case 0:
    547 yyyRL = 0;yyySetCond(0)
    548 
    549 				case 1:
    550 
    551 if (yyyCond(0) != yyyPass) {
    552 #line 32 "expr.Y"
    553   printf(" + ");
    554 
    555 #line 554 "expr.oxout.y"
    556 }
    557 				break;
    558 					}
    559 		break;
    560 		case 1:
    561 			switch(yyyPass)	{
    562 				case 0:
    563 yyyRL = 0;
    564 				case 1:
    565 
    566 if (yyyCond(0) != yyyPass) {
    567 #line 33 "expr.Y"
    568  printf(" + ");
    569 
    570 #line 569 "expr.oxout.y"
    571 }
    572 				break;
    573 					}
    574 		break;
    575 			}
    576 
    577 break;
    578 case 4:
    579 	switch(yyyi)	{
    580 		case 0:
    581 			switch(yyyPass)	{
    582 				case 0:
    583 yyyRL = 0;yyySetCond(0)
    584 
    585 				case 1:
    586 
    587 if (yyyCond(0) != yyyPass) {
    588 #line 37 "expr.Y"
    589   printf(" / ");
    590 
    591 #line 590 "expr.oxout.y"
    592 }
    593 				break;
    594 					}
    595 		break;
    596 		case 1:
    597 			switch(yyyPass)	{
    598 				case 0:
    599 yyyRL = 0;
    600 				case 1:
    601 
    602 if (yyyCond(0) != yyyPass) {
    603 #line 36 "expr.Y"
    604  printf(" / ");
    605 
    606 #line 605 "expr.oxout.y"
    607 }
    608 				break;
    609 					}
    610 		break;
    611 			}
    612 
    613 break;
    614 case 5:
    615 	switch(yyyi)	{
    616 		case 0:
    617 			switch(yyyPass)	{
    618 				case 0:
    619 yyyRL = 0;yyySetCond(0)
    620 
    621 				case 1:
    622 
    623 if (yyyCond(0) != yyyPass) {
    624 #line 41 "expr.Y"
    625   printf(" - ");
    626 
    627 #line 626 "expr.oxout.y"
    628 }
    629 				break;
    630 					}
    631 		break;
    632 		case 1:
    633 			switch(yyyPass)	{
    634 				case 0:
    635 yyyRL = 0;
    636 				case 1:
    637 
    638 if (yyyCond(0) != yyyPass) {
    639 #line 40 "expr.Y"
    640  printf(" - ");
    641 
    642 #line 641 "expr.oxout.y"
    643 }
    644 				break;
    645 					}
    646 		break;
    647 			}
    648 
    649 break;
    650 case 6:
    651 	switch(yyyi)	{
    652 		case 0:
    653 			switch(yyyPass)	{
    654 				case 0:
    655 yyyRL = 0;
    656 				case 1:
    657 
    658 				break;
    659 					}
    660 		break;
    661 		case 1:
    662 			switch(yyyPass)	{
    663 				case 0:
    664 yyyRL = 0;
    665 				case 1:
    666 
    667 				break;
    668 					}
    669 		break;
    670 			}
    671 
    672 break;
    673 case 7:
    674 	switch(yyyi)	{
    675 		case 0:
    676 			switch(yyyPass)	{
    677 				case 0:
    678 yyyRL = 0;yyySetCond(0)
    679 
    680 				case 1:
    681 
    682 if (yyyCond(0) != yyyPass) {
    683 #line 46 "expr.Y"
    684   printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme);
    685 
    686 #line 685 "expr.oxout.y"
    687 }
    688 				break;
    689 					}
    690 		break;
    691 		case 1:
    692 			switch(yyyPass)	{
    693 				case 0:
    694 yyyRL = 0;
    695 				case 1:
    696 
    697 if (yyyCond(0) != yyyPass) {
    698 #line 45 "expr.Y"
    699  printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme);
    700 
    701 #line 700 "expr.oxout.y"
    702 }
    703 				break;
    704 					}
    705 		break;
    706 			}
    707 
    708 break;
    709 case 8:
    710 	switch(yyyi)	{
    711 		case 0:
    712 			switch(yyyPass)	{
    713 				case 0:
    714 yyyRL = 0;yyySetCond(0)
    715 
    716 				case 1:
    717 
    718 if (yyyCond(0) != yyyPass) {
    719 #line 50 "expr.Y"
    720   printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme);
    721 
    722 #line 721 "expr.oxout.y"
    723 }
    724 				break;
    725 					}
    726 		break;
    727 		case 1:
    728 			switch(yyyPass)	{
    729 				case 0:
    730 yyyRL = 0;
    731 				case 1:
    732 
    733 if (yyyCond(0) != yyyPass) {
    734 #line 49 "expr.Y"
    735  printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme);
    736 
    737 #line 736 "expr.oxout.y"
    738 }
    739 				break;
    740 					}
    741 		break;
    742 			}
    743 
    744 break;
    745 								} /* switch */
    746    if (yyyPass) goto yyyTpop; else goto yyyTpush;
    747   } /* while */
    748  } /* for */
    749 } /* yyyDoTraversals */
    750 
    751 void yyyExecuteRRsection(yyyGNT *rootNode)  {
    752    int yyyi;
    753    long cycleSum = 0;
    754    long nNZrc = 0;
    755 
    756    if (!yyyYok) return;
    757    yyyCheckUnsolvedInstTrav(rootNode,&nNZrc,&cycleSum);
    758    if (nNZrc)
    759       {
    760        fputs("\n\n\n**********\n",stderr);
    761        fputs("cycle detected in completed parse tree",stderr);
    762        fputs(" after decoration.\n",stderr);
    763 #if CYCLE_VERBOSE
    764        fprintf(stderr,
    765                "number of unsolved attribute instances == %ld.\n",
    766                nNZrc
    767               );
    768        fprintf(stderr,
    769                "total number of remaining dependencies == %ld.\n",
    770                cycleSum
    771               );
    772        fputs("average number of remaining dependencies\n",stderr);
    773        fprintf(stderr,"  per unsolved instance == %f.\n",
    774                ((float)(cycleSum)/(float)(nNZrc))
    775               );
    776 #endif
    777        fprintf(stderr,
    778          "searching parse tree for %ld unsolved instances:\n",
    779                nNZrc
    780               );
    781        yyyUnsolvedInstSearchTravAux(rootNode);
    782       }
    783    yyyDoTraversals(rootNode);
    784 } /* yyyExecuteRRsection */
    785 
    786 
    787 
    788 yyyWAT yyyLRCIL[2] = {0,0,
    789 };
    790 
    791 
    792 
    793 void yyyYoxInit(void)
    794   {
    795    static int yyyInitDone = 0;
    796    if (yyyInitDone) return;
    797 
    798    if ((yyyRS = (yyyRSitem *)
    799          calloc((size_t)(yyyRSmaxSize+1), (size_t)sizeof(yyyRSitem))
    800        )
    801        ==
    802        ((yyyRSitem *) NULL)
    803       )
    804       yyyfatal("malloc error in ox ready set space allocation\n");
    805    yyyRS++;
    806    yyyAfterRS = yyyRS + yyyRSmaxSize;
    807 
    808 
    809    if ((yyySSALspace = (struct yyySolvedSAlistCell *)
    810           calloc((size_t)(yyySSALspaceSize+1), (size_t)sizeof(struct yyySolvedSAlistCell))
    811        )
    812        ==
    813        ((struct yyySolvedSAlistCell *) NULL)
    814       )
    815       yyyfatal("malloc error in stack solved list space allocation\n");
    816    yyyInitDone = 1;
    817 
    818    yyyRSTop = yyyRS - 1;
    819   } /* yyyYoxInit */
    820 
    821 
    822 
    823 void yyyDecorate(void)
    824   {
    825    while (yyyRSTop >= yyyRS)
    826       yyySolveAndSignal();
    827   }
    828 
    829 
    830 
    831 void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...)
    832   {yyyWST i;
    833    yyySIT **yyyOxStackItem = &yyval_OxAttrbs->yyyOxStackItem;
    834    yyyGNT *gnpDum;
    835    va_list ap;
    836 
    837    *yyyOxStackItem = (yyySIT *) malloc((size_t)sizeof(yyySIT));
    838    if (*yyyOxStackItem == (yyySIT *) NULL)
    839       yyyfatal("malloc error in ox yacc semantic stack space allocation\n");
    840    (*yyyOxStackItem)->node =
    841                                 (yyyGNT *) malloc((size_t)sizeof(yyyGNT));
    842    if ((*yyyOxStackItem)->node == (yyyGNT *) NULL)
    843       yyyfatal("malloc error in ox node space allocation\n");
    844    (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL;
    845    (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem;
    846    (*yyyOxStackItem)->node->parentIsStack = 1;
    847    (*yyyOxStackItem)->node->cLlen  = yyyRHSlength;
    848    (*yyyOxStackItem)->node->cL =
    849             (yyyGNT **) calloc((size_t)yyyRHSlength, (size_t)sizeof(yyyGNT *));
    850    if ((*yyyOxStackItem)->node->cL == (yyyGNT **) NULL)
    851       yyyfatal("malloc error in ox child list space allocation\n");
    852    (*yyyOxStackItem)->node->refCountListLen = yyyNattrbs;
    853    (*yyyOxStackItem)->node->refCountList =
    854             (yyyRCT *) calloc((size_t)yyyNattrbs, (size_t)sizeof(yyyRCT));
    855    if ((*yyyOxStackItem)->node->refCountList == (yyyRCT *) NULL)
    856       yyyfatal("malloc error in ox reference count list space allocation\n");
    857    (*yyyOxStackItem)->node->prodNum = (int) yyyProdNum;
    858    va_start(ap, yyval_OxAttrbs);
    859    for (i=1;i<=yyyRHSlength;i++)
    860      {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem;
    861       gnpDum = (*yyyOxStackItem)->node->cL[i-1] = yaccStDum->node;
    862       gnpDum->whichSym = i;
    863       gnpDum->parent.noderef = (*yyyOxStackItem)->node;
    864       gnpDum->parentIsStack = 0;
    865      }
    866    va_end(ap);
    867   }
    868 
    869 
    870 
    871 #define yyyDECORfREQ 50
    872 
    873 
    874 
    875 void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...)
    876   {yyyWST i;
    877    yyySIT *yyyOxStackItem = yyval_OxAttrbs->yyyOxStackItem;
    878    long SSALptr,SSALptrHead,*cPtrPtr;
    879    long *pL;
    880    yyyGNT *gnpDum;
    881    long iTemp;
    882    long nextP;
    883    static unsigned short intNodeCount = yyyDECORfREQ;
    884    va_list ap;
    885 
    886    nextP = startP;
    887    while (nextP < stopP)
    888      {if (yyyRCIL[nextP] == yyyR)
    889          {(yyyOxStackItem->node->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2];
    890          }
    891          else
    892          {(((yyyOxStackItem->node->cL)[yyyRCIL[nextP]])->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2];
    893          }
    894       nextP += 3;
    895      }
    896    pL = yyyIIEL + yyyIIIEL[yyyProdNum];
    897    va_start(ap, yyval_OxAttrbs);
    898    for (i=1;i<=yyyRHSlength;i++)
    899      {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem;
    900       pL++;
    901       SSALptrHead = SSALptr = *(cPtrPtr = &(yaccStDum->solvedSAlist));
    902       if (SSALptr != yyyLambdaSSAL)
    903          {*cPtrPtr = yyyLambdaSSAL;
    904           do
    905             {
    906              iTemp = (*pL+yyySSALspace[SSALptr].attrbNum);
    907              yyySignalEnts(yyyOxStackItem->node,
    908                            yyyIEL[iTemp],
    909                            yyyIEL[iTemp+1]
    910                           );
    911              SSALptr = *(cPtrPtr = &(yyySSALspace[SSALptr].next));
    912             }
    913             while (SSALptr != yyyLambdaSSAL);
    914           *cPtrPtr = yyySSALCfreeList;
    915           yyySSALCfreeList = SSALptrHead;
    916          }
    917      }
    918    va_end(ap);
    919    nextP = startP + 2;
    920    while (nextP < stopP)
    921      {if (!yyyRCIL[nextP])
    922          {if (yyyRCIL[nextP-2] == yyyR)
    923              {pL = &(yyyOxStackItem->solvedSAlist);
    924               if (yyySSALCfreeList == yyyLambdaSSAL)
    925                  {yyySSALspace[yyyNewSSALC].next = *pL;
    926                   if ((*pL = yyyNewSSALC++) == yyySSALspaceSize)
    927                      yyyHandleOverflow(yyySSALof);
    928                  }
    929                  else
    930                  {iTemp = yyySSALCfreeList;
    931                   yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next;
    932                   yyySSALspace[iTemp].next = *pL;
    933                   *pL = iTemp;
    934                  }
    935               yyySSALspace[*pL].attrbNum = yyyRCIL[nextP-1];
    936              }
    937              else
    938              {if ((gnpDum = (yyyOxStackItem->node->cL)[yyyRCIL[nextP-2]])->prodNum != 0)
    939                  {
    940                   iTemp = yyyIIEL[yyyIIIEL[gnpDum->prodNum]] + yyyRCIL[nextP-1];
    941                   yyySignalEnts(gnpDum,
    942                                 yyyIEL[iTemp],
    943                                 yyyIEL[iTemp+1]
    944                                );
    945                  }
    946              }
    947          }
    948       nextP += 3;
    949      }
    950    if (!--intNodeCount)
    951       {intNodeCount = yyyDECORfREQ;
    952        yyyDecorate();
    953       }
    954   }
    955 
    956 
    957 
    958 void yyyGenLeaf(int nAttrbs,int typeNum,long startP,long stopP,YYSTYPE *mylval)
    959   {yyyRCT *rcPdum;
    960    yyySIT **yyyOxStackItem = &mylval->yyyOxAttrbs.yyyOxStackItem;
    961    (*yyyOxStackItem) = (yyySIT *) malloc((size_t)sizeof(yyySIT));
    962    if ((*yyyOxStackItem) == (yyySIT *) NULL)
    963       yyyfatal("malloc error in ox yacc semantic stack space allocation\n");
    964    (*yyyOxStackItem)->node =
    965                           (yyyGNT *) malloc((size_t)sizeof(yyyGNT))
    966                          ;
    967    if ((*yyyOxStackItem)->node == (yyyGNT *) NULL)
    968       yyyfatal("malloc error in ox node space allocation\n");
    969    (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL;
    970    (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem;
    971    (*yyyOxStackItem)->node->parentIsStack = 1;
    972    (*yyyOxStackItem)->node->cLlen = 0;
    973    (*yyyOxStackItem)->node->cL = (yyyGNT **)NULL;
    974    (*yyyOxStackItem)->node->refCountListLen = nAttrbs;
    975    rcPdum = (*yyyOxStackItem)->node->refCountList =
    976             (yyyRCT *) calloc((size_t)nAttrbs, (size_t)sizeof(yyyRCT));
    977    if (rcPdum == (yyyRCT *) NULL)
    978       yyyfatal("malloc error in ox reference count list space allocation\n");
    979    while (startP < stopP) rcPdum[yyyLRCIL[startP++]] = 0;
    980    (*yyyOxStackItem)->node->prodNum = 0;
    981    (*yyyOxStackItem)->node->whichSym = 0;
    982   }
    983 
    984 
    985 
    986 void yyyabort(void)
    987   {yyyYok = 0;
    988   }
    989 
    990 
    991 
    992 
    993 
    994 #define yyyLastProdNum 8
    995 
    996 
    997 #define yyyNsorts 1
    998 
    999 
   1000 int yyyProdsInd[] = {
   1001    0,
   1002    0,   2,   6,  10,  14,  18,  22,  24,
   1003   26,
   1004 };
   1005 
   1006 
   1007 int yyyProds[][2] = {
   1008 { 116,   0},{ 462,   0},{ 462,   0},{ 462,   0},{ 412,   0},
   1009 { 462,   0},{ 462,   0},{ 462,   0},{ 420,   0},{ 462,   0},
   1010 { 462,   0},{ 462,   0},{ 452,   0},{ 462,   0},{ 462,   0},
   1011 { 462,   0},{ 436,   0},{ 462,   0},{ 462,   0},{ 396,   0},
   1012 { 462,   0},{ 404,   0},{ 462,   0},{ 619,   1},{ 462,   0},
   1013 { 567,   1},
   1014 };
   1015 
   1016 
   1017 int yyySortsInd[] = {
   1018   0,
   1019   0,
   1020   1,
   1021 };
   1022 
   1023 
   1024 int yyySorts[] = {
   1025   413,
   1026 };
   1027 
   1028 
   1029 
   1030 char *yyyStringTab[] = {
   1031 NULL,NULL,NULL,NULL,NULL,
   1032 NULL,NULL,NULL,NULL,NULL,
   1033 NULL,NULL,NULL,NULL,NULL,
   1034 NULL,NULL,NULL,NULL,NULL,
   1035 NULL,NULL,NULL,NULL,NULL,
   1036 NULL,NULL,NULL,NULL,NULL,
   1037 NULL,NULL,NULL,NULL,NULL,
   1038 NULL,NULL,NULL,NULL,NULL,
   1039 NULL,NULL,NULL,NULL,NULL,
   1040 NULL,NULL,NULL,NULL,NULL,
   1041 NULL,NULL,NULL,NULL,NULL,
   1042 NULL,NULL,NULL,NULL,NULL,
   1043 NULL,NULL,NULL,NULL,NULL,
   1044 NULL,NULL,NULL,NULL,NULL,
   1045 NULL,NULL,NULL,NULL,NULL,
   1046 NULL,NULL,NULL,NULL,NULL,
   1047 NULL,NULL,NULL,NULL,NULL,
   1048 NULL,NULL,NULL,NULL,NULL,
   1049 NULL,NULL,NULL,NULL,NULL,
   1050 NULL,NULL,NULL,NULL,NULL,
   1051 NULL,NULL,NULL,NULL,NULL,
   1052 NULL,NULL,NULL,NULL,NULL,
   1053 NULL,NULL,NULL,NULL,NULL,
   1054 NULL,"s",NULL,NULL,NULL,
   1055 NULL,NULL,"y",NULL,NULL,
   1056 NULL,NULL,NULL,NULL,NULL,
   1057 NULL,NULL,NULL,NULL,NULL,
   1058 NULL,NULL,NULL,NULL,NULL,
   1059 NULL,NULL,NULL,NULL,NULL,
   1060 NULL,NULL,NULL,NULL,NULL,
   1061 NULL,NULL,NULL,NULL,NULL,
   1062 NULL,NULL,NULL,NULL,NULL,
   1063 NULL,NULL,NULL,NULL,NULL,
   1064 NULL,NULL,NULL,NULL,NULL,
   1065 NULL,NULL,NULL,NULL,NULL,
   1066 NULL,NULL,NULL,NULL,NULL,
   1067 NULL,NULL,NULL,NULL,NULL,
   1068 NULL,NULL,NULL,NULL,NULL,
   1069 NULL,NULL,NULL,NULL,NULL,
   1070 NULL,NULL,NULL,NULL,NULL,
   1071 NULL,NULL,NULL,NULL,NULL,
   1072 NULL,NULL,NULL,NULL,NULL,
   1073 NULL,NULL,NULL,NULL,NULL,
   1074 NULL,NULL,NULL,NULL,NULL,
   1075 NULL,NULL,NULL,NULL,NULL,
   1076 NULL,NULL,NULL,NULL,NULL,
   1077 NULL,NULL,NULL,NULL,NULL,
   1078 NULL,NULL,NULL,NULL,NULL,
   1079 NULL,NULL,NULL,NULL,NULL,
   1080 NULL,NULL,NULL,NULL,NULL,
   1081 NULL,NULL,NULL,NULL,NULL,
   1082 NULL,NULL,NULL,NULL,NULL,
   1083 NULL,NULL,NULL,NULL,NULL,
   1084 NULL,NULL,NULL,NULL,NULL,
   1085 NULL,NULL,NULL,NULL,NULL,
   1086 NULL,NULL,NULL,NULL,NULL,
   1087 NULL,NULL,NULL,NULL,NULL,
   1088 NULL,NULL,NULL,NULL,NULL,
   1089 NULL,NULL,NULL,NULL,NULL,
   1090 NULL,NULL,NULL,NULL,NULL,
   1091 NULL,NULL,NULL,NULL,NULL,
   1092 NULL,NULL,NULL,NULL,NULL,
   1093 NULL,NULL,NULL,NULL,NULL,
   1094 NULL,NULL,NULL,NULL,NULL,
   1095 NULL,NULL,NULL,NULL,NULL,
   1096 NULL,"LRpre",NULL,NULL,NULL,
   1097 NULL,NULL,NULL,NULL,NULL,
   1098 NULL,NULL,NULL,NULL,NULL,
   1099 NULL,NULL,NULL,NULL,NULL,
   1100 NULL,NULL,NULL,NULL,NULL,
   1101 NULL,NULL,NULL,NULL,NULL,
   1102 NULL,NULL,NULL,NULL,NULL,
   1103 NULL,NULL,NULL,NULL,NULL,
   1104 NULL,NULL,NULL,NULL,NULL,
   1105 NULL,NULL,NULL,NULL,NULL,
   1106 NULL,NULL,NULL,NULL,NULL,
   1107 NULL,NULL,NULL,NULL,NULL,
   1108 NULL,NULL,NULL,NULL,NULL,
   1109 NULL,NULL,NULL,NULL,NULL,
   1110 NULL,"'('",NULL,NULL,NULL,
   1111 NULL,NULL,NULL,NULL,"')'",
   1112 NULL,NULL,NULL,NULL,NULL,
   1113 NULL,NULL,"'*'","lexeme",NULL,
   1114 NULL,NULL,NULL,NULL,NULL,
   1115 "'+'",NULL,NULL,NULL,NULL,
   1116 NULL,NULL,NULL,NULL,NULL,
   1117 NULL,NULL,NULL,NULL,NULL,
   1118 NULL,"'-'",NULL,NULL,NULL,
   1119 NULL,NULL,NULL,NULL,NULL,
   1120 NULL,NULL,NULL,NULL,NULL,
   1121 NULL,NULL,"'/'",NULL,NULL,
   1122 NULL,NULL,NULL,NULL,NULL,
   1123 NULL,NULL,"expr",NULL,NULL,
   1124 NULL,NULL,NULL,NULL,NULL,
   1125 NULL,NULL,NULL,NULL,NULL,
   1126 NULL,"printf",NULL,NULL,NULL,
   1127 NULL,NULL,NULL,NULL,NULL,
   1128 NULL,NULL,NULL,NULL,NULL,
   1129 NULL,NULL,NULL,NULL,NULL,
   1130 NULL,NULL,NULL,NULL,NULL,
   1131 NULL,NULL,NULL,NULL,NULL,
   1132 NULL,NULL,NULL,NULL,NULL,
   1133 NULL,NULL,NULL,NULL,NULL,
   1134 NULL,NULL,NULL,NULL,NULL,
   1135 NULL,NULL,NULL,NULL,NULL,
   1136 NULL,NULL,NULL,NULL,NULL,
   1137 NULL,NULL,NULL,NULL,NULL,
   1138 NULL,NULL,NULL,NULL,NULL,
   1139 NULL,NULL,NULL,NULL,NULL,
   1140 NULL,NULL,NULL,NULL,NULL,
   1141 NULL,NULL,NULL,NULL,NULL,
   1142 NULL,NULL,NULL,NULL,NULL,
   1143 NULL,NULL,NULL,NULL,NULL,
   1144 NULL,NULL,"CONST","LRpost",NULL,
   1145 NULL,NULL,NULL,NULL,NULL,
   1146 NULL,NULL,NULL,NULL,NULL,
   1147 NULL,NULL,NULL,NULL,NULL,
   1148 NULL,NULL,NULL,NULL,NULL,
   1149 NULL,NULL,NULL,NULL,NULL,
   1150 NULL,NULL,NULL,NULL,NULL,
   1151 NULL,NULL,NULL,NULL,NULL,
   1152 NULL,NULL,NULL,NULL,NULL,
   1153 NULL,NULL,NULL,NULL,NULL,
   1154 NULL,NULL,NULL,NULL,"ID",
   1155 NULL,NULL,NULL,NULL,NULL,
   1156 NULL,NULL,NULL,NULL,NULL,
   1157 NULL,NULL,NULL,NULL,NULL,
   1158 NULL,NULL,NULL,NULL,NULL,
   1159 NULL,NULL,NULL,NULL,NULL,
   1160 NULL,NULL,NULL,NULL,NULL,
   1161 NULL,NULL,NULL,NULL,NULL,
   1162 NULL,NULL,NULL,NULL,NULL,
   1163 NULL,NULL,NULL,NULL,NULL,
   1164 NULL,NULL,NULL,NULL,NULL,
   1165 NULL,NULL,NULL,NULL,NULL,
   1166 NULL,NULL,NULL,NULL,NULL,
   1167 NULL,NULL,NULL,NULL,NULL,
   1168 NULL,NULL,NULL,NULL,NULL,
   1169 NULL,NULL,NULL,NULL,NULL,
   1170 NULL,NULL,NULL,NULL,NULL,
   1171 NULL,NULL,NULL,NULL,NULL,
   1172 NULL,NULL,NULL,NULL,NULL,
   1173 NULL,NULL,NULL,NULL,NULL,
   1174 NULL,NULL,NULL,NULL,NULL,
   1175 NULL,NULL,NULL,NULL,NULL,
   1176 NULL,NULL,NULL,NULL,NULL,
   1177 NULL,NULL,NULL,NULL,NULL,
   1178 NULL,NULL,NULL,NULL,NULL,
   1179 NULL,NULL,NULL,NULL,NULL,
   1180 NULL,NULL,NULL,NULL,NULL,
   1181 NULL,NULL,NULL,NULL,NULL,
   1182 NULL,NULL,NULL,NULL,NULL,
   1183 NULL,NULL,NULL,NULL,NULL,
   1184 NULL,NULL,NULL,NULL,NULL,
   1185 NULL,NULL,NULL,NULL,NULL,
   1186 NULL,NULL,NULL,NULL,NULL,
   1187 NULL,NULL,NULL,NULL,NULL,
   1188 NULL,NULL,NULL,NULL,NULL,
   1189 NULL,NULL,NULL,NULL,NULL,
   1190 NULL,NULL,NULL,NULL,NULL,
   1191 NULL,NULL,NULL,NULL,NULL,
   1192 NULL,NULL,NULL,NULL,NULL,
   1193 NULL,NULL,NULL,NULL,NULL,
   1194 NULL,NULL,NULL,NULL,NULL,
   1195 NULL,NULL,NULL,NULL,NULL,
   1196 NULL,NULL,NULL,NULL,NULL,
   1197 NULL,NULL,NULL,NULL,NULL,
   1198 NULL,NULL,NULL,NULL,NULL,
   1199 NULL,NULL,NULL,NULL,NULL,
   1200 NULL,NULL,NULL,NULL,NULL,
   1201 NULL,NULL,NULL,NULL,NULL,
   1202 NULL,NULL,NULL,NULL,NULL,
   1203 NULL,NULL,NULL,NULL,NULL,
   1204 NULL,NULL,NULL,NULL,NULL,
   1205 NULL,NULL,NULL,NULL,NULL,
   1206 NULL,NULL,NULL,NULL,NULL,
   1207 NULL,NULL,NULL,NULL,NULL,
   1208 NULL,NULL,NULL,NULL,NULL,
   1209 NULL,NULL,NULL,NULL,NULL,
   1210 NULL,NULL,NULL,NULL,NULL,
   1211 NULL,NULL,NULL,NULL,NULL,
   1212 NULL,NULL,NULL,NULL,NULL,
   1213 NULL,NULL,NULL,NULL,NULL,
   1214 NULL,NULL,NULL,NULL,NULL,
   1215 NULL,NULL,NULL,NULL,NULL,
   1216 NULL,NULL,NULL,NULL,NULL,
   1217 NULL,NULL,NULL,NULL,NULL,
   1218 NULL,NULL,NULL,NULL,NULL,
   1219 NULL,NULL,NULL,NULL,NULL,
   1220 NULL,NULL,NULL,NULL,NULL,
   1221 NULL,NULL,NULL,NULL,NULL,
   1222 NULL,NULL,NULL,NULL,NULL,
   1223 NULL,NULL,NULL,NULL,NULL,
   1224 NULL,NULL,NULL,NULL,NULL,
   1225 NULL,NULL,NULL,NULL,NULL,
   1226 NULL,NULL,NULL,NULL,NULL,
   1227 NULL,NULL,NULL,NULL,NULL,
   1228 NULL,NULL,NULL,NULL,NULL,
   1229 NULL,NULL,NULL,NULL,NULL,
   1230 NULL,NULL,NULL,NULL,NULL,
   1231 NULL,NULL,NULL,NULL,NULL,
   1232 NULL,NULL,NULL,NULL,NULL,
   1233 NULL,NULL,NULL,NULL,NULL,
   1234 NULL,NULL,NULL,NULL,NULL,
   1235 NULL,NULL,NULL,NULL,NULL,
   1236 NULL,NULL,NULL,NULL,NULL,
   1237 NULL,NULL,NULL,NULL,NULL,
   1238 NULL,NULL,NULL,NULL,NULL,
   1239 NULL,NULL,NULL,NULL,NULL,
   1240 NULL,NULL,NULL,NULL,NULL,
   1241 NULL,NULL,NULL,NULL,NULL,
   1242 NULL,NULL,NULL,NULL,NULL,
   1243 NULL,NULL,NULL,NULL,NULL,
   1244 NULL,NULL,NULL,NULL,NULL,
   1245 NULL,NULL,NULL,NULL,NULL,
   1246 NULL,NULL,NULL,NULL,NULL,
   1247 NULL,NULL,NULL,NULL,NULL,
   1248 NULL,NULL,NULL,NULL,NULL,
   1249 NULL,NULL,NULL,NULL,NULL,
   1250 NULL,NULL,NULL,NULL,NULL,
   1251 NULL,NULL,NULL,NULL,NULL,
   1252 NULL,NULL,NULL,NULL,NULL,
   1253 NULL,NULL,NULL,NULL,NULL,
   1254 NULL,NULL,NULL,NULL,NULL,
   1255 NULL,NULL,NULL,NULL,NULL,
   1256 NULL,NULL,NULL,NULL,NULL,
   1257 NULL,NULL,NULL,NULL,NULL,
   1258 NULL,NULL,NULL,NULL,NULL,
   1259 NULL,NULL,NULL,NULL,NULL,
   1260 NULL,NULL,NULL,NULL,NULL,
   1261 NULL,NULL,NULL,NULL,NULL,
   1262 NULL,NULL,NULL,NULL,NULL,
   1263 NULL,NULL,NULL,NULL,NULL,
   1264 NULL,NULL,NULL,NULL,NULL,
   1265 NULL,NULL,NULL,NULL,NULL,
   1266 NULL,NULL,NULL,NULL,NULL,
   1267 NULL,NULL,NULL,NULL,NULL,
   1268 NULL,NULL,NULL,NULL,NULL,
   1269 NULL,NULL,NULL,NULL,NULL,
   1270 NULL,NULL,NULL,NULL,NULL,
   1271 NULL,NULL,NULL,NULL,NULL,
   1272 NULL,NULL,NULL,NULL,NULL,
   1273 NULL,NULL,NULL,NULL,NULL,
   1274 NULL,NULL,NULL,NULL,NULL,
   1275 NULL,NULL,NULL,NULL,NULL,
   1276 NULL,NULL,NULL,NULL,NULL,
   1277 NULL,
   1278 };
   1279 
   1280 
   1281 
   1282 #define yyySizeofProd(num) (yyyProdsInd[(num)+1] - yyyProdsInd[(num)])
   1283 
   1284 #define yyyGSoccurStr(prodNum,symPos) \
   1285    (yyyStringTab[yyyProds[yyyProdsInd[(prodNum)] + (symPos)][0]])
   1286 
   1287 #define yyySizeofSort(num) (yyySortsInd[(num)+1] - yyySortsInd[(num)])
   1288 
   1289 #define yyySortOf(prodNum,symPos) \
   1290   (yyyProds[yyyProdsInd[(prodNum)] + (symPos)][1])
   1291 
   1292 #define yyyAttrbStr(prodNum,symPos,attrbNum)                      \
   1293   (yyyStringTab[yyySorts[yyySortsInd[yyySortOf(prodNum,symPos)] + \
   1294                          (attrbNum)                               \
   1295                         ]                                         \
   1296                ]                                                  \
   1297   )
   1298 
   1299 
   1300 
   1301 void yyyShowProd(int i)
   1302   {int j,nSyms;
   1303 
   1304    nSyms = yyySizeofProd(i);
   1305    for (j=0; j<nSyms; j++)
   1306      {
   1307       fprintf(stderr,"%s",yyyGSoccurStr(i,j));
   1308       if (j == 0) fputs(" : ",stderr); else putc(' ',stderr);
   1309      }
   1310    fputs(";\n",stderr);
   1311   }
   1312 
   1313 
   1314 
   1315 void yyyShowProds()
   1316   {int i; for (i=1; i<=yyyLastProdNum; i++) yyyShowProd(i);}
   1317 
   1318 
   1319 
   1320 void yyyShowSymsAndSorts()
   1321   {int i;
   1322 
   1323    for (i=1; i<=yyyLastProdNum; i++)
   1324      {int j, nSyms;
   1325 
   1326       fprintf(stderr,
   1327               "\n\n\n---------------------------------- %3.1d\n",i);
   1328       /* yyyShowProd(i); */
   1329       nSyms = yyySizeofProd(i);
   1330       for (j=0; j<nSyms; j++)
   1331         {int k, sortSize;
   1332 
   1333          fprintf(stderr,"%s\n",yyyGSoccurStr(i,j));
   1334          sortSize = yyySizeofSort(yyySortOf(i,j));
   1335          for (k=0; k<sortSize; k++)
   1336             fprintf(stderr,"  %s\n",yyyAttrbStr(i,j,k));
   1337          if (j == 0) fputs("->\n",stderr);
   1338               else
   1339               putc('\n',stderr);
   1340         }
   1341      }
   1342   }
   1343 
   1344 
   1345 
   1346 void yyyCheckNodeInstancesSolved(yyyGNT *np)
   1347   {int mysort,sortSize,i,prodNum,symPos,inTerminalNode;
   1348    int nUnsolvedInsts = 0;
   1349 
   1350    if (np->prodNum != 0)
   1351      {inTerminalNode = 0;
   1352       prodNum = np->prodNum;
   1353       symPos = 0;
   1354      }
   1355    else
   1356      {inTerminalNode = 1;
   1357       prodNum = np->parent.noderef->prodNum;
   1358       symPos = np->whichSym;
   1359      }
   1360    mysort = yyySortOf(prodNum,symPos);
   1361    sortSize = yyySizeofSort(mysort);
   1362    for (i=0; i<sortSize; i++)
   1363      if ((np->refCountList)[i] != 0) nUnsolvedInsts += 1;
   1364    if (nUnsolvedInsts)
   1365      {fprintf(stderr,
   1366       "\nFound node that has %d unsolved attribute instance(s).\n",
   1367               nUnsolvedInsts
   1368              );
   1369       fprintf(stderr,"Node is labeled \"%s\".\n",
   1370              yyyGSoccurStr(prodNum,symPos));
   1371       if (inTerminalNode)
   1372         {fputs("Node is terminal.  Its parent production is:\n  ",stderr);
   1373          yyyShowProd(prodNum);
   1374         }
   1375       else
   1376         {fputs("Node is nonterminal.  ",stderr);
   1377          if (!(np->parentIsStack))
   1378            {fprintf(stderr,
   1379                     "Node is %dth child in its parent production:\n  ",
   1380                    np->whichSym
   1381                   );
   1382             yyyShowProd(np->parent.noderef->prodNum);
   1383            }
   1384          fputs("Node is on left hand side of this production:\n  ",stderr);
   1385          yyyShowProd(np->prodNum);
   1386         }
   1387       fputs("The following instances are unsolved:\n",stderr);
   1388       for (i=0; i<sortSize; i++)
   1389         if ((np->refCountList)[i] != 0)
   1390           fprintf(stderr,"     %-16s still has %1d dependencies.\n",
   1391                   yyyAttrbStr(prodNum,symPos,i),(np->refCountList)[i]);
   1392      }
   1393   }
   1394 
   1395 
   1396 
   1397 void yyyCheckUnsolvedInstTrav(yyyGNT *pNode,long *nNZrc,long *cycleSum)
   1398   {yyyGNT **yyyCLpdum;
   1399    yyyRCT *rcp;
   1400    int i;
   1401 
   1402    /* visit the refCountList of each node in the tree, and sum the non-zero refCounts */
   1403    rcp = pNode->refCountList;
   1404    i = pNode->refCountListLen;
   1405    while (i--)
   1406       if (*rcp++) {*cycleSum += *(rcp - 1); (*nNZrc)++;}
   1407    yyyCLpdum = pNode->cL;
   1408    i = pNode->cLlen;
   1409    while (i--)
   1410      {
   1411       yyyCheckUnsolvedInstTrav(*yyyCLpdum,nNZrc,cycleSum);
   1412       yyyCLpdum++;
   1413      }
   1414   }
   1415 
   1416 
   1417 
   1418 void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode)
   1419   {yyyGNT **yyyCLpdum;
   1420    int i;
   1421 
   1422    yyyCheckNodeInstancesSolved(pNode);
   1423    yyyCLpdum = pNode->cL;
   1424    i = pNode->cLlen;
   1425    while (i--)
   1426      {
   1427       yyyUnsolvedInstSearchTravAux(*yyyCLpdum);
   1428       yyyCLpdum++;
   1429      }
   1430   }
   1431 
   1432 
   1433 
   1434 void yyyUnsolvedInstSearchTrav(yyyGNT *pNode)
   1435   {yyyGNT **yyyCLpdum;
   1436    int i;
   1437 
   1438    yyyCLpdum = pNode->cL;
   1439    i = pNode->cLlen;
   1440    while (i--)
   1441      {
   1442       yyyUnsolvedInstSearchTravAux(*yyyCLpdum);
   1443       yyyCLpdum++;
   1444      }
   1445   }
   1446 
   1447 
   1448 
   1449