Blob


1 /* #pragma lib "libl.a" */
2 int yylineno =1;
3 # define YYU(x) x
4 char yytext[YYLMAX];
5 struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
6 Uchar yysbuf[YYLMAX];
7 Uchar *yysptr = yysbuf;
8 int *yyfnd;
9 extern struct yysvf *yyestate;
10 int yyprevious = YYNEWLINE;
11 # ifdef LEXDEBUG
12 extern void allprint(char);
13 # endif
14 int
15 yylook(void){
16 struct yysvf *yystate, **lsp;
17 struct yywork *yyt;
18 struct yysvf *yyz;
19 int yych;
20 struct yywork *yyr;
21 # ifdef LEXDEBUG
22 int debug;
23 # endif
24 Uchar *yylastch;
25 /* start off machines */
26 # ifdef LEXDEBUG
27 debug = 0;
28 # endif
29 if (!yymorfg)
30 yylastch = (Uchar*)yytext;
31 else {
32 yymorfg=0;
33 yylastch = (Uchar*)yytext+yyleng;
34 }
35 for(;;){
36 lsp = yylstate;
37 yyestate = yystate = yybgin;
38 if (yyprevious==YYNEWLINE) yystate++;
39 for (;;){
40 # ifdef LEXDEBUG
41 if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
42 # endif
43 yyt = yystate->yystoff;
44 if(yyt == yycrank){ /* may not be any transitions */
45 yyz = yystate->yyother;
46 if(yyz == 0)break;
47 if(yyz->yystoff == yycrank)break;
48 }
49 *yylastch++ = yych = input();
50 tryagain:
51 # ifdef LEXDEBUG
52 if(debug){
53 fprintf(yyout,"char ");
54 allprint(yych);
55 putchar('\n');
56 }
57 # endif
58 yyr = yyt;
59 if (yyt > yycrank){
60 yyt = yyr + yych;
61 if (yyt <= yytop && yyt->verify+yysvec == yystate){
62 if(yyt->advance+yysvec == YYLERR) /* error transitions */
63 {unput(*--yylastch);break;}
64 *lsp++ = yystate = yyt->advance+yysvec;
65 goto contin;
66 }
67 }
68 # ifdef YYOPTIM
69 else if(yyt < yycrank) { /* r < yycrank */
70 yyt = yyr = yycrank+(yycrank-yyt);
71 # ifdef LEXDEBUG
72 if(debug)fprintf(yyout,"compressed state\n");
73 # endif
74 yyt = yyt + yych;
75 if(yyt <= yytop && yyt->verify+yysvec == yystate){
76 if(yyt->advance+yysvec == YYLERR) /* error transitions */
77 {unput(*--yylastch);break;}
78 *lsp++ = yystate = yyt->advance+yysvec;
79 goto contin;
80 }
81 yyt = yyr + YYU(yymatch[yych]);
82 # ifdef LEXDEBUG
83 if(debug){
84 fprintf(yyout,"try fall back character ");
85 allprint(YYU(yymatch[yych]));
86 putchar('\n');
87 }
88 # endif
89 if(yyt <= yytop && yyt->verify+yysvec == yystate){
90 if(yyt->advance+yysvec == YYLERR) /* error transition */
91 {unput(*--yylastch);break;}
92 *lsp++ = yystate = yyt->advance+yysvec;
93 goto contin;
94 }
95 }
96 if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
97 # ifdef LEXDEBUG
98 if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
99 # endif
100 goto tryagain;
102 # endif
103 else
104 {unput(*--yylastch);break;}
105 contin:
106 # ifdef LEXDEBUG
107 if(debug){
108 fprintf(yyout,"state %d char ",yystate-yysvec-1);
109 allprint(yych);
110 putchar('\n');
112 # endif
115 # ifdef LEXDEBUG
116 if(debug){
117 fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
118 allprint(yych);
119 putchar('\n');
121 # endif
122 while (lsp-- > yylstate){
123 *yylastch-- = 0;
124 if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
125 yyolsp = lsp;
126 if(yyextra[*yyfnd]){ /* must backup */
127 while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
128 lsp--;
129 unput(*yylastch--);
132 yyprevious = YYU(*yylastch);
133 yylsp = lsp;
134 yyleng = yylastch-(Uchar*)yytext+1;
135 yytext[yyleng] = 0;
136 # ifdef LEXDEBUG
137 if(debug){
138 fprintf(yyout,"\nmatch '%s'", yytext);
139 fprintf(yyout," action %d\n",*yyfnd);
141 # endif
142 return(*yyfnd++);
144 unput(*yylastch);
146 if (yytext[0] == 0 /* && feof(yyin) */)
148 yysptr=yysbuf;
149 return(0);
151 yyprevious = input();
152 yytext[0] = yyprevious;
153 if (yyprevious>0)
154 output(yyprevious);
155 yylastch = (Uchar*)yytext;
156 # ifdef LEXDEBUG
157 if(debug)putchar('\n');
158 # endif
160 return(0); /* shut up the compiler; i have no idea what should be returned */
162 int
163 yyback(int *p, int m)
165 if (p==0) return(0);
166 while (*p)
168 if (*p++ == m)
169 return(1);
171 return(0);
173 /* the following are only used in the lex library */
174 int
175 yyinput(void){
176 if(yyin == ((void*)0))
177 yyin = stdin;
178 return(input());
180 void
181 yyoutput(int c)
183 if(yyout == ((void*)0))
184 yyout = stdin;
185 output(c);
187 void
188 yyunput(int c)
190 unput(c);