Created
May 7, 2013 13:24
-
-
Save millimoose/5532525 to your computer and use it in GitHub Desktop.
Ox is a goddamn nightmare
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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