2.9BSD/usr/contrib/apl/src/y.tab.c

Compare this file to the similar file:
Show the results in this format:


# line 2 "apl.y"
static char apl_y_Sccsid[] = "apl.y @(#)apl.y	1.3	10/5/82 Berkeley ";

# line 4 "apl.y"
typedef union  {
	char	*charptr;
	char	charval;
} YYSTYPE;
# define lex0 257
# define lex1 258
# define lex2 259
# define lex3 260
# define lex4 261
# define lex5 262
# define lex6 263
# define lpar 264
# define rpar 265
# define lbkt 266
# define rbkt 267
# define eol 268
# define unk 269
# define com 270
# define com0 271
# define Quad 272
# define asg 273
# define null 274
# define dot 275
# define cln 276
# define semi 277
# define comnt 278
# define tran 279
# define strng 280
# define nam 281
# define numb 282
# define nfun 283
# define mfun 284
# define dfun 285
# define comexpr 286
# define comnam 287
# define comnull 288
# define comlist 289
# define dscal 290
# define mdscal 291
# define m 292
# define d 293
# define md 294
# define msub 295
# define mdsub 296

# line 26 "apl.y"
#include "apl.h"
	int	vcount;
	int	scount;
	int	litflag;
	int	nlexsym;
	int	context;
	char	*iline;
	char	*ccharp, *ccharp2;
	data	lnumb;		/* current label number */
	char	*labcpp;	/* label prologue */
	char	*labcpe;	/* label epilogue */
	int	immedcmd;	/* immediate command number */
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
extern short yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
YYSTYPE yylval, yyval;
# define YYERRCODE 256

# line 515 "apl.y"

#include "tab.c"
#include "lex.c"
short yyexca[] ={
-1, 1,
	0, -1,
	-2, 0,
-1, 31,
	266, 69,
	-2, 67,
-1, 33,
	266, 70,
	-2, 90,
-1, 34,
	270, 91,
	271, 91,
	275, 91,
	-2, 88,
-1, 57,
	276, 93,
	-2, 48,
-1, 58,
	276, 94,
	-2, 47,
-1, 59,
	276, 95,
	-2, 63,
-1, 77,
	275, 92,
	-2, 81,
-1, 81,
	266, 87,
	-2, 85,
-1, 83,
	266, 86,
	-2, 90,
	};
# define YYNPROD 97
# define YYLAST 278
short yyact[]={

  28,  35, 130,  43,  11,  44,  45,  46,  29,  61,
  62,  64,  63,  38,  14,  55,  26,  57,  38,  58,
  59,  46, 126,  69, 103, 132,  35,  34,  30,  98,
  37,  31,  33,  28,  13, 133, 127,  11,  97, 116,
 115,  29,  90,  91, 109, 104,  67,  14,  10,  26,
  25,  38,  24,  22,  28, 134,  42,  88,  11,  35,
  34,  30,  29,  37,  31,  33,  86, 122,  14, 118,
  26,  25,  38,  24,  22,  28,  68,  16,  96, 101,
  35,  34,  30,  29,  37,  31,  33, 107,  50,   9,
   1,  26,  25,  38,  24,  22,  28,  82,  71,  89,
  65,  35,  34,  30,  29,  37,  31,  33,  87,  72,
  21,  23,  26,  25,  38,  24,  22,  28,  20,  27,
  85,  15,  35,  34,  30,  29,  37,  31,  33,  75,
  52,  60,  66,  26,  25,  38,  24,  22,  81,  79,
  84,  80,  74,  35,  34,  30, 112,  37,  31,  33,
  92, 123,  41,  73,  53,  94,  93,  32,  77,  34,
  56,  78,  37,  43,  83,  44,  45,  46,   2,   3,
   4,   5,   6,   7,  70,  76,  54, 102,  40,   8,
  39, 114,  99, 105,  48,  49,  18, 117,  36,  19,
 111,  17, 113, 110,  95,  12,  51,  47,   0, 121,
   0,   0,   0, 136,  56, 135, 100, 119,   0,   0,
 120,   0,   0,   0,   0, 106, 108,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0, 129, 131,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0, 124, 125,   0,
   0,   0,   0,   0,   0, 119,   0,   0,   0,   0,
 128,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,  95 };
short yypact[]={

 -89,-1000,-231,-210,-278,-278,-278,-264,-1000,-277,
-168,-1000,-222,-1000,-1000,-254,-1000,-132,-147,-200,
-1000,-209,-1000,-228,-1000,-1000,-1000,-1000,-147,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-269,-1000,-1000,-1000,
-1000,-118,-1000,-1000,-1000,-1000,-1000,-239,-1000,-1000,
-1000,-264,-1000,-1000,-1000,-189,-252,-1000,-1000,-1000,
-223,-147,-278,-278,-1000,-1000,-224,-1000,-147,-1000,
-147,-1000,-209,-1000,-235,-236,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-147,-1000,-1000,-147,-1000,
-209,-1000,-198,-1000,-278,-278,-1000,-259,-1000,-1000,
-1000,-1000,-232,-1000,-1000,-1000,-1000,-278,-1000,-1000,
-1000,-254,-1000,-1000,-1000,-289,-289,-242,-1000,-1000,
-212,-1000,-1000,-1000,-278,-1000,-239,-1000,-1000,-1000,
-1000,-1000,-1000,-147,-1000,-1000,-1000 };
short yypgo[]={

   0, 178,  56, 197,  78, 196, 154, 130, 176, 195,
 193, 121, 191, 189, 188, 187,  69, 186, 174, 108,
 152,  77, 131, 120, 118, 110, 109,  99,  98,  97,
 157, 111,  90,  89,  88,  87,  76, 119 };
short yyr1[]={

   0,  32,  32,  32,  32,  32,  32,  32,  32,  32,
   1,   1,   2,   3,   3,   3,   4,   4,  33,  22,
  22,  22,  22,  35,  35,  34,  34,   5,   5,   6,
   7,   7,   7,   8,   8,   9,   9,   9,  21,  10,
  10,  36,  11,  11,  11,  12,  12,  13,  13,  13,
  13,  13,  13,  37,  37,  14,  23,  15,  15,  16,
  16,  17,  17,  17,  17,  17,  24,  24,  24,  25,
  25,  18,  18,  18,  18,  18,  26,  19,  27,  27,
  28,  28,  28,  28,  28,  28,  29,  29,  30,  30,
  30,  31,  31,  20,  20,  20,  20 };
short yyr2[]={

   0,   2,   4,   3,   4,   2,   2,   2,   2,   2,
   3,   1,   2,   3,   2,   1,   3,   1,   1,   2,
   2,   2,   1,   2,   1,   2,   1,   1,   2,   2,
   1,   2,   3,   1,   2,   1,   1,   1,   3,   1,
   1,   1,   1,   2,   3,   1,   4,   1,   1,   1,
   1,   3,   1,   2,   1,   1,   1,   1,   3,   1,
   0,   1,   2,   1,   2,   3,   1,   1,   1,   1,
   1,   1,   2,   1,   3,   3,   1,   3,   1,   1,
   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
   1,   1,   1,   1,   1,   1,   1 };
short yychk[]={

-1000, -32, 257, 258, 259, 260, 261, 262,  -8, -33,
 279, 268,  -9, 265, 278, -11, -21, -12, -17, -13,
 -24, -25, 284, -31, 283, 281, 280, -37, 264, 272,
 292, 295, -30, 296, 291, 290, -14, 294, 282,  -8,
  -1, -20,  -2, 281, 283, 284, 285,  -3,  -1,  -1,
 -34,  -5,  -7,  -6,  -8, 279, -20, 281, 283, 284,
 -22, 286, 287, 289, 288, 268, -11, 268, -36, 277,
 -18, -28, -26, 285, 274, -31, -30, 290, 293, 271,
 273, 270, -29, 296, -11, -23, 266, -19, 266, -27,
 270, 271, -11, -37, 273, -20,  -4, 277, 268,  -7,
  -6, 268, -11, 276, 268, -11, -20, -35, -20, 268,
 -10, -11, -21, -11, -19, 275, 275, -15, -16, -11,
 -11, -19, 265,  -2, -20, -20, 281, 268, -20, -31,
 291, -31, 267, 277, 267,  -4, -16 };
short yydef[]={

   0,  -2,   0,   0,   0,   0,   0,   0,   1,   0,
   0,  33,   0,  18,  35,  36,  37,  42,   0,  45,
  61,   0,  63,   0,  47,  48,  49,  50,   0,  52,
  66,  -2,  68,  -2,  -2,  92,  54,  89,  55,   5,
   6,  15,  11,  93,  94,  95,  96,   0,   7,   8,
   9,   0,  26,  27,  30,   0,   0,  -2,  -2,  -2,
   0,   0,   0,   0,  22,   3,   0,  34,   0,  41,
   0,  71,   0,  73,   0,   0,  80,  -2,  82,  83,
  84,  -2,  76,  -2,  43,  60,  56,  62,   0,  64,
  78,  79,   0,  53,   0,  14,  12,   0,  17,  25,
  28,  31,   0,  29,   2,  19,  20,  21,  24,   4,
  38,  39,  40,  44,  72,   0,   0,   0,  57,  59,
   0,  65,  51,  10,  15,  13,   0,  32,  23,  74,
  91,  75,  46,  60,  77,  16,  58 };
#ifndef lint
static char yaccpar_sccsid[] = "@(#)yaccpar	4.1	(Berkeley)	2/11/83";
#endif not lint

#
# define YYFLAG -1000
# define YYERROR goto yyerrlab
# define YYACCEPT return(0)
# define YYABORT return(1)

/*	parser for yacc output	*/

#ifdef YYDEBUG
int yydebug = 0; /* 1 for debugging */
#endif
YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
int yychar = -1; /* current input token number */
int yynerrs = 0;  /* number of errors */
short yyerrflag = 0;  /* error recovery flag */

yyparse() {

	short yys[YYMAXDEPTH];
	short yyj, yym;
	register YYSTYPE *yypvt;
	register short yystate, *yyps, yyn;
	register YYSTYPE *yypv;
	register short *yyxi;

	yystate = 0;
	yychar = -1;
	yynerrs = 0;
	yyerrflag = 0;
	yyps= &yys[-1];
	yypv= &yyv[-1];

 yystack:    /* put a state and value onto the stack */

#ifdef YYDEBUG
	if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
#endif
		if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
		*yyps = yystate;
		++yypv;
		*yypv = yyval;

 yynewstate:

	yyn = yypact[yystate];

	if( yyn<= YYFLAG ) goto yydefault; /* simple state */

	if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
	if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;

	if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
		yychar = -1;
		yyval = yylval;
		yystate = yyn;
		if( yyerrflag > 0 ) --yyerrflag;
		goto yystack;
		}

 yydefault:
	/* default state action */

	if( (yyn=yydef[yystate]) == -2 ) {
		if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
		/* look through exception table */

		for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */

		while( *(yyxi+=2) >= 0 ){
			if( *yyxi == yychar ) break;
			}
		if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
		}

	if( yyn == 0 ){ /* error */
		/* error ... attempt to resume parsing */

		switch( yyerrflag ){

		case 0:   /* brand new error */

			yyerror( "syntax error" );
		yyerrlab:
			++yynerrs;

		case 1:
		case 2: /* incompletely recovered error ... try again */

			yyerrflag = 3;

			/* find a state where "error" is a legal shift action */

			while ( yyps >= yys ) {
			   yyn = yypact[*yyps] + YYERRCODE;
			   if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
			      yystate = yyact[yyn];  /* simulate a shift of "error" */
			      goto yystack;
			      }
			   yyn = yypact[*yyps];

			   /* the current yyps has no shift onn "error", pop stack */

#ifdef YYDEBUG
			   if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
#endif
			   --yyps;
			   --yypv;
			   }

			/* there is no state on the stack with an error shift ... abort */

	yyabort:
			return(1);


		case 3:  /* no shift yet; clobber input char */

#ifdef YYDEBUG
			if( yydebug ) printf( "error recovery discards char %d\n", yychar );
#endif

			if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
			yychar = -1;
			goto yynewstate;   /* try again in the same state */

			}

		}

	/* reduction by production yyn */

#ifdef YYDEBUG
		if( yydebug ) printf("reduce %d\n",yyn);
#endif
		yyps -= yyr2[yyn];
		yypvt = yypv;
		yypv -= yyr2[yyn];
		yyval = yypv[1];
		yym=yyn;
			/* consult goto table to find next state */
		yyn = yyr1[yyn];
		yyj = yypgo[yyn] + *yyps + 1;
		if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
		switch(yym){
			
case 1:
# line 51 "apl.y"

	{
		integ = ccharp[-1];
		if(integ != ASGN && integ != PRINT && integ != COMNT)
			*ccharp++ = PRINT;
		*ccharp++ = EOL;
	} break;
case 2:
# line 58 "apl.y"

	{
		*ccharp++ = IMMED;
		*ccharp++ = yypvt[-1].charval;
	} break;
case 3:
# line 66 "apl.y"

	{
		*ccharp++ = SICLR0;
	} break;
case 4:
# line 70 "apl.y"

	{
		*ccharp++ = SICLR;
	} break;
case 10:
# line 107 "apl.y"

	{
		switch(context) {

		case lex3:
			name(yyval.charptr, AUTO);
			/*
			 * see comments in ai.c/funcomp() concerning
			 * label processing.
			 */
			*ccharp++ = ELID;
			break;

		case lex4:
			ccharp2 = ccharp;
			*ccharp++ = EOL;
			name(yyval.charptr, RVAL);
			name(yyval.charptr, REST);
			invert(yypvt[-0].charptr, ccharp2);
		}
	} break;
case 11:
# line 128 "apl.y"

	{
		if(context == lex3)
			*ccharp++ = ELID;
		if(context == lex4){
			*ccharp++ = EOL;	/* pop previous result */
			*ccharp++ = NILRET;	/* return empty result */
		}
	} break;
case 12:
# line 138 "apl.y"

	{
		if(context == lex4)
			invert(yyval.charptr, yypvt[-0].charptr);
	} break;
case 13:
# line 145 "apl.y"

	{
		yyval.charptr = ccharp;
		switch(context) {

		case lex2:
			name(yypvt[-1].charptr, DF);
			break;

		case lex3:
			name(yypvt[-0].charptr, ARG2);
			name(yypvt[-2].charptr, ARG1);
			break;

		case lex4:
			name(yypvt[-2].charptr, REST);
			name(yypvt[-0].charptr, REST);
		}
	} break;
case 14:
# line 164 "apl.y"

	{
		yyval.charptr = ccharp;
		switch(context) {

		case lex2:
			name(yypvt[-1].charptr, MF);
			break;

		case lex3:
			name(yypvt[-0].charptr, ARG1);
			break;

		case lex4:
			name(yypvt[-0].charptr, REST);
		}
	} break;
case 15:
# line 181 "apl.y"

	{
		if(context == lex2)
			name(yyval.charptr, NF);
		yyval.charptr = ccharp;
	} break;
case 16:
# line 188 "apl.y"

	{
		yyval.charptr = yypvt[-0].charptr;
		switch(context) {

		case lex3:
			name(yypvt[-1].charptr, AUTO);
			break;

		case lex4:
			ccharp2 = name(yypvt[-1].charptr, REST);
			invert(yyval.charptr, ccharp2);
		}
	} break;
case 17:
# line 202 "apl.y"

	{
		yyval.charptr = ccharp;
	} break;
case 18:
# line 211 "apl.y"

	{
		litflag = -1;
	} break;
case 20:
# line 217 "apl.y"

	{
		name(yypvt[-0].charptr, NAME);
	} break;
case 23:
# line 225 "apl.y"

	{
	    *ccharp++ = IMMED;
	    *ccharp++ = immedcmd;
	    name(yypvt[-0].charptr, NAME);
	} break;
case 24:
# line 231 "apl.y"

	{
	    name(yypvt[-0].charptr, NAME);
	} break;
case 29:
# line 251 "apl.y"
 {
		if(labgen)
			genlab(yypvt[-1].charptr);
	} break;
case 30:
# line 257 "apl.y"

	{
		integ = ccharp[-1];
		if(integ != ASGN && integ != PRINT && integ != COMNT)
			*ccharp++ = PRINT;
	} break;
case 31:
# line 263 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = BRAN0;
	} break;
case 32:
# line 268 "apl.y"

	{
		yyval.charptr = yypvt[-1].charptr;
		*ccharp++ = BRAN;
	} break;
case 33:
# line 274 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = COMNT;
	} break;
case 35:
# line 281 "apl.y"

	{
		litflag = 1;
		yyval.charptr = ccharp;
		*ccharp++ = COMNT;
	} break;
case 39:
# line 292 "apl.y"

	{
		*ccharp++ = PRINT;
	} break;
case 41:
# line 298 "apl.y"

	{
		*ccharp++ = HPRINT;
	} break;
case 43:
# line 304 "apl.y"

	{
		invert(yyval.charptr, yypvt[-0].charptr);
	} break;
case 44:
# line 308 "apl.y"

	{
		invert(yyval.charptr, yypvt[-0].charptr);
	} break;
case 46:
# line 314 "apl.y"

	{
		invert(yyval.charptr, yypvt[-1].charptr);
		*ccharp++ = INDEX;
		*ccharp++ = scount;
		scount = yypvt[-2].charval;
	} break;
case 47:
# line 322 "apl.y"

	{
		yyval.charptr = name(yyval.charptr, FUN);
	} break;
case 48:
# line 326 "apl.y"

	{
		yyval.charptr = name(yyval.charptr, NAME);
	} break;
case 49:
# line 330 "apl.y"

	{
		yyval.charptr = ccharp;
		ccharp += 2;
		integ = iline[-1];
		vcount = 0;
		for(;;) {
			if(*iline == '\n') {
				nlexsym = unk;
				break;
			}
			if(*iline == integ) {
				iline++;
				if(*iline != integ)
					break;
			}
			*ccharp++ = *iline++;
			vcount++;
		}
		((struct chrstrct *)yyval.charptr)->c[0] = QUOT;
		((struct chrstrct *)yyval.charptr)->c[1] = vcount;
	} break;
case 50:
# line 352 "apl.y"

	{
		*ccharp++ = CONST;
		*ccharp++ = vcount;
		invert(yyval.charptr, ccharp-2);
	} break;
case 51:
# line 358 "apl.y"

	{
		yyval.charptr = yypvt[-1].charptr;
	} break;
case 52:
# line 362 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = yypvt[-0].charval;
	} break;
case 53:
# line 368 "apl.y"

	{
		vcount++;
	} break;
case 54:
# line 372 "apl.y"

	{
		vcount = 1;
	} break;
case 55:
# line 377 "apl.y"

	{
		yyval.charptr = ccharp;
		ccharp += copy(DA,&datum,ccharp,1);
	} break;
case 56:
# line 388 "apl.y"

	{
		yyval.charval = scount;
		scount = 1;
	} break;
case 58:
# line 395 "apl.y"

	{
		invert(yyval.charptr, yypvt[-0].charptr);
		scount++;
	} break;
case 60:
# line 402 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = ELID;
	} break;
case 61:
# line 412 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = yypvt[-0].charval;
	} break;
case 62:
# line 417 "apl.y"

	{
		yyval.charptr = yypvt[-0].charptr;
		*ccharp++ = yypvt[-1].charval+1;
	} break;
case 63:
# line 422 "apl.y"

	{
		yyval.charptr = name(yyval.charptr, FUN);
	} break;
case 64:
# line 426 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = yypvt[-0].charval+1;
		*ccharp++ = yypvt[-1].charval;
	} break;
case 65:
# line 432 "apl.y"

	{
		yyval.charptr = yypvt[-0].charptr;
		*ccharp++ = yypvt[-1].charval+3;
		*ccharp++ = yypvt[-2].charval;
	} break;
case 68:
# line 441 "apl.y"

	{
		yyval.charval++;
	} break;
case 70:
# line 447 "apl.y"

	{
		yyval.charval += 2;
	} break;
case 71:
# line 456 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = yypvt[-0].charval;
	} break;
case 72:
# line 461 "apl.y"

	{
		yyval.charptr = yypvt[-0].charptr;
		*ccharp++ = yypvt[-1].charval;
	} break;
case 73:
# line 466 "apl.y"

	{
		yyval.charptr = name(yyval.charptr, FUN);
	} break;
case 74:
# line 470 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = OPROD;
		*ccharp++ = yypvt[-0].charval;
	} break;
case 75:
# line 476 "apl.y"

	{
		yyval.charptr = ccharp;
		*ccharp++ = IPROD;
		*ccharp++ = yypvt[-2].charval;
		*ccharp++ = yypvt[-0].charval;
	} break;
case 76:
# line 484 "apl.y"

	{
		yyval.charval += 2;
	} break;
case 77:
# line 495 "apl.y"

	{
		yyval.charptr = yypvt[-1].charptr;
	} break;
		}
		goto yystack;  /* stack new state and value */

	}