|
|
1.1 root 1: # include "stdio.h"
2: # define U(x) x
3: # define NLSTATE yyprevious=YYNEWLINE
4: # define BEGIN yybgin = yysvec + 1 +
5: # define INITIAL 0
6: # define YYLERR yysvec
7: # define YYSTATE (yyestate-yysvec-1)
8: # define YYOPTIM 1
9: # define YYLMAX 200
10: # define output(c) putc(c,yyout)
11: # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
12: # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
13: # define yymore() (yymorfg=1)
14: # define ECHO fprintf(yyout, "%s",yytext)
15: # define REJECT { nstr = yyreject(); goto yyfussy;}
16: int yyleng; extern char yytext[];
17: int yymorfg;
18: extern char *yysptr, yysbuf[];
19: int yytchar;
20: FILE *yyin ={stdin}, *yyout ={stdout};
21: extern int yylineno;
22: struct yysvf {
23: struct yywork *yystoff;
24: struct yysvf *yyother;
25: int *yystops;};
26: struct yysvf *yyestate;
27: extern struct yysvf yysvec[], *yybgin;
28: # define WORD 1
29: # define DOT 2
30: extern char *yylval, *sufstr();
31: char *svc();
32: # include "assert.h"
33: # include "ctype.h"
34: # define YYNEWLINE 10
35: yylex(){
36: int nstr; extern int yyprevious;
37: while((nstr = yylook()) >= 0)
38: yyfussy: switch(nstr){
39: case 0:
40: if(yywrap()) return(0); break;
41: case 1:
42: {lcase(yytext); cfree(yylval);
43: yylval=svc(sufstr(yytext)); return(WORD);}
44: break;
45: case 2:
46: return(DOT);
47: break;
48: case 3:
49: return(DOT);
50: break;
51: case 4:
52: return(DOT);
53: break;
54: case 5:
55: ;
56: break;
57: case 6:
58: ;
59: break;
60: case -1:
61: break;
62: default:
63: fprintf(yyout,"bad switch yylook %d",nstr);
64: } return(0); }
65: /* end of yylex */
66: yywrap()
67: {
68: return(1); /* always stop on eof */
69: }
70: char *
71: svc(s)
72: char *s;
73: {
74: char *p, *calloc();
75: p = calloc(strlen(s)+1,1);
76: assert(p!=0);
77: strcpy(p,s);
78: return(p);
79: }
80: trimnl(s)
81: char *s;
82: {
83: while (*s)s++;
84: if (*--s=='\n') *s=0;
85: }
86: lcase(s)
87: register char *s;
88: {
89: register int c;
90: register char *p;
91: if (*s==0) return;
92: for(p=s+1; c= *p; p++)
93: if (isupper(c))
94: return;
95: if (isupper(c = *s))
96: *s= tolower(c);
97: }
98: int yyvstop[] ={
99: 0,
100:
101: 5,
102: 0,
103:
104: 6,
105: 0,
106:
107: 3,
108: 5,
109: 0,
110:
111: 1,
112: 5,
113: 0,
114:
115: 2,
116: 5,
117: 0,
118:
119: 4,
120: 5,
121: 0,
122:
123: 1,
124: 0,
125: 0};
126: # define YYTYPE char
127: struct yywork { YYTYPE verify, advance; } yycrank[] ={
128: 0,0, 0,0, 1,3, 0,0,
129: 0,0, 0,0, 0,0, 0,0,
130: 0,0, 0,0, 0,0, 1,4,
131: 0,0, 0,0, 0,0, 0,0,
132: 0,0, 0,0, 0,0, 0,0,
133: 0,0, 0,0, 0,0, 0,0,
134: 0,0, 0,0, 0,0, 0,0,
135: 0,0, 0,0, 0,0, 0,0,
136: 0,0, 0,0, 1,5, 2,5,
137: 1,6, 0,0, 0,0, 0,0,
138: 0,0, 0,0, 0,0, 0,0,
139: 0,0, 0,0, 0,0, 1,7,
140: 2,7, 0,0, 0,0, 0,0,
141: 0,0, 0,0, 0,0, 0,0,
142: 0,0, 0,0, 0,0, 0,0,
143: 0,0, 0,0, 0,0, 0,0,
144: 1,8, 2,8, 6,0, 6,0,
145: 6,0, 6,0, 6,0, 6,0,
146: 6,0, 6,0, 6,0, 6,0,
147: 6,0, 6,0, 6,0, 6,0,
148: 6,0, 6,0, 6,0, 6,0,
149: 6,0, 6,0, 6,0, 6,0,
150: 6,0, 6,0, 6,0, 6,0,
151: 6,0, 6,0, 6,0, 6,0,
152: 6,0, 6,0, 6,0, 6,0,
153: 6,9, 6,0, 6,0, 6,0,
154: 0,0, 6,0, 6,0, 6,0,
155: 6,0, 6,0, 0,0, 6,0,
156: 6,0, 0,0, 0,0, 0,0,
157: 0,0, 0,0, 0,0, 0,0,
158: 0,0, 0,0, 0,0, 6,0,
159: 6,0, 6,0, 6,0, 6,0,
160: 6,0, 6,0, 0,0, 0,0,
161: 0,0, 0,0, 0,0, 0,0,
162: 0,0, 0,0, 0,0, 0,0,
163: 0,0, 0,0, 0,0, 0,0,
164: 0,0, 0,0, 0,0, 0,0,
165: 0,0, 0,0, 0,0, 0,0,
166: 0,0, 0,0, 0,0, 0,0,
167: 6,0, 6,0, 6,0, 6,0,
168: 6,0, 6,0, 0,0, 0,0,
169: 0,0, 0,0, 0,0, 0,0,
170: 0,0, 0,0, 0,0, 0,0,
171: 0,0, 0,0, 0,0, 0,0,
172: 0,0, 0,0, 0,0, 0,0,
173: 0,0, 0,0, 0,0, 0,0,
174: 0,0, 0,0, 0,0, 0,0,
175: 6,0, 6,0, 6,0, 6,0,
176: 6,0, 9,0, 9,0, 9,0,
177: 9,0, 9,0, 9,0, 9,0,
178: 9,0, 9,0, 9,0, 9,0,
179: 9,0, 9,0, 9,0, 9,0,
180: 9,0, 9,0, 9,0, 9,0,
181: 9,0, 9,0, 9,0, 9,0,
182: 9,0, 9,0, 9,0, 9,0,
183: 9,0, 9,0, 9,0, 9,0,
184: 9,0, 9,0, 9,0, 0,0,
185: 9,0, 9,0, 9,0, 0,0,
186: 9,0, 9,0, 9,0, 9,0,
187: 9,0, 0,0, 9,0, 9,0,
188: 0,0, 0,0, 0,0, 0,0,
189: 0,0, 0,0, 0,0, 0,0,
190: 0,0, 0,0, 9,0, 9,0,
191: 9,0, 9,0, 9,0, 9,0,
192: 9,0, 0,0, 0,0, 0,0,
193: 0,0, 0,0, 0,0, 0,0,
194: 0,0, 0,0, 0,0, 0,0,
195: 0,0, 0,0, 0,0, 0,0,
196: 0,0, 0,0, 0,0, 0,0,
197: 0,0, 0,0, 0,0, 0,0,
198: 0,0, 0,0, 0,0, 9,0,
199: 9,0, 9,0, 9,0, 9,0,
200: 9,0, 0,0, 0,0, 0,0,
201: 0,0, 0,0, 0,0, 0,0,
202: 0,0, 0,0, 0,0, 0,0,
203: 0,0, 0,0, 0,0, 0,0,
204: 0,0, 0,0, 0,0, 0,0,
205: 0,0, 0,0, 0,0, 0,0,
206: 0,0, 0,0, 0,0, 9,0,
207: 9,0, 9,0, 9,0, 9,0,
208: 0,0};
209: struct yysvf yysvec[] ={
210: 0, 0, 0,
211: yycrank+-1, 0, 0,
212: yycrank+-2, yysvec+1, 0,
213: yycrank+0, 0, yyvstop+1,
214: yycrank+0, 0, yyvstop+3,
215: yycrank+0, 0, yyvstop+5,
216: yycrank+-65, 0, yyvstop+8,
217: yycrank+0, 0, yyvstop+11,
218: yycrank+0, 0, yyvstop+14,
219: yycrank+-192, yysvec+6, yyvstop+17,
220: 0, 0, 0};
221: struct yywork *yytop = yycrank+319;
222: struct yysvf *yybgin = yysvec+1;
223: char yymatch[] ={
224: 00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
225: 01 ,01 ,012 ,01 ,01 ,01 ,01 ,01 ,
226: 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
227: 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
228: 01 ,01 ,01 ,'#' ,01 ,01 ,01 ,'#' ,
229: 01 ,01 ,01 ,01 ,01 ,'#' ,01 ,01 ,
230: '#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,
231: '#' ,'#' ,01 ,01 ,01 ,01 ,01 ,01 ,
232: 01 ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,
233: '#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,
234: '#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,
235: '#' ,'#' ,'#' ,01 ,01 ,01 ,01 ,01 ,
236: 01 ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,
237: '#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,
238: '#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,'#' ,
239: '#' ,'#' ,'#' ,01 ,01 ,01 ,01 ,01 ,
240: 0};
241: char yyextra[] ={
242: 0,0,0,0,0,0,0,0,
243: 0};
244: int yylineno =1;
245: # define YYU(x) x
246: # define NLSTATE yyprevious=YYNEWLINE
247: char yytext[YYLMAX];
248: struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
249: char yysbuf[YYLMAX];
250: char *yysptr = yysbuf;
251: int *yyfnd;
252: extern struct yysvf *yyestate;
253: int yyprevious = YYNEWLINE;
254: yylook(){
255: register struct yysvf *yystate, **lsp;
256: register struct yywork *yyt;
257: struct yysvf *yyz;
258: int yych;
259: struct yywork *yyr;
260: # ifdef LEXDEBUG
261: int debug;
262: # endif
263: char *yylastch;
264: /* start off machines */
265: # ifdef LEXDEBUG
266: debug = 0;
267: # endif
268: if (!yymorfg)
269: yylastch = yytext;
270: else {
271: yymorfg=0;
272: yylastch = yytext+yyleng;
273: }
274: for(;;){
275: lsp = yylstate;
276: yyestate = yystate = yybgin;
277: if (yyprevious==YYNEWLINE) yystate++;
278: for (;;){
279: # ifdef LEXDEBUG
280: if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
281: # endif
282: yyt = yystate->yystoff;
283: if(yyt == yycrank){ /* may not be any transitions */
284: yyz = yystate->yyother;
285: if(yyz == 0)break;
286: if(yyz->yystoff == yycrank)break;
287: }
288: *yylastch++ = yych = input();
289: tryagain:
290: # ifdef LEXDEBUG
291: if(debug){
292: fprintf(yyout,"char ");
293: allprint(yych);
294: putchar('\n');
295: }
296: # endif
297: yyr = yyt;
298: if ( (int)yyt > (int)yycrank){
299: yyt = yyr + yych;
300: if (yyt <= yytop && yyt->verify+yysvec == yystate){
301: if(yyt->advance+yysvec == YYLERR) /* error transitions */
302: {unput(*--yylastch);break;}
303: *lsp++ = yystate = yyt->advance+yysvec;
304: goto contin;
305: }
306: }
307: # ifdef YYOPTIM
308: else if((int)yyt < (int)yycrank) { /* r < yycrank */
309: yyt = yyr = yycrank+(yycrank-yyt);
310: # ifdef LEXDEBUG
311: if(debug)fprintf(yyout,"compressed state\n");
312: # endif
313: yyt = yyt + yych;
314: if(yyt <= yytop && yyt->verify+yysvec == yystate){
315: if(yyt->advance+yysvec == YYLERR) /* error transitions */
316: {unput(*--yylastch);break;}
317: *lsp++ = yystate = yyt->advance+yysvec;
318: goto contin;
319: }
320: yyt = yyr + YYU(yymatch[yych]);
321: # ifdef LEXDEBUG
322: if(debug){
323: fprintf(yyout,"try fall back character ");
324: allprint(YYU(yymatch[yych]));
325: putchar('\n');
326: }
327: # endif
328: if(yyt <= yytop && yyt->verify+yysvec == yystate){
329: if(yyt->advance+yysvec == YYLERR) /* error transition */
330: {unput(*--yylastch);break;}
331: *lsp++ = yystate = yyt->advance+yysvec;
332: goto contin;
333: }
334: }
335: if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
336: # ifdef LEXDEBUG
337: if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
338: # endif
339: goto tryagain;
340: }
341: # endif
342: else
343: {unput(*--yylastch);break;}
344: contin:
345: # ifdef LEXDEBUG
346: if(debug){
347: fprintf(yyout,"state %d char ",yystate-yysvec-1);
348: allprint(yych);
349: putchar('\n');
350: }
351: # endif
352: ;
353: }
354: # ifdef LEXDEBUG
355: if(debug){
356: fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
357: allprint(yych);
358: putchar('\n');
359: }
360: # endif
361: while (lsp-- > yylstate){
362: *yylastch-- = 0;
363: if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
364: yyolsp = lsp;
365: if(yyextra[*yyfnd]){ /* must backup */
366: while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
367: lsp--;
368: unput(*yylastch--);
369: }
370: }
371: yyprevious = YYU(*yylastch);
372: yylsp = lsp;
373: yyleng = yylastch-yytext+1;
374: yytext[yyleng] = 0;
375: # ifdef LEXDEBUG
376: if(debug){
377: fprintf(yyout,"\nmatch ");
378: sprint(yytext);
379: fprintf(yyout," action %d\n",*yyfnd);
380: }
381: # endif
382: return(*yyfnd++);
383: }
384: unput(*yylastch);
385: }
386: if (yytext[0] == 0 /* && feof(yyin) */)
387: {
388: yysptr=yysbuf;
389: return(0);
390: }
391: yyprevious = yytext[0] = input();
392: if (yyprevious>0)
393: output(yyprevious);
394: yylastch=yytext;
395: # ifdef LEXDEBUG
396: if(debug)putchar('\n');
397: # endif
398: }
399: }
400: yyback(p, m)
401: int *p;
402: {
403: if (p==0) return(0);
404: while (*p)
405: {
406: if (*p++ == m)
407: return(1);
408: }
409: return(0);
410: }
411: /* the following are only used in the lex library */
412: yyinput(){
413: return(input());
414: }
415: yyoutput(c)
416: int c; {
417: output(c);
418: }
419: yyunput(c)
420: int c; {
421: unput(c);
422: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.