1 /*        $NetBSD: expr.oxout.y,v 1.3 2024/09/14 21:29:03 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 
main()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 
yyyfatal(char * msg)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 
yyyHandleOverflow(char which)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 
yyySignalEnts(yyyGNT * node,long startP,long stopP)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 
yyySolveAndSignal()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 
yyyDoTraversals(yyyGNT * rootNode)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 
yyyExecuteRRsection(yyyGNT * rootNode)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 
yyyYoxInit(void)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 
yyyDecorate(void)823 void yyyDecorate(void)
824   {
825    while (yyyRSTop >= yyyRS)
826       yyySolveAndSignal();
827   }
828 
829 
830 
yyyGenIntNode(long yyyProdNum,int yyyRHSlength,int yyyNattrbs,struct yyyOxAttrbs * yyval_OxAttrbs,...)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 
yyyAdjustINRC(long yyyProdNum,int yyyRHSlength,long startP,long stopP,struct yyyOxAttrbs * yyval_OxAttrbs,...)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 
yyyGenLeaf(int nAttrbs,int typeNum,long startP,long stopP,YYSTYPE * mylval)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 
yyyabort(void)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 0,0,0,0,0,
1032 0,0,0,0,0,
1033 0,0,0,0,0,
1034 0,0,0,0,0,
1035 0,0,0,0,0,
1036 0,0,0,0,0,
1037 0,0,0,0,0,
1038 0,0,0,0,0,
1039 0,0,0,0,0,
1040 0,0,0,0,0,
1041 0,0,0,0,0,
1042 0,0,0,0,0,
1043 0,0,0,0,0,
1044 0,0,0,0,0,
1045 0,0,0,0,0,
1046 0,0,0,0,0,
1047 0,0,0,0,0,
1048 0,0,0,0,0,
1049 0,0,0,0,0,
1050 0,0,0,0,0,
1051 0,0,0,0,0,
1052 0,0,0,0,0,
1053 0,0,0,0,0,
1054 0,"s",0,0,0,
1055 0,0,"y",0,0,
1056 0,0,0,0,0,
1057 0,0,0,0,0,
1058 0,0,0,0,0,
1059 0,0,0,0,0,
1060 0,0,0,0,0,
1061 0,0,0,0,0,
1062 0,0,0,0,0,
1063 0,0,0,0,0,
1064 0,0,0,0,0,
1065 0,0,0,0,0,
1066 0,0,0,0,0,
1067 0,0,0,0,0,
1068 0,0,0,0,0,
1069 0,0,0,0,0,
1070 0,0,0,0,0,
1071 0,0,0,0,0,
1072 0,0,0,0,0,
1073 0,0,0,0,0,
1074 0,0,0,0,0,
1075 0,0,0,0,0,
1076 0,0,0,0,0,
1077 0,0,0,0,0,
1078 0,0,0,0,0,
1079 0,0,0,0,0,
1080 0,0,0,0,0,
1081 0,0,0,0,0,
1082 0,0,0,0,0,
1083 0,0,0,0,0,
1084 0,0,0,0,0,
1085 0,0,0,0,0,
1086 0,0,0,0,0,
1087 0,0,0,0,0,
1088 0,0,0,0,0,
1089 0,0,0,0,0,
1090 0,0,0,0,0,
1091 0,0,0,0,0,
1092 0,0,0,0,0,
1093 0,0,0,0,0,
1094 0,0,0,0,0,
1095 0,0,0,0,0,
1096 0,"LRpre",0,0,0,
1097 0,0,0,0,0,
1098 0,0,0,0,0,
1099 0,0,0,0,0,
1100 0,0,0,0,0,
1101 0,0,0,0,0,
1102 0,0,0,0,0,
1103 0,0,0,0,0,
1104 0,0,0,0,0,
1105 0,0,0,0,0,
1106 0,0,0,0,0,
1107 0,0,0,0,0,
1108 0,0,0,0,0,
1109 0,0,0,0,0,
1110 0,"'('",0,0,0,
1111 0,0,0,0,"')'",
1112 0,0,0,0,0,
1113 0,0,"'*'","lexeme",0,
1114 0,0,0,0,0,
1115 "'+'",0,0,0,0,
1116 0,0,0,0,0,
1117 0,0,0,0,0,
1118 0,"'-'",0,0,0,
1119 0,0,0,0,0,
1120 0,0,0,0,0,
1121 0,0,"'/'",0,0,
1122 0,0,0,0,0,
1123 0,0,"expr",0,0,
1124 0,0,0,0,0,
1125 0,0,0,0,0,
1126 0,"printf",0,0,0,
1127 0,0,0,0,0,
1128 0,0,0,0,0,
1129 0,0,0,0,0,
1130 0,0,0,0,0,
1131 0,0,0,0,0,
1132 0,0,0,0,0,
1133 0,0,0,0,0,
1134 0,0,0,0,0,
1135 0,0,0,0,0,
1136 0,0,0,0,0,
1137 0,0,0,0,0,
1138 0,0,0,0,0,
1139 0,0,0,0,0,
1140 0,0,0,0,0,
1141 0,0,0,0,0,
1142 0,0,0,0,0,
1143 0,0,0,0,0,
1144 0,0,"CONST","LRpost",0,
1145 0,0,0,0,0,
1146 0,0,0,0,0,
1147 0,0,0,0,0,
1148 0,0,0,0,0,
1149 0,0,0,0,0,
1150 0,0,0,0,0,
1151 0,0,0,0,0,
1152 0,0,0,0,0,
1153 0,0,0,0,0,
1154 0,0,0,0,"ID",
1155 0,0,0,0,0,
1156 0,0,0,0,0,
1157 0,0,0,0,0,
1158 0,0,0,0,0,
1159 0,0,0,0,0,
1160 0,0,0,0,0,
1161 0,0,0,0,0,
1162 0,0,0,0,0,
1163 0,0,0,0,0,
1164 0,0,0,0,0,
1165 0,0,0,0,0,
1166 0,0,0,0,0,
1167 0,0,0,0,0,
1168 0,0,0,0,0,
1169 0,0,0,0,0,
1170 0,0,0,0,0,
1171 0,0,0,0,0,
1172 0,0,0,0,0,
1173 0,0,0,0,0,
1174 0,0,0,0,0,
1175 0,0,0,0,0,
1176 0,0,0,0,0,
1177 0,0,0,0,0,
1178 0,0,0,0,0,
1179 0,0,0,0,0,
1180 0,0,0,0,0,
1181 0,0,0,0,0,
1182 0,0,0,0,0,
1183 0,0,0,0,0,
1184 0,0,0,0,0,
1185 0,0,0,0,0,
1186 0,0,0,0,0,
1187 0,0,0,0,0,
1188 0,0,0,0,0,
1189 0,0,0,0,0,
1190 0,0,0,0,0,
1191 0,0,0,0,0,
1192 0,0,0,0,0,
1193 0,0,0,0,0,
1194 0,0,0,0,0,
1195 0,0,0,0,0,
1196 0,0,0,0,0,
1197 0,0,0,0,0,
1198 0,0,0,0,0,
1199 0,0,0,0,0,
1200 0,0,0,0,0,
1201 0,0,0,0,0,
1202 0,0,0,0,0,
1203 0,0,0,0,0,
1204 0,0,0,0,0,
1205 0,0,0,0,0,
1206 0,0,0,0,0,
1207 0,0,0,0,0,
1208 0,0,0,0,0,
1209 0,0,0,0,0,
1210 0,0,0,0,0,
1211 0,0,0,0,0,
1212 0,0,0,0,0,
1213 0,0,0,0,0,
1214 0,0,0,0,0,
1215 0,0,0,0,0,
1216 0,0,0,0,0,
1217 0,0,0,0,0,
1218 0,0,0,0,0,
1219 0,0,0,0,0,
1220 0,0,0,0,0,
1221 0,0,0,0,0,
1222 0,0,0,0,0,
1223 0,0,0,0,0,
1224 0,0,0,0,0,
1225 0,0,0,0,0,
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,0,0,0,0,
1250 0,0,0,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,
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 
yyyShowProd(int i)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 
yyyShowProds()1315 void yyyShowProds()
1316   {int i; for (i=1; i<=yyyLastProdNum; i++) yyyShowProd(i);}
1317 
1318 
1319 
yyyShowSymsAndSorts()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 
yyyCheckNodeInstancesSolved(yyyGNT * np)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 
yyyCheckUnsolvedInstTrav(yyyGNT * pNode,long * nNZrc,long * cycleSum)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 
yyyUnsolvedInstSearchTravAux(yyyGNT * pNode)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 
yyyUnsolvedInstSearchTrav(yyyGNT * pNode)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