1#ifndef lint 2static char yaccpar_sccsid[] = "@(#)old.yaccpar 4.1 (Berkeley) 02/11/83"; 3#endif not lint 4 5# 6# define YYFLAG -1000 7# define YYERROR goto yyerrlab 8# define YYACCEPT return(0) 9# define YYABORT return(1) 10 11/* parser for yacc output */ 12 13#ifdef YYDEBUG 14int yydebug = 0; /* 1 for debugging */ 15#endif 16YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */ 17int yychar = -1; /* current input token number */ 18int yynerrs = 0; /* number of errors */ 19short yyerrflag = 0; /* error recovery flag */ 20 21yyparse() { 22 23 short yys[YYMAXDEPTH]; 24 short yyj, yym; 25 register YYSTYPE *yypvt; 26 register short yystate, *yyps, yyn; 27 register YYSTYPE *yypv; 28 register short *yyxi; 29 30 yystate = 0; 31 yychar = -1; 32 yynerrs = 0; 33 yyerrflag = 0; 34 yyps= &yys[-1]; 35 yypv= &yyv[-1]; 36 37 yystack: /* put a state and value onto the stack */ 38 39#ifdef YYDEBUG 40 if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar ); 41#endif 42 if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); } 43 *yyps = yystate; 44 ++yypv; 45 *yypv = yyval; 46 47 yynewstate: 48 49 yyn = yypact[yystate]; 50 51 if( yyn<= YYFLAG ) goto yydefault; /* simple state */ 52 53 if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0; 54 if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault; 55 56 if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */ 57 yychar = -1; 58 yyval = yylval; 59 yystate = yyn; 60 if( yyerrflag > 0 ) --yyerrflag; 61 goto yystack; 62 } 63 64 yydefault: 65 /* default state action */ 66 67 if( (yyn=yydef[yystate]) == -2 ) { 68 if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0; 69 /* look through exception table */ 70 71 for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */ 72 73 while( *(yyxi+=2) >= 0 ){ 74 if( *yyxi == yychar ) break; 75 } 76 if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */ 77 } 78 79 if( yyn == 0 ){ /* error */ 80 /* error ... attempt to resume parsing */ 81 82 switch( yyerrflag ){ 83 84 case 0: /* brand new error */ 85 86 yyerror( "syntax error" ); 87 yyerrlab: 88 ++yynerrs; 89 90 case 1: 91 case 2: /* incompletely recovered error ... try again */ 92 93 yyerrflag = 3; 94 95 /* find a state where "error" is a legal shift action */ 96 97 while ( yyps >= yys ) { 98 yyn = yypact[*yyps] + YYERRCODE; 99 if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){ 100 yystate = yyact[yyn]; /* simulate a shift of "error" */ 101 goto yystack; 102 } 103 yyn = yypact[*yyps]; 104 105 /* the current yyps has no shift onn "error", pop stack */ 106 107#ifdef YYDEBUG 108 if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] ); 109#endif 110 --yyps; 111 --yypv; 112 } 113 114 /* there is no state on the stack with an error shift ... abort */ 115 116 yyabort: 117 return(1); 118 119 120 case 3: /* no shift yet; clobber input char */ 121 122#ifdef YYDEBUG 123 if( yydebug ) printf( "error recovery discards char %d\n", yychar ); 124#endif 125 126 if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */ 127 yychar = -1; 128 goto yynewstate; /* try again in the same state */ 129 130 } 131 132 } 133 134 /* reduction by production yyn */ 135 136#ifdef YYDEBUG 137 if( yydebug ) printf("reduce %d\n",yyn); 138#endif 139 yyps -= yyr2[yyn]; 140 yypvt = yypv; 141 yypv -= yyr2[yyn]; 142 yyval = yypv[1]; 143 yym=yyn; 144 /* consult goto table to find next state */ 145 yyn = yyr1[yyn]; 146 yyj = yypgo[yyn] + *yyps + 1; 147 if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; 148 switch(yym){ 149 $A 150 } 151 goto yystack; /* stack new state and value */ 152 153 } 154