1: #ifndef lint
2: static char yaccpar_sccsid[] = "@(#)yaccpar 4.1 (Berkeley) 2/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
14: int yydebug = 0; /* 1 for debugging */
15: #endif
16: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
17: int yychar = -1; /* current input token number */
18: int yynerrs = 0; /* number of errors */
19: short yyerrflag = 0; /* error recovery flag */
20:
21: yyparse() {
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: }
Defined functions
Defined variables
yychar
defined in line
17; used 15 times
Defined macros
YYFLAG
defined in line
6; used 1 times