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