]> git.lizzy.rs Git - plan9front.git/blob - sys/src/ape/lib/l/reject.c
merge
[plan9front.git] / sys / src / ape / lib / l / reject.c
1 #include        <libl.h>
2 #include        <stdio.h>
3
4 extern  FILE*   yyout;
5 extern  FILE*   yyin;
6 extern  int     yyprevious, *yyfnd;
7 extern  char    yyextra[];
8 extern  char    yytext[];
9 extern  int     yyleng;
10
11 extern
12 struct
13 {
14         int *yyaa, *yybb;
15         int *yystops;
16 } *yylstate [], **yylsp, **yyolsp;
17
18 int     yyback(int *p, int m);
19 int     yyinput(void);
20 void    yyoutput(int c);
21 void    yyunput(int c);
22
23 int
24 yyracc(int m)
25 {
26
27         yyolsp = yylsp;
28         if(yyextra[m]) {
29                 while(yyback((*yylsp)->yystops, -m) != 1 && yylsp > yylstate) {
30                         yylsp--;
31                         yyunput(yytext[--yyleng]);
32                 }
33         }
34         yyprevious = yytext[yyleng-1];
35         yytext[yyleng] = 0;
36         return m;
37 }
38
39 int
40 yyreject(void)
41 {
42         for(; yylsp < yyolsp; yylsp++)
43                 yytext[yyleng++] = yyinput();
44         if(*yyfnd > 0)
45                 return yyracc(*yyfnd++);
46         while(yylsp-- > yylstate) {
47                 yyunput(yytext[yyleng-1]);
48                 yytext[--yyleng] = 0;
49                 if(*yylsp != 0 && (yyfnd = (*yylsp)->yystops) && *yyfnd > 0)
50                         return yyracc(*yyfnd++);
51         }
52         if(yytext[0] == 0)
53                 return 0;
54         yyoutput(yyprevious = yyinput());
55         yyleng = 0;
56         return -1;
57 }