AUSAM/source/make/gram.c
#
#include "defs"
# define NAME 257
# define SHELLINE 258
# define START 259
# define MACRODEF 260
# define COLON 261
# define DOUBLECOLON 262
# define ARCHIVE 263
# define ARCTERM 264
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar, yyerrflag;
int yyval 0;
int *yypv;
int yylval 0;
yyactr(__np__){
struct depblock *pp;
FSTATIC struct shblock *prevshp;
FSTATIC struct nameblock *lefts[NLEFTS];
struct nameblock *leftp;
FSTATIC int nlefts;
struct lineblock *lp, *lpp;
FSTATIC struct depblock *prevdep;
FSTATIC int sepc;
struct nameblock *curarcnam;
extern int yylineno;
switch(__np__){
case 5: {
while( --nlefts >= 0)
{
leftp = lefts[nlefts];
if(leftp->septype == 0)
leftp->septype = sepc;
else if(leftp->septype != sepc)
fprintf(stderr, "Inconsistent rules lines for `%s'\n",
leftp->namep);
else if(sepc==ALLDEPS && *(leftp->namep)!='.' && yypv[4]!=0)
{
for(lp=leftp->linep; lp->nextp!=0; lp=lp->nextp)
if(lp->shp)
fprintf(stderr, "Multiple rules lines for `%s'\n",
leftp->namep);
}
lp = intalloc(sizeof(*lp));
lp->nextp = 0;
lp->depp = yypv[3];
lp->shp = yypv[4];
if(equals(leftp->namep, ".SUFFIXES") && yypv[3]==0)
leftp->linep = 0;
else if(leftp->linep == 0)
leftp->linep = lp;
else {
for(lpp = leftp->linep; lpp->nextp!=0;
lpp = lpp->nextp) ;
if(sepc == ALLDEPS)
lpp->shp = 0;
lpp->nextp = lp;
}
}
} break;
case 7: { lefts[0] = yypv[1]; nlefts = 1; } break;
case 8: { lefts[nlefts++] = yypv[2];
if(nlefts>NLEFTS) yyerror("Too many lefts"); } break;
case 9: { yyerror("Must be a separator on rules line"); } break;
case 11: { prevdep = 0; yyval = 0; } break;
case 12: {
if( yypv[1] )
yyval = yypv[1];
else
yyval = yypv[2];
} break;
case 13: {
pp = intalloc(sizeof(*pp));
pp->nextp = 0;
pp->depname = yypv[2];
if(prevdep == 0) yyval = pp;
else prevdep->nextp = pp;
prevdep = pp;
} break;
case 14: {
yyval = yypv[2]; /* note archive not a dependancy */
} break;
case 15: {
yyerror("No modules for archive");
} break;
case 16: {
pp = intalloc(sizeof(*pp));
pp->nextp = 0;
pp->depname = yypv[1];
if(prevdep == 0) yyval = pp;
else prevdep->nextp = pp;
prevdep = pp;
} break;
case 17: {
pp = intalloc(sizeof(*pp));
pp->nextp = 0;
pp->depname = yypv[2];
if(prevdep == 0) yyval = pp;
else prevdep->nextp = pp;
prevdep = pp;
} break;
case 18: { sepc = ALLDEPS; } break;
case 19: { sepc = SOMEDEPS; } break;
case 20: {yyval = 0; } break;
case 21: { yyval = yypv[1]; } break;
case 22: { yyval = yypv[1]; prevshp = yypv[1]; } break;
case 23: { yyval = yypv[1];
prevshp->nextp = yypv[2];
prevshp = yypv[2];
} break;
}
}
int yyerrval 256;
# include "lex.c"
int yyact[] {0,12289,4096,16384,4352,8197,4355,8195,4356,8196
,0,12290,4353,8199,12291,12292,12294,4353,8201,4357
,8204,4358,8205,12297,12295,4354,8208,12308,12296,4353
,8210,4359,8211,12298,12299,12306,12307,12293,4354,8212
,12309,12310,12300,12301,4353,8215,4360,8214,0,12311
,4353,8217,4360,8216,0,12303,12304,12302,12305,-1};
int yypact[] {0,1,2,11,12,15,16,17,24,25
,28,29,34,35,36,37,38,41,42,43
,44,49,50,55,56,57,58,-1};
int yyr1[] {0,1,1,2,2,2,2,3,3,4
,4,6,6,6,8,8,9,9,7,7
,5,5,10,10,-1};
int yyr2[] {0,0,2,1,1,4,1,1,2,0
,1,1,2,2,3,2,1,2,1,1
,0,1,1,2,-1};
int yygo[] {0,-1,1,-1,2,-1,6,-1,8,-1
,14,-1,10,-1,11,-1,17,-1,21,-1
,15,-1};
int yypgo[] {0,1,3,5,7,9,11,13,15,17
,19,-1};
int nterms 10;
int nnonter 10;
int nstate 26;
char *yysterm[] {
"error",
"NAME",
"SHELLINE",
"START",
"MACRODEF",
"COLON",
"DOUBLECOLON",
"ARCHIVE",
"ARCTERM",
0 };
char *yysnter[] {
"$accept",
"file",
"comline",
"namelist",
"deplist",
"shellist",
"dlist",
"sepchar",
"arname",
"modulist",
"shlist" };