|
|
1.1 root 1: %{
2: # define WORD 1
3: # define DOT 2
4: extern char *yylval, *sufstr();
5: char *svc();
6: # include "assert.h"
7: # include "ctype.h"
8: %}
9: %%
10: [-'A-Za-z0-9#]+ {lcase(yytext); cfree(yylval);
11: yylval=svc(sufstr(yytext)); return(WORD);}
12: "." return(DOT);
13: "!" return(DOT);
14: "?" return(DOT);
15: . ;
16: \n ;
17: %%
18: yywrap()
19: {
20: return(1); /* always stop on eof */
21: }
22: char *
23: svc(s)
24: char *s;
25: {
26: char *p, *calloc();
27: p = calloc(strlen(s)+1,1);
28: assert(p!=0);
29: strcpy(p,s);
30: return(p);
31: }
32: trimnl(s)
33: char *s;
34: {
35: while (*s)s++;
36: if (*--s=='\n') *s=0;
37: }
38: lcase(s)
39: register char *s;
40: {
41: register int c;
42: register char *p;
43: if (*s==0) return;
44: for(p=s+1; c= *p; p++)
45: if (isupper(c))
46: return;
47: if (isupper(c = *s))
48: *s= tolower(c);
49: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.