Skip to content

Instantly share code, notes, and snippets.

@millimoose
Created May 7, 2013 13:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save millimoose/5532525 to your computer and use it in GitHub Desktop.
Save millimoose/5532525 to your computer and use it in GitHub Desktop.
Ox is a goddamn nightmare
/* output from Ox version G1.04 */
%{
%}
%{
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <glib.h>
#include "ag.h"
%}
%union {}
%{
extern int yylineno;
int yylex();
void yyerror(char *msg);
%}
%error-verbose
// Keywords
%token TEnd TArray TOf TInt TReturn TIf TThen TElse TWhile TDo TVar TNot TOr TAssign
%token TDecimalLiteral THexLiteral TIdentifier
%start yyyAugNonterm
%{
struct yyyT1 {int value;};
typedef struct yyyT1 *yyyP1;
struct yyyT2 {int value;};
typedef struct yyyT2 *yyyP2;
struct yyyT3 {char *name;};
typedef struct yyyT3 *yyyP3;
struct yyyT4 { GSList *variables; };
typedef struct yyyT4 *yyyP4;
struct yyyT5 { GSList *variables; };
typedef struct yyyT5 *yyyP5;
struct yyyT6 { int rank; };
typedef struct yyyT6 *yyyP6;
struct yyyT7 { struct _VariableType *type; };
typedef struct yyyT7 *yyyP7;
struct yyyT8 { struct _VariableDeclaration *declaration; };
typedef struct yyyT8 *yyyP8;
struct yyyT9 { GSList *in_chain; GSList *out_chain; };
typedef struct yyyT9 *yyyP9;
struct yyyT10 { GSList *in_chain; GSList *out_chain; };
typedef struct yyyT10 *yyyP10;
/*custom*/
typedef unsigned char yyyWAT;
typedef unsigned char yyyRCT;
typedef unsigned short yyyPNT;
typedef unsigned char yyyWST;
#include <limits.h>
#define yyyR UCHAR_MAX
/* funny type; as wide as the widest of yyyWAT,yyyWST,yyyRCT */
typedef unsigned short yyyFT;
/*stock*/
struct yyyGenNode {void *parent;
struct yyyGenNode **cL; /* child list */
yyyRCT *refCountList;
yyyPNT prodNum;
yyyWST whichSym; /* which child of parent? */
};
typedef struct yyyGenNode yyyGNT;
struct yyyTB {int isEmpty;
int typeNum;
int nAttrbs;
char *snBufPtr;
yyyWAT *startP,*stopP;
};
extern struct yyyTB yyyTermBuffer;
extern yyyWAT yyyLRCIL[];
extern void yyyGenLeaf();
%}
%{
#include <stdio.h>
int yyyYok = 1;
int yyyInitDone = 0;
char *yyySTsn;
yyyGNT *yyySTN;
int yyyGNSz = sizeof(yyyGNT);
int yyyProdNum,yyyRHSlength,yyyNattrbs,yyyTypeNum;
extern yyyFT yyyRCIL[];
void yyyExecuteRRsection();
void yyyYoxInit();
void yyyYoxReset();
void yyyDecorate();
void yyyGenIntNode();
void yyyAdjustINRC();
void yyyPrune();
void yyyUnsolvedInstSearchTrav();
void yyyUnsolvedInstSearchTravAux();
void yyyerror();
void yyyShift();
#define yyyRSU(NUM1,NUM2,NUM3,NUM4) \
yyyProdNum=NUM1;yyyRHSlength=NUM2;yyyNattrbs=NUM3;yyyTypeNum=NUM4;\
if ((yychar <= 0) && (!yyyTermBuffer.isEmpty)) yyyShift();
%}
%%
// 0 or more funcdef
yyyAugNonterm
: {if (!yyyInitDone)
{yyyYoxInit();
yyyInitDone = 1;
}
yyyYoxReset();
}
program
{
yyyDecorate(); yyyExecuteRRsection();
}
;
program : program funcdef ';'
{if(yyyYok){
yyyRSU(1,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+0,yyyRCIL+0);/*yyyPrune(1);*/}}|
{if(yyyYok){
yyyRSU(2,0,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+0,yyyRCIL+0);}};
funcdef : TIdentifier '(' pars ')' stats TEnd
{if(yyyYok){
yyyRSU(3,6,1,4);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+0,yyyRCIL+6);/*yyyPrune(3);*/}}
;
// 0 or more vardef
pars : pars ',' vardef
{if(yyyYok){
yyyRSU(4,3,1,5);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+6,yyyRCIL+9);/*yyyPrune(4);*/}}
| vardef
{if(yyyYok){
yyyRSU(5,1,1,5);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+9,yyyRCIL+12);/*yyyPrune(5);*/}}
|
{if(yyyYok){
yyyRSU(6,0,1,5);
yyyGenIntNode();
(((yyyP5)yyySTsn)->variables) = newScope(); yyyAdjustINRC(yyyRCIL+12,yyyRCIL+15);}}
;
vardef : TIdentifier ':' type
{if(yyyYok){
yyyRSU(7,3,1,8);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+15,yyyRCIL+18);/*yyyPrune(7);*/}}
;
type : array TInt
{if(yyyYok){
yyyRSU(8,2,1,7);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+18,yyyRCIL+21);/*yyyPrune(8);*/}}
;
// 0 or more "array of"
array : array TArray TOf
{if(yyyYok){
yyyRSU(9,3,1,6);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+21,yyyRCIL+24);/*yyyPrune(9);*/}}
|
{if(yyyYok){
yyyRSU(10,0,1,6);
yyyGenIntNode();
(((yyyP6)yyySTsn)->rank) = 0; yyyAdjustINRC(yyyRCIL+24,yyyRCIL+27);}}
;
// 0 or more stat
stats : stats stat ';'
{if(yyyYok){
yyyRSU(11,3,2,9);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+27,yyyRCIL+36);}}
|
{if(yyyYok){
yyyRSU(12,0,2,9);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+36,yyyRCIL+39);}}
;
stat : TReturn expr
{if(yyyYok){
yyyRSU(13,2,2,10);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+39,yyyRCIL+42);/*yyyPrune(13);*/}}
| TIf bool TThen stats TEnd
{if(yyyYok){
yyyRSU(14,5,2,10);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+42,yyyRCIL+48);}}
| TIf bool TThen stats TElse stats TEnd
{if(yyyYok){
yyyRSU(15,7,2,10);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+48,yyyRCIL+57);}}
| TWhile bool TDo stats TEnd
{if(yyyYok){
yyyRSU(16,5,2,10);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+57,yyyRCIL+63);}}
| TVar vardef TAssign expr
{if(yyyYok){
yyyRSU(17,4,2,10);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+63,yyyRCIL+66);}}
| lexpr TAssign expr
{if(yyyYok){
yyyRSU(18,3,2,10);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+66,yyyRCIL+69);/*yyyPrune(18);*/}}
| term
{if(yyyYok){
yyyRSU(19,1,2,10);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+69,yyyRCIL+72);/*yyyPrune(19);*/}}
;
bool : bool TOr bterm
{if(yyyYok){
yyyRSU(20,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(20);*/}}| bterm
{if(yyyYok){
yyyRSU(21,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(21);*/}};
bterm : '(' bool ')'
{if(yyyYok){
yyyRSU(22,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(22);*/}}| TNot bterm
{if(yyyYok){
yyyRSU(23,2,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(23);*/}}| expr '<' expr
{if(yyyYok){
yyyRSU(24,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(24);*/}}| expr '#' expr
{if(yyyYok){
yyyRSU(25,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(25);*/}};
lexpr : TIdentifier
{if(yyyYok){
yyyRSU(26,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(26);*/}}| term '[' expr ']'
{if(yyyYok){
yyyRSU(27,4,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(27);*/}};
expr : addexpr
{if(yyyYok){
yyyRSU(28,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(28);*/}}| subexpr
{if(yyyYok){
yyyRSU(29,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(29);*/}}| mulexpr
{if(yyyYok){
yyyRSU(30,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(30);*/}}| term
{if(yyyYok){
yyyRSU(31,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(31);*/}};
addexpr : addexpr '+' term
{if(yyyYok){
yyyRSU(32,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(32);*/}}| term '+' term
{if(yyyYok){
yyyRSU(33,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(33);*/}};
subexpr : subexpr '-' term
{if(yyyYok){
yyyRSU(34,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(34);*/}}| term '-' term
{if(yyyYok){
yyyRSU(35,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(35);*/}};
mulexpr : mulexpr '*' term
{if(yyyYok){
yyyRSU(36,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(36);*/}}| term '*' term
{if(yyyYok){
yyyRSU(37,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(37);*/}};
term : '(' expr ')'
{if(yyyYok){
yyyRSU(38,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(38);*/}}| term '[' expr ']'
{if(yyyYok){
yyyRSU(39,4,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(39);*/}}| TIdentifier
{if(yyyYok){
yyyRSU(40,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(40);*/}}| TDecimalLiteral
{if(yyyYok){
yyyRSU(41,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(41);*/}}| THexLiteral
{if(yyyYok){
yyyRSU(42,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(42);*/}}| funccall
{if(yyyYok){
yyyRSU(43,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(43);*/}};
funccall : TIdentifier '(' fcpars ')' ':' type
{if(yyyYok){
yyyRSU(44,6,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(44);*/}};
fcpars : fcpar
{if(yyyYok){
yyyRSU(45,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(45);*/}}|
{if(yyyYok){
yyyRSU(46,0,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);}};
fcpar : fcpar ',' expr
{if(yyyYok){
yyyRSU(47,3,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(47);*/}}| expr
{if(yyyYok){
yyyRSU(48,1,0,0);
yyyGenIntNode();
yyyAdjustINRC(yyyRCIL+72,yyyRCIL+72);/*yyyPrune(48);*/}};
%%
void yyerror(char *msg) {
printf("%d: %s\n",
yylineno, msg);
exit(2);
}
int main(int nargs, char **args) {
return yyparse();
} /*custom*/
long yyyMaxNbytesNodeStg = 2000000;
long yyyMaxNrefCounts = 500000;
long yyyMaxNchildren = 60000;
long yyyMaxStackSize = 2000;
long yyySSALspaceSize = 20000;
long yyyRSmaxSize = 1000;
long yyyTravStackMaxSize = 2000;
struct yyyTB yyyTermBuffer;
char *yyyNodeAndStackSpace;
char *yyyNodeSpace;
char *yyyNextNodeSpace;
char *yyyAfterNodeSpace;
struct yyyGenNode **yyyChildListSpace;
struct yyyGenNode **yyyNextCLspace;
struct yyyGenNode **yyyAfterChildListSpace;
yyyRCT *yyyRefCountListSpace;
yyyRCT *yyyNextRCLspace;
yyyRCT *yyyAfterRefCountListSpace;
struct yyySolvedSAlistCell {yyyWAT attrbNum;
long next;
};
#define yyyLambdaSSAL 0
long yyySSALCfreeList = yyyLambdaSSAL;
long yyyNewSSALC = 1;
struct yyySolvedSAlistCell *yyySSALspace;
struct yyyStackItem {struct yyyGenNode *node;
long solvedSAlist;
struct yyyGenNode *oldestNode;
};
long yyyNbytesStackStg;
struct yyyStackItem *yyyStack;
struct yyyStackItem *yyyAfterStack;
struct yyyStackItem *yyyStackTop;
struct yyyRSitem {yyyGNT *node;
yyyWST whichSym;
yyyWAT wa;
};
struct yyyRSitem *yyyRS;
struct yyyRSitem *yyyRSTop;
struct yyyRSitem *yyyAfterRS;
yyyFT yyyRCIL[] = {
yyyR,0,1, 4,0,1, yyyR,0,2, yyyR,0,1, yyyR,0,0, yyyR,0,1,
yyyR,0,1, yyyR,0,1, yyyR,0,0, yyyR,1,1, 0,0,1, 1,0,1,
yyyR,1,1, yyyR,1,1, yyyR,1,1, 3,0,1, yyyR,1,1, 3,0,1,
5,0,1, yyyR,1,1, 3,0,1, yyyR,1,2, yyyR,1,1, yyyR,1,1,
};
short yyyIIIEL[] = {0,
0,4,5,12,16,18,19,23,26,30,
31,35,36,39,45,53,59,64,68,70,
74,76,80,83,87,91,93,98,100,102,
104,106,110,114,118,122,126,130,134,139,
141,143,145,147,154,156,157,161,
};
long yyyIIEL[] = {
0,0,0,1,1,1,2,3,3,4,4,6,
6,7,8,8,9,10,11,12,13,14,14,15,
16,17,17,18,19,19,19,20,22,24,26,26,
28,30,30,30,32,32,32,32,34,34,36,36,
36,36,38,38,40,40,42,42,42,42,44,44,
46,46,47,47,47,49,49,49,49,51,51,51,
51,51,51,51,51,51,51,51,51,51,51,51,
51,51,51,51,51,51,51,51,51,52,52,52,
52,52,52,52,52,52,52,52,52,52,52,52,
52,52,52,52,52,52,52,52,52,52,52,52,
52,52,52,52,52,52,52,52,52,52,52,52,
52,52,52,52,52,52,52,52,52,53,53,54,
54,55,55,55,55,56,56,56,56,56,57,57,
57,57,57,57,57,57,57,
};
long yyyIEL[] = {
0,0,2,2,4,4,4,4,
6,8,8,10,10,10,12,14,
14,16,16,18,18,20,20,20,
22,22,24,26,26,28,28,32,
32,32,32,38,38,38,38,38,
38,42,42,42,42,44,44,46,
48,48,50,50,50,50,50,50,
50,50,
};
yyyFT yyyEntL[] = {
5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,0,2,0,0,1,0,1,0,1,0,1,4,0,
0,1,6,0,4,0,0,1,4,0,0,1,0,1,0,1,
0,1,
};
#define yyyPermitUserAlloc 0
void yyyfatal(msg)
char *msg;
{fprintf(stderr,msg);exit(-1);}
#define yyyNSof 'n'
#define yyyRCof 'r'
#define yyyCLof 'c'
#define yyySof 's'
#define yyySSALof 'S'
#define yyyRSof 'q'
#define yyyTSof 't'
void yyyHandleOverflow(which)
char which;
{char *msg1,*msg2;
long oldSize,newSize;
switch(which)
{
case yyyNSof :
msg1 = "node storage overflow: ";
oldSize = yyyMaxNbytesNodeStg;
break;
case yyyRCof :
msg1 = "dependee count overflow: ";
oldSize = yyyMaxNrefCounts;
break;
case yyyCLof :
msg1 = "child list overflow: ";
oldSize = yyyMaxNchildren;
break;
case yyySof :
msg1 = "parse-tree stack overflow: ";
oldSize = yyyMaxStackSize;
break;
case yyySSALof :
msg1 = "SSAL overflow: ";
oldSize = yyySSALspaceSize;
break;
case yyyRSof :
msg1 = "ready set overflow: ";
oldSize = yyyRSmaxSize;
break;
case yyyTSof :
msg1 = "traversal stack overflow: ";
oldSize = yyyTravStackMaxSize;
break;
default :;
}
newSize = (3*oldSize)/2;
if (newSize < 100) newSize = 100;
fprintf(stderr,msg1);
fprintf(stderr,"size was %d.\n",oldSize);
if (yyyPermitUserAlloc)
msg2 = " Try -Y%c%d option.\n";
else
msg2 = " Have to modify evaluator: -Y%c%d.\n";
fprintf(stderr,msg2,which,newSize);
exit(-1);
}
void yyySignalEnts(node,startP,stopP)
register yyyGNT *node;
register yyyFT *startP,*stopP;
{register yyyGNT *dumNode;
while (startP < stopP)
{
if (!(*startP)) dumNode = node;
else dumNode = (node->cL)[(*startP)-1];
if (!(--((dumNode->refCountList)[*(startP+1)]
)
)
)
{
if (++yyyRSTop == yyyAfterRS)
{yyyHandleOverflow(yyyRSof);
break;
}
yyyRSTop->node = dumNode;
yyyRSTop->whichSym = *startP;
yyyRSTop->wa = *(startP+1);
}
startP += 2;
}
}
#define yyyCeiling(num,inc) (((inc) * ((num)/(inc))) + (((num)%(inc))?(inc):0))
int yyyAlignSize = 4;
int yyyNdSz[11];
int yyyNdPrSz[11];
typedef int yyyCopyType;
int yyyNdCopySz[11];
long yyyBiggestNodeSize = 0;
void yyyNodeSizeCalc()
{int i;
yyyGNSz = yyyCeiling(yyyGNSz,yyyAlignSize);
yyyNdSz[0] = 0;
yyyNdSz[1] = sizeof(struct yyyT1);
yyyNdSz[2] = sizeof(struct yyyT2);
yyyNdSz[3] = sizeof(struct yyyT3);
yyyNdSz[4] = sizeof(struct yyyT4);
yyyNdSz[5] = sizeof(struct yyyT5);
yyyNdSz[6] = sizeof(struct yyyT6);
yyyNdSz[7] = sizeof(struct yyyT7);
yyyNdSz[8] = sizeof(struct yyyT8);
yyyNdSz[9] = sizeof(struct yyyT9);
yyyNdSz[10] = sizeof(struct yyyT10);
for (i=0;i<11;i++)
{yyyNdSz[i] = yyyCeiling(yyyNdSz[i],yyyAlignSize);
yyyNdPrSz[i] = yyyNdSz[i] + yyyGNSz;
if (yyyBiggestNodeSize < yyyNdSz[i])
yyyBiggestNodeSize = yyyNdSz[i];
yyyNdCopySz[i] = yyyCeiling(yyyNdSz[i],sizeof(yyyCopyType)) /
sizeof(yyyCopyType);
}
}
void yyySolveAndSignal() {
register long yyyiDum,*yyypL;
register int yyyws,yyywa;
register yyyGNT *yyyRSTopN,*yyyRefN;
register void *yyyRSTopNp;
yyyRSTopNp = (yyyRSTopN = yyyRSTop->node)->parent;
yyyRefN= (yyyws = (yyyRSTop->whichSym))?((yyyGNT *)yyyRSTopNp):yyyRSTopN;
yyywa = yyyRSTop->wa;
yyyRSTop--;
switch(yyyRefN->prodNum) {
case 1: /***yacc rule 1***/
switch (yyyws) {
case 2: /**/
switch (yyywa) {
}
break;
}
break;
case 2: /***yacc rule 2***/
switch (yyyws) {
}
break;
case 3: /***yacc rule 3***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 0:
(((yyyP4)(((char *)yyyRSTopN)+yyyGNSz))->variables) = (((yyyP5)(((char *)((yyyRefN->cL)[2]))+yyyGNSz))->variables);
yyySignalEnts(yyyRefN,yyyEntL+0,yyyEntL+2);
break;
}
break;
case 1: /**/
switch (yyywa) {
}
break;
case 3: /**/
switch (yyywa) {
}
break;
case 5: /**/
switch (yyywa) {
case 0:
(((yyyP9)(((char *)yyyRSTopN)+yyyGNSz))->in_chain) = chainPushScope(newScope(), chainPushScope(newChain(), (((yyyP4)(((char *)yyyRefN)+yyyGNSz))->variables)));
break;
}
break;
}
break;
case 4: /***yacc rule 4***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 0:
(((yyyP5)(((char *)yyyRSTopN)+yyyGNSz))->variables) = scopePushDeclaration((((yyyP5)(((char *)((yyyRefN->cL)[0]))+yyyGNSz))->variables), (((yyyP8)(((char *)((yyyRefN->cL)[2]))+yyyGNSz))->declaration)); break;
}
break;
case 1: /**/
switch (yyywa) {
}
break;
case 3: /**/
switch (yyywa) {
}
break;
}
break;
case 5: /***yacc rule 5***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 0:
(((yyyP5)(((char *)yyyRSTopN)+yyyGNSz))->variables) = scopePushDeclaration(newScope(), (((yyyP8)(((char *)((yyyRefN->cL)[0]))+yyyGNSz))->declaration)); break;
}
break;
case 1: /**/
switch (yyywa) {
}
break;
}
break;
case 6: /***yacc rule 6***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
}
break;
}
break;
case 7: /***yacc rule 7***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 0:
(((yyyP8)(((char *)yyyRSTopN)+yyyGNSz))->declaration) = newVariableDeclaration((((yyyP3)(((char *)((yyyRefN->cL)[0]))+yyyGNSz))->name), (((yyyP7)(((char *)((yyyRefN->cL)[2]))+yyyGNSz))->type)); break;
}
break;
case 1: /**/
switch (yyywa) {
}
break;
case 3: /**/
switch (yyywa) {
}
break;
}
break;
case 8: /***yacc rule 8***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 0:
(((yyyP7)(((char *)yyyRSTopN)+yyyGNSz))->type) = newVariableType((((yyyP6)(((char *)((yyyRefN->cL)[0]))+yyyGNSz))->rank)); break;
}
break;
case 1: /**/
switch (yyywa) {
}
break;
}
break;
case 9: /***yacc rule 9***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 0:
(((yyyP6)(((char *)yyyRSTopN)+yyyGNSz))->rank) = (((yyyP6)(((char *)((yyyRefN->cL)[0]))+yyyGNSz))->rank) + 1; break;
}
break;
case 1: /**/
switch (yyywa) {
}
break;
}
break;
case 10: /***yacc rule 10***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
}
break;
}
break;
case 11: /***yacc rule 11***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP9)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = (((yyyP10)(((char *)((yyyRefN->cL)[1]))+yyyGNSz))->out_chain);
break;
}
break;
case 1: /**/
switch (yyywa) {
case 0:
(((yyyP9)(((char *)yyyRSTopN)+yyyGNSz))->in_chain) = (((yyyP9)(((char *)yyyRefN)+yyyGNSz))->in_chain);
break;
}
break;
case 2: /**/
switch (yyywa) {
case 0:
(((yyyP10)(((char *)yyyRSTopN)+yyyGNSz))->in_chain) = (((yyyP9)(((char *)((yyyRefN->cL)[0]))+yyyGNSz))->out_chain);
break;
}
break;
}
break;
case 12: /***yacc rule 12***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP9)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = (((yyyP9)(((char *)yyyRefN)+yyyGNSz))->in_chain);
break;
}
break;
}
break;
case 13: /***yacc rule 13***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP10)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain); break;
}
break;
}
break;
case 14: /***yacc rule 14***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP10)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain);
break;
}
break;
case 4: /**/
switch (yyywa) {
case 0:
(((yyyP9)(((char *)yyyRSTopN)+yyyGNSz))->in_chain) = chainPushScope(newScope(), (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain));
break;
}
break;
}
break;
case 15: /***yacc rule 15***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP10)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain);
break;
}
break;
case 4: /**/
switch (yyywa) {
case 0:
(((yyyP9)(((char *)yyyRSTopN)+yyyGNSz))->in_chain) = chainPushScope(newScope(), (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain));
break;
}
break;
case 6: /**/
switch (yyywa) {
case 0:
(((yyyP9)(((char *)yyyRSTopN)+yyyGNSz))->in_chain) = chainPushScope(newScope(), (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain));
break;
}
break;
}
break;
case 16: /***yacc rule 16***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP10)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain);
break;
}
break;
case 4: /**/
switch (yyywa) {
case 0:
(((yyyP9)(((char *)yyyRSTopN)+yyyGNSz))->in_chain) = chainPushScope(newScope(), (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain));
break;
}
break;
}
break;
case 17: /***yacc rule 17***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP10)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = chainPushScope((((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain)->next,
scopePushDeclaration((((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain)->data,
(((yyyP8)(((char *)((yyyRefN->cL)[1]))+yyyGNSz))->declaration)));
break;
}
break;
case 2: /**/
switch (yyywa) {
}
break;
}
break;
case 18: /***yacc rule 18***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP10)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain); break;
}
break;
}
break;
case 19: /***yacc rule 19***/
switch (yyyws) {
case 0: /**/
switch (yyywa) {
case 1:
(((yyyP10)(((char *)yyyRSTopN)+yyyGNSz))->out_chain) = (((yyyP10)(((char *)yyyRefN)+yyyGNSz))->in_chain); break;
}
break;
}
break;
case 20: /***yacc rule 20***/
switch (yyyws) {
}
break;
case 21: /***yacc rule 21***/
switch (yyyws) {
}
break;
case 22: /***yacc rule 22***/
switch (yyyws) {
}
break;
case 23: /***yacc rule 23***/
switch (yyyws) {
}
break;
case 24: /***yacc rule 24***/
switch (yyyws) {
}
break;
case 25: /***yacc rule 25***/
switch (yyyws) {
}
break;
case 26: /***yacc rule 26***/
switch (yyyws) {
case 1: /**/
switch (yyywa) {
}
break;
}
break;
case 27: /***yacc rule 27***/
switch (yyyws) {
}
break;
case 28: /***yacc rule 28***/
switch (yyyws) {
}
break;
case 29: /***yacc rule 29***/
switch (yyyws) {
}
break;
case 30: /***yacc rule 30***/
switch (yyyws) {
}
break;
case 31: /***yacc rule 31***/
switch (yyyws) {
}
break;
case 32: /***yacc rule 32***/
switch (yyyws) {
}
break;
case 33: /***yacc rule 33***/
switch (yyyws) {
}
break;
case 34: /***yacc rule 34***/
switch (yyyws) {
}
break;
case 35: /***yacc rule 35***/
switch (yyyws) {
}
break;
case 36: /***yacc rule 36***/
switch (yyyws) {
}
break;
case 37: /***yacc rule 37***/
switch (yyyws) {
}
break;
case 38: /***yacc rule 38***/
switch (yyyws) {
}
break;
case 39: /***yacc rule 39***/
switch (yyyws) {
}
break;
case 40: /***yacc rule 40***/
switch (yyyws) {
case 1: /**/
switch (yyywa) {
}
break;
}
break;
case 41: /***yacc rule 41***/
switch (yyyws) {
case 1: /**/
switch (yyywa) {
}
break;
}
break;
case 42: /***yacc rule 42***/
switch (yyyws) {
case 1: /**/
switch (yyywa) {
}
break;
}
break;
case 43: /***yacc rule 43***/
switch (yyyws) {
}
break;
case 44: /***yacc rule 44***/
switch (yyyws) {
case 1: /**/
switch (yyywa) {
}
break;
case 6: /**/
switch (yyywa) {
}
break;
}
break;
case 45: /***yacc rule 45***/
switch (yyyws) {
}
break;
case 46: /***yacc rule 46***/
switch (yyyws) {
}
break;
case 47: /***yacc rule 47***/
switch (yyyws) {
}
break;
case 48: /***yacc rule 48***/
switch (yyyws) {
}
break;
} /* switch */
if (yyyws) /* the just-solved instance was inherited. */
{if (yyyRSTopN->prodNum)
{yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopN->prodNum]] + yyywa;
yyySignalEnts(yyyRSTopN,yyyEntL + yyyIEL[yyyiDum],
yyyEntL + yyyIEL[yyyiDum+1]
);
}
}
else /* the just-solved instance was synthesized. */
{if ((char *)yyyRSTopNp >= yyyNodeSpace) /* node has a parent. */
{yyyiDum = yyyIIEL[yyyIIIEL[((yyyGNT *)yyyRSTopNp)->prodNum] +
yyyRSTopN->whichSym
] +
yyywa;
yyySignalEnts((yyyGNT *)yyyRSTopNp,
yyyEntL + yyyIEL[yyyiDum],
yyyEntL + yyyIEL[yyyiDum+1]
);
}
else /* node is still on the stack--it has no parent yet. */
{yyypL = &(((struct yyyStackItem *)yyyRSTopNp)->solvedSAlist);
if (yyySSALCfreeList == yyyLambdaSSAL)
{yyySSALspace[yyyNewSSALC].next = *yyypL;
if ((*yyypL = yyyNewSSALC++) == yyySSALspaceSize)
yyyHandleOverflow(yyySSALof);
}
else
{yyyiDum = yyySSALCfreeList;
yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next;
yyySSALspace[yyyiDum].next = *yyypL;
*yyypL = yyyiDum;
}
yyySSALspace[*yyypL].attrbNum = yyywa;
}
}
} /* yyySolveAndSignal */
#define condStg unsigned int conds;
#define yyyClearConds {yyyTST->conds = 0;}
#define yyySetCond(n) {yyyTST->conds += (1<<(n));}
#define yyyCond(n) ((yyyTST->conds & (1<<(n)))?1:0)
struct yyyTravStackItem {yyyGNT *node;
char isReady;
condStg
};
void yyyDoTraversals()
{struct yyyTravStackItem *yyyTravStack,*yyyTST,*yyyAfterTravStack;
register yyyGNT *yyyTSTn,**yyyCLptr1,**yyyCLptr2;
register int yyyi,yyyRL,yyyPass;
if (!yyyYok) return;
if ((yyyTravStack =
((struct yyyTravStackItem *)
malloc((yyyTravStackMaxSize *
sizeof(struct yyyTravStackItem)
)
)
)
)
==
(struct yyyTravStackItem *)NULL
)
{fprintf(stderr,"malloc error in traversal stack allocation\n");
exit(-1);
}
yyyAfterTravStack = yyyTravStack + yyyTravStackMaxSize;
yyyTravStack++;
for (yyyi=0; yyyi<2; yyyi++) {
yyyTST = yyyTravStack;
yyyTST->node = yyyStack->node;
yyyTST->isReady = 0;
yyyClearConds
while(yyyTST >= yyyTravStack)
{yyyTSTn = yyyTST->node;
if (yyyTST->isReady)
{yyyPass = 1;
goto yyyTravSwitch;
yyyTpop:
yyyTST--;
}
else
{yyyPass = 0;
goto yyyTravSwitch;
yyyTpush:
yyyTST->isReady = 1;
if (yyyTSTn->prodNum)
if (yyyRL)
{yyyCLptr2 = yyyTSTn->cL;
while
((yyyCLptr2 != yyyNextCLspace)
&&
((*yyyCLptr2)->parent == yyyTSTn)
)
{if (++yyyTST == yyyAfterTravStack)
yyyHandleOverflow(yyyTSof);
else
{yyyTST->node = *yyyCLptr2;
yyyTST->isReady = 0;
yyyClearConds
}
yyyCLptr2++;
}
} /* right to left */
else /* left to right */
{yyyCLptr1 = yyyCLptr2 = yyyTSTn->cL;
while
((yyyCLptr2 != yyyNextCLspace)
&&
((*yyyCLptr2)->parent == yyyTSTn)
)
yyyCLptr2++;
while (yyyCLptr2-- > yyyCLptr1)
if (++yyyTST == yyyAfterTravStack)
yyyHandleOverflow(yyyTSof);
else
{yyyTST->node = *yyyCLptr2;
yyyTST->isReady = 0;
yyyClearConds
}
} /* left to right */
} /* else */
continue;
yyyTravSwitch:
switch(yyyTSTn->prodNum) {
case 1:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 2:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 3:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 4:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 5:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 6:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 7:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 8:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 9:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 10:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 11:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
if (yyyCond(0) != yyyPass) { printChain((((yyyP9)(((char *)yyyTSTn)+yyyGNSz))->out_chain));
}
break;
}
break;
}
break;
case 12:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
if (yyyCond(0) != yyyPass) { printChain((((yyyP9)(((char *)yyyTSTn)+yyyGNSz))->out_chain));
}
break;
}
break;
}
break;
case 13:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 14:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 15:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 16:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 17:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 18:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 19:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 20:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 21:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 22:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 23:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 24:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 25:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 26:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 27:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 28:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 29:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 30:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 31:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 32:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 33:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 34:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 35:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 36:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 37:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 38:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 39:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 40:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 41:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 42:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 43:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 44:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 45:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 46:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 47:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
case 48:
switch(yyyi) {
case 0:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
case 1:
switch(yyyPass) {
case 0:
yyyRL = 0;
case 1:
break;
}
break;
}
break;
} /* switch */
if (yyyPass) goto yyyTpop; else goto yyyTpush;
} /* while */
} /* for */
} /* yyyDoTraversals */
void yyyExecuteRRsection() {
int yyyi;
long yyynRefCounts;
long cycleSum = 0;
long nNZrc = 0;
if (!yyyYok) return;
yyynRefCounts = yyyNextRCLspace - yyyRefCountListSpace;
for (yyyi=0;yyyi<yyynRefCounts;yyyi++)
if (yyyRefCountListSpace[yyyi])
{cycleSum += yyyRefCountListSpace[yyyi]; nNZrc++;}
if (nNZrc)
{
fprintf(stderr,"\n\n\n**********\n");
fprintf(stderr,
"cycle detected in completed parse tree");
fprintf(stderr,
" after decoration.\n");
fprintf(stderr,
"searching parse tree for %d unsolved instances:\n",
nNZrc
);
yyyUnsolvedInstSearchTravAux(yyyStackTop->node);
}
yyyDoTraversals();
} /* yyyExecuteRRsection */
yyyWAT yyyLRCIL[3] = {0,0,0,
};
void yyyYoxInit() /*stock*/
{
yyyNodeSizeCalc();
if ((yyyTermBuffer.snBufPtr =
(char *) malloc((yyyBiggestNodeSize + sizeof(yyyCopyType)))
)
==
((char *) NULL)
)
yyyfatal("malloc error in yyyTermBuffer allocation\n");
yyyNbytesStackStg = yyyMaxStackSize*sizeof(struct yyyStackItem);
yyyNbytesStackStg = ((yyyNbytesStackStg/yyyAlignSize)+1)*yyyAlignSize;
if ((yyyNodeAndStackSpace =
(char *) malloc((yyyNbytesStackStg +
yyyMaxNbytesNodeStg +
yyyGNSz +
yyyBiggestNodeSize +
sizeof(yyyCopyType)
)
)
)
==
((char *) NULL)
)
yyyfatal("malloc error in ox node and stack space allocation\n");
yyyStack = (struct yyyStackItem *) yyyNodeAndStackSpace;
yyyAfterStack = yyyStack + yyyMaxStackSize;
yyyNodeSpace = yyyNodeAndStackSpace + yyyNbytesStackStg;
yyyAfterNodeSpace = yyyNodeSpace + yyyMaxNbytesNodeStg;
if ((yyyRS = (struct yyyRSitem *)
malloc(((yyyRSmaxSize+1)*sizeof(struct yyyRSitem)))
)
==
((struct yyyRSitem *) NULL)
)
yyyfatal("malloc error in ox ready set space allocation\n");
yyyRS++;
yyyAfterRS = yyyRS + yyyRSmaxSize;
if ((yyyChildListSpace =
(yyyGNT **) malloc((yyyMaxNchildren*sizeof(yyyGNT *)))
)
==
((yyyGNT **) NULL)
)
yyyfatal("malloc error in ox child list space allocation\n");
yyyAfterChildListSpace = yyyChildListSpace + yyyMaxNchildren;
if ((yyyRefCountListSpace =
(yyyRCT *) malloc((yyyMaxNrefCounts * sizeof(yyyRCT)))
)
==
((yyyRCT *) NULL)
)
yyyfatal("malloc error in ox reference count list space allocation\n");
yyyAfterRefCountListSpace = yyyRefCountListSpace + yyyMaxNrefCounts;
if ((yyySSALspace = (struct yyySolvedSAlistCell *)
malloc(((yyySSALspaceSize+1) *
sizeof(struct yyySolvedSAlistCell))
)
)
==
((struct yyySolvedSAlistCell *) NULL)
)
yyyfatal("malloc error in stack solved list space allocation\n");
} /* yyyYoxInit */
void yyyYoxReset()
{
yyyTermBuffer.isEmpty = 1;
yyyStackTop = yyyStack;
while (yyyStackTop != yyyAfterStack)
(yyyStackTop++)->solvedSAlist = yyyLambdaSSAL;
yyyStackTop = yyyStack - 1;
yyyNextNodeSpace = yyyNodeSpace;
yyyRSTop = yyyRS - 1;
yyyNextCLspace = yyyChildListSpace;
yyyNextRCLspace = yyyRefCountListSpace;
}
void yyyDecorate()
{
while (yyyRSTop >= yyyRS)
yyySolveAndSignal();
}
void yyyShift()
{yyyRCT *rcPdum;
register yyyCopyType *CTp1,*CTp2,*CTp3;
register yyyWAT *startP,*stopP;
if ((++yyyStackTop) == yyyAfterStack)
yyyHandleOverflow(yyySof);
CTp2 = (yyyCopyType *)(yyyStackTop->oldestNode =
yyyStackTop->node =
(yyyGNT *)yyyNextNodeSpace
);
yyyTermBuffer.isEmpty = 1;
((yyyGNT *)CTp2)->parent = (void *)yyyStackTop;
((yyyGNT *)CTp2)->cL = yyyNextCLspace;
rcPdum = ((yyyGNT *)CTp2)->refCountList = yyyNextRCLspace;
((yyyGNT *)CTp2)->prodNum = 0;
if ((yyyNextRCLspace += yyyTermBuffer.nAttrbs)
>
yyyAfterRefCountListSpace
)
yyyHandleOverflow(yyyRCof);
startP = yyyTermBuffer.startP;
stopP = yyyTermBuffer.stopP;
while (startP < stopP) rcPdum[*(startP++)] = 0;
if ((yyyNextNodeSpace += yyyNdPrSz[yyyTermBuffer.typeNum])
>
yyyAfterNodeSpace
)
yyyHandleOverflow(yyyNSof);
CTp1 = (yyyCopyType *)(yyyTermBuffer.snBufPtr);
CTp2 = (yyyCopyType *)(((char *)CTp2) + yyyGNSz);
CTp3 = CTp2 + yyyNdCopySz[yyyTermBuffer.typeNum];
while (CTp2 < CTp3) *CTp2++ = *CTp1++;
}
void yyyGenIntNode()
{register yyyWST i;
register struct yyyStackItem *stDum;
register yyyGNT *gnpDum;
if ((stDum = (yyyStackTop -= (yyyRHSlength-1))) >= yyyAfterStack)
yyyHandleOverflow(yyySof);
yyySTsn = ((char *)(yyySTN = (yyyGNT *)yyyNextNodeSpace)) + yyyGNSz;
yyySTN->parent = (void *)yyyStackTop;
yyySTN->cL = yyyNextCLspace;
yyySTN->refCountList = yyyNextRCLspace;
yyySTN->prodNum = yyyProdNum;
if ((yyyNextCLspace+yyyRHSlength) > yyyAfterChildListSpace)
yyyHandleOverflow(yyyCLof);
for (i=1;i<=yyyRHSlength;i++)
{gnpDum = *(yyyNextCLspace++) = (stDum++)->node;
gnpDum->whichSym = i;
gnpDum->parent = (void *)yyyNextNodeSpace;
}
if ((yyyNextRCLspace += yyyNattrbs) > yyyAfterRefCountListSpace)
yyyHandleOverflow(yyyRCof);
if ((yyyNextNodeSpace += yyyNdPrSz[yyyTypeNum]) > yyyAfterNodeSpace)
yyyHandleOverflow(yyyNSof);
}
#define yyyDECORfREQ 50
void yyyAdjustINRC(startP,stopP)
register yyyFT *startP,*stopP;
{yyyWST i;
long SSALptr,SSALptrHead,*cPtrPtr;
long *pL;
struct yyyStackItem *stDum;
yyyGNT *gnpDum;
long iTemp;
register yyyFT *nextP;
static unsigned short intNodeCount = yyyDECORfREQ;
nextP = startP;
while (nextP < stopP)
{if ((*nextP) == yyyR)
{(yyySTN->refCountList)[*(nextP+1)] = *(nextP+2);
}
else
{(((yyySTN->cL)[*nextP])->refCountList)[*(nextP+1)] = *(nextP+2);
}
nextP += 3;
}
pL = yyyIIEL + yyyIIIEL[yyyProdNum];
stDum = yyyStackTop;
for (i=1;i<=yyyRHSlength;i++)
{pL++;
SSALptrHead = SSALptr = *(cPtrPtr = &((stDum++)->solvedSAlist));
if (SSALptr != yyyLambdaSSAL)
{*cPtrPtr = yyyLambdaSSAL;
do
{
iTemp = (*pL+yyySSALspace[SSALptr].attrbNum);
yyySignalEnts(yyySTN,
yyyEntL + yyyIEL[iTemp],
yyyEntL + yyyIEL[iTemp+1]
);
SSALptr = *(cPtrPtr = &(yyySSALspace[SSALptr].next));
}
while (SSALptr != yyyLambdaSSAL);
*cPtrPtr = yyySSALCfreeList;
yyySSALCfreeList = SSALptrHead;
}
}
nextP = startP + 2;
while (nextP < stopP)
{if (!(*nextP))
{if ((*(nextP-2)) == yyyR)
{pL = &(yyyStackTop->solvedSAlist);
if (yyySSALCfreeList == yyyLambdaSSAL)
{yyySSALspace[yyyNewSSALC].next = *pL;
if ((*pL = yyyNewSSALC++) == yyySSALspaceSize)
yyyHandleOverflow(yyySSALof);
}
else
{iTemp = yyySSALCfreeList;
yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next;
yyySSALspace[iTemp].next = *pL;
*pL = iTemp;
}
yyySSALspace[*pL].attrbNum = *(nextP-1);
}
else
{if ((gnpDum = (yyySTN->cL)[*(nextP-2)])->prodNum != 0)
{
iTemp = yyyIIEL[yyyIIIEL[gnpDum->prodNum]] + *(nextP-1);
yyySignalEnts(gnpDum,
yyyEntL + yyyIEL[iTemp],
yyyEntL + yyyIEL[iTemp+1]
);
}
}
}
nextP += 3;
}
yyyStackTop->node = yyySTN;
if (!yyyRHSlength) yyyStackTop->oldestNode = yyySTN;
if (!--intNodeCount)
{intNodeCount = yyyDECORfREQ;
yyyDecorate();
}
}
void yyyPrune(prodNum)
long prodNum;
{
int i,n;
register char *cp1,*cp2;
register yyyRCT *rcp1,*rcp2,*rcp3;
long cycleSum = 0;
long nNZrc = 0;
yyyRCT *tempNextRCLspace;
yyyDecorate();
tempNextRCLspace = yyyNextRCLspace;
yyyNextRCLspace =
(rcp1 = rcp2 = (yyyStackTop->oldestNode)->refCountList) + yyyNattrbs;
rcp3 = (yyyStackTop->node)->refCountList;
while (rcp2 < rcp3)
if (*rcp2++) {cycleSum += *(rcp2 - 1); nNZrc++;}
if (nNZrc)
{
fprintf(stderr,"\n\n\n----------\n");
fprintf(stderr,
"cycle detected during pruning of a subtree\n");
fprintf(stderr,
" at whose root production %d is applied.\n",prodNum);
yyyNextRCLspace = tempNextRCLspace;
fprintf(stderr,
"prune aborted: searching subtree for %d unsolved instances:\n",
nNZrc
);
yyyUnsolvedInstSearchTrav(yyyStackTop->node);
return;
}
for (i=0;i<yyyNattrbs;i++) rcp1[i] = rcp3[i];
yyyNextCLspace = (yyyStackTop->oldestNode)->cL;
yyyNextNodeSpace = (char *)(yyyStackTop->oldestNode) +
(n = yyyNdPrSz[yyyTypeNum]);
cp1 = (char *)yyyStackTop->oldestNode;
cp2 = (char *)yyyStackTop->node;
for (i=0;i<n;i++) *cp1++ = *cp2++;
yyyStackTop->node = yyyStackTop->oldestNode;
(yyyStackTop->node)->refCountList = rcp1;
(yyyStackTop->node)->cL = yyyNextCLspace;
}
void yyyGenLeaf(nAttrbs,typeNum,startP,stopP)
int nAttrbs,typeNum;
yyyWAT *startP,*stopP;
{
if (!(yyyTermBuffer.isEmpty)) yyyShift();
yyyTermBuffer.isEmpty = 0;
yyyTermBuffer.typeNum = typeNum;
yyyTermBuffer.nAttrbs = nAttrbs;
yyyTermBuffer.startP = startP;
yyyTermBuffer.stopP = stopP;
}
void yyyerror()
{yyyYok = 0;
}
/* read the command line for changes in sizes of
the evaluator's data structures */
void yyyCheckForResizes(argc,argv)
int argc;
char *argv[];
{int i;
long dum;
if (!yyyPermitUserAlloc) return;
for (i=1;i<argc;i++)
{
if ((argv[i][0] != '-') || (argv[i][1] != 'Y')) continue;
if (strlen(argv[i]) < 4) goto yyyErrO1;
if (sscanf(argv[i]+3,"%d",&dum) != 1) goto yyyErrO1;
if (dum < 2) dum = 2;
switch (argv[i][2])
{case yyyNSof: yyyMaxNbytesNodeStg = dum; break;
case yyyRCof: yyyMaxNrefCounts = dum; break;
case yyyCLof: yyyMaxNchildren = dum; break;
case yyySof: yyyMaxStackSize = dum; break;
case yyySSALof: yyySSALspaceSize = dum; break;
case yyyRSof: yyyRSmaxSize = dum; break;
case yyyTSof: yyyTravStackMaxSize = dum; break;
default : goto yyyErrO1;
}
continue;
yyyErrO1 : fprintf(stderr,"invalid command line option: %s\n",
argv[i]
);
}
}
#define yyyLastProdNum 48
#define yyyNsorts 10
int yyyProdsInd[] = {
0,
0, 4, 5, 12, 16, 18, 19, 23, 26, 30,
31, 35, 36, 39, 45, 53, 59, 64, 68, 70,
74, 76, 80, 83, 87, 91, 93, 98, 100, 102,
104, 106, 110, 114, 118, 122, 126, 130, 134, 139,
141, 143, 145, 147, 154, 156, 157, 161,
163,
};
int yyyProds[][2] = {
{1045, 0},{1045, 0},{ 197, 4},{ 548, 0},{1045, 0},
{ 197, 4},{ 599, 3},{ 396, 0},{ 146, 5},{ 405, 0},
{ 95, 9},{ 579, 0},{ 146, 5},{ 146, 5},{ 428, 0},
{ 52, 8},{ 146, 5},{ 52, 8},{ 146, 5},{ 52, 8},
{ 599, 3},{ 540, 0},{ 884, 7},{ 884, 7},{ 565, 6},
{ 404, 0},{ 565, 6},{ 565, 6},{ 161, 0},{1092, 0},
{ 565, 6},{ 95, 9},{ 95, 9},{ 278, 10},{ 548, 0},
{ 95, 9},{ 278, 10},{ 912, 0},{ 462, 0},{ 278, 10},
{1044, 0},{ 723, 0},{ 425, 0},{ 95, 9},{ 579, 0},
{ 278, 10},{1044, 0},{ 723, 0},{ 425, 0},{ 95, 9},
{ 742, 0},{ 95, 9},{ 579, 0},{ 278, 10},{ 996, 0},
{ 723, 0},{ 349, 0},{ 95, 9},{ 579, 0},{ 278, 10},
{1110, 0},{ 52, 8},{ 68, 0},{ 462, 0},{ 278, 10},
{ 318, 0},{ 68, 0},{ 462, 0},{ 278, 10},{1029, 0},
{ 723, 0},{ 723, 0},{ 629, 0},{1132, 0},{ 723, 0},
{1132, 0},{1132, 0},{ 396, 0},{ 723, 0},{ 405, 0},
{1132, 0},{ 956, 0},{1132, 0},{1132, 0},{ 462, 0},
{ 556, 0},{ 462, 0},{1132, 0},{ 462, 0},{ 356, 0},
{ 462, 0},{ 318, 0},{ 599, 3},{ 318, 0},{1029, 0},
{ 804, 0},{ 462, 0},{ 820, 0},{ 462, 0},{ 301, 0},
{ 462, 0},{ 455, 0},{ 462, 0},{ 449, 0},{ 462, 0},
{1029, 0},{ 301, 0},{ 301, 0},{ 420, 0},{1029, 0},
{ 301, 0},{1029, 0},{ 420, 0},{1029, 0},{ 455, 0},
{ 455, 0},{ 436, 0},{1029, 0},{ 455, 0},{1029, 0},
{ 436, 0},{1029, 0},{ 449, 0},{ 449, 0},{ 412, 0},
{1029, 0},{ 449, 0},{1029, 0},{ 412, 0},{1029, 0},
{1029, 0},{ 396, 0},{ 462, 0},{ 405, 0},{1029, 0},
{1029, 0},{ 804, 0},{ 462, 0},{ 820, 0},{1029, 0},
{ 599, 3},{1029, 0},{ 593, 1},{1029, 0},{ 621, 2},
{1029, 0},{ 473, 0},{ 473, 0},{ 599, 3},{ 396, 0},
{ 154, 0},{ 405, 0},{ 540, 0},{ 884, 7},{ 154, 0},
{ 2, 0},{ 154, 0},{ 2, 0},{ 2, 0},{ 428, 0},
{ 462, 0},{ 2, 0},{ 462, 0},
};
int yyySortsInd[] = {
0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 10,
12,
};
int yyySorts[] = {
793, 793, 381, 887, 887, 50, 884, 779, 243, 306,
243, 306,
};
char *yyyStringTab[] = {
0,0,"fcpar",0,0,
0,"data",0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
"rank",0,"vardef",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,"TAssign",0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
"stats",0,0,0,0,
0,0,0,0,"g",
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,"y",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,"pars",0,0,0,
0,0,0,0,"fcpars",
0,0,0,0,0,
0,"TArray",0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,"newChain",0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,"funcdef",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,"NULL",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,"in_chain",0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,"stat",0,
0,0,0,0,"printChain",
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,"addexpr",0,0,0,
0,"out_chain",0,0,0,
0,0,0,0,0,
0,0,0,"lexpr",0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,"TDo",
0,0,0,0,0,
0,"'#'",0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,"name",0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,"'('",0,0,0,
0,0,0,0,"TInt",
"')'",0,0,0,0,
0,0,"'*'",0,0,
0,"strdup",0,0,0,
"'+'",0,0,0,0,
"TThen",0,0,"','",0,
0,0,0,0,0,
0,"'-'",0,0,0,
0,0,0,0,0,
0,0,0,0,"mulexpr",
0,0,0,0,0,
"subexpr",0,0,0,0,
0,0,"expr",0,0,
0,0,0,0,0,
0,0,0,"funccall",0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
"':'",0,0,0,0,
0,0,0,"';'",0,
0,0,0,0,0,
0,"'<'",0,0,0,
0,0,0,0,0,
"array",0,0,0,0,
0,"GSList",0,0,0,
0,0,0,0,"TEnd",
0,0,0,0,0,
0,0,0,0,0,
0,0,"_VariableType","TDecimalLiteral",0,
0,0,0,0,"TIdentifier",
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,"THexLiteral",0,0,0,
0,0,0,0,"TOr",
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,"_VariableDeclaration",0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,"newScope","bool",0,
0,0,0,0,"newVariableType",
0,0,0,0,0,
0,0,0,0,0,
0,"chainPushScope","TElse",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,"declaration",
0,"strtol",0,0,0,
0,0,"scopePushDeclaration",0,0,
0,0,0,"value",0,
0,0,0,0,0,
"newVariableDeclaration",0,0,0,"'['",
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
"']'",0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
"next",0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,"type",
0,0,"variables",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,"TReturn",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,"preorder",0,0,
0,"TNot",0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,"TWhile",0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,"yytext",0,
0,0,0,0,"term",
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,"TIf",
"program",0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,"TOf",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
"TVar",0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,"bterm",0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,
};
#define yyySizeofProd(num) (yyyProdsInd[(num)+1] - yyyProdsInd[(num)])
#define yyyGSoccurStr(prodNum,symPos) \
(yyyStringTab[yyyProds[yyyProdsInd[(prodNum)] + (symPos)][0]])
#define yyySizeofSort(num) (yyySortsInd[(num)+1] - yyySortsInd[(num)])
#define yyySortOf(prodNum,symPos) \
(yyyProds[yyyProdsInd[(prodNum)] + (symPos)][1])
#define yyyAttrbStr(prodNum,symPos,attrbNum) \
(yyyStringTab[yyySorts[yyySortsInd[yyySortOf(prodNum,symPos)] + \
(attrbNum) \
] \
] \
)
void yyyShowProd(i)
int i;
{int j,nSyms;
nSyms = yyySizeofProd(i);
for (j=0; j<nSyms; j++)
{
fprintf(stderr,"%s",yyyGSoccurStr(i,j));
if (j == 0) fprintf(stderr," : "); else fprintf(stderr," ");
}
fprintf(stderr,";\n");
}
void yyyShowProds()
{int i; for (i=1; i<=yyyLastProdNum; i++) yyyShowProd(i);}
void yyyShowSymsAndSorts()
{int i;
for (i=1; i<=yyyLastProdNum; i++)
{int j, nSyms;
fprintf(stderr,
"\n\n\n---------------------------------- %3.1d\n",i);
/* yyyShowProd(i); */
nSyms = yyySizeofProd(i);
for (j=0; j<nSyms; j++)
{int k, sortSize;
fprintf(stderr,"%s\n",yyyGSoccurStr(i,j));
sortSize = yyySizeofSort(yyySortOf(i,j));
for (k=0; k<sortSize; k++)
fprintf(stderr," %s\n",yyyAttrbStr(i,j,k));
if (j == 0) fprintf(stderr,"->\n");
else
fprintf(stderr,"\n");
}
}
}
void yyyCheckNodeInstancesSolved(np)
yyyGNT *np;
{int mysort,sortSize,i,prodNum,symPos,inTerminalNode;
int nUnsolvedInsts = 0;
if (np->prodNum != 0)
{inTerminalNode = 0;
prodNum = np->prodNum;
symPos = 0;
}
else
{inTerminalNode = 1;
prodNum = ((yyyGNT *)(np->parent))->prodNum;
symPos = np->whichSym;
}
mysort = yyySortOf(prodNum,symPos);
sortSize = yyySizeofSort(mysort);
for (i=0; i<sortSize; i++)
if ((np->refCountList)[i] != 0) nUnsolvedInsts += 1;
if (nUnsolvedInsts)
{fprintf(stderr,
"\nFound node that has %d unsolved attribute instance(s).\n",
nUnsolvedInsts
);
fprintf(stderr,"Node is labeled \"%s\".\n",
yyyGSoccurStr(prodNum,symPos));
if (inTerminalNode)
{fprintf(stderr,
"Node is terminal. Its parent production is:\n ");
yyyShowProd(prodNum);
}
else
{fprintf(stderr,"Node is nonterminal. ");
if (((char *)(np->parent)) >= yyyNodeSpace)
{fprintf(stderr,
"Node is %dth child in its parent production:\n ",
np->whichSym
);
yyyShowProd(((yyyGNT *)(np->parent))->prodNum);
}
fprintf(stderr,
"Node is on left hand side of this production:\n ");
yyyShowProd(np->prodNum);
}
fprintf(stderr,"The following instances are unsolved:\n");
for (i=0; i<sortSize; i++)
if ((np->refCountList)[i] != 0)
fprintf(stderr," %-16s still has %1d dependencies.\n",
yyyAttrbStr(prodNum,symPos,i),(np->refCountList)[i]);
}
}
void yyyUnsolvedInstSearchTravAux(pNode)
yyyGNT *pNode;
{yyyGNT **yyyCLpdum;
int i;
yyyCheckNodeInstancesSolved(pNode);
yyyCLpdum = pNode->cL;
while
((yyyCLpdum != yyyNextCLspace) && ((*yyyCLpdum)->parent == pNode))
{
yyyUnsolvedInstSearchTravAux(*yyyCLpdum);
yyyCLpdum++;
}
}
void yyyUnsolvedInstSearchTrav(pNode)
yyyGNT *pNode;
{yyyGNT **yyyCLpdum;
int i;
yyyCLpdum = pNode->cL;
while
((yyyCLpdum != yyyNextCLspace) && ((*yyyCLpdum)->parent == pNode))
{
yyyUnsolvedInstSearchTravAux(*yyyCLpdum);
yyyCLpdum++;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment