expr.oxout.y revision 1.1 1 /* $NetBSD: expr.oxout.y,v 1.1 2017/02/11 19:30:02 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,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: ")/* missing ; */
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 = (struct yyyRSitem *)
799 calloc((size_t)(yyyRSmaxSize+1), (size_t)sizeof(struct yyyRSitem))
800 )
801 ==
802 ((struct 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 = 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 *yylval)
959 {yyyRCT *rcPdum;
960 yyySIT **yyyOxStackItem = &yylval->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 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
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