xref: /csrg-svn/old/lex/libln/reject.c (revision 9919)
1*9919Ssam /*	@(#)reject.c	4.1	12/25/82	*/
2*9919Ssam 
3*9919Ssam # include <stdio.h>
4*9919Ssam extern struct {int *yyaa, *yybb; int *yystops;} *yylstate [], **yylsp, **yyolsp;
5*9919Ssam yyreject ()
6*9919Ssam {
7*9919Ssam extern FILE *yyout, *yyin;
8*9919Ssam extern int yyprevious , *yyfnd;
9*9919Ssam extern char yyextra[];
10*9919Ssam extern char yytext[];
11*9919Ssam extern int yyleng;
12*9919Ssam for( ; yylsp < yyolsp; yylsp++)
13*9919Ssam 	yytext[yyleng++] = yyinput();
14*9919Ssam if (*yyfnd > 0)
15*9919Ssam 	return(yyracc(*yyfnd++));
16*9919Ssam while (yylsp-- > yylstate)
17*9919Ssam 	{
18*9919Ssam 	yyunput(yytext[yyleng-1]);
19*9919Ssam 	yytext[--yyleng] = 0;
20*9919Ssam 	if (*yylsp != 0 && (yyfnd= (*yylsp)->yystops) && *yyfnd > 0)
21*9919Ssam 		return(yyracc(*yyfnd++));
22*9919Ssam 	}
23*9919Ssam if (yytext[0] == 0)
24*9919Ssam 	return(0);
25*9919Ssam yyoutput(yyprevious = yyinput());
26*9919Ssam yyleng=0;
27*9919Ssam return(-1);
28*9919Ssam }
29*9919Ssam yyracc(m)
30*9919Ssam {
31*9919Ssam yyolsp = yylsp;
32*9919Ssam if (yyextra[m])
33*9919Ssam 	{
34*9919Ssam 	while (yyback((*yylsp)->yystops, -m) != 1 && yylsp>yylstate)
35*9919Ssam 		{
36*9919Ssam 		yylsp--;
37*9919Ssam 		yyunput(yytext[--yyleng]);
38*9919Ssam 		}
39*9919Ssam 	}
40*9919Ssam yyprevious = yytext[yyleng-1];
41*9919Ssam yytext[yyleng] = 0;
42*9919Ssam return(m);
43*9919Ssam }
44