|
|
1.1 root 1: #include "re.h"
2: #include "lre.h"
3: #include "hdr.h"
4:
5: static altlist(Expr*, unsigned char *);
6: static word(Expr*, unsigned char*);
7: static re_cw *pat;
8:
9: re_cw *
10: re_recw(re_re *r, unsigned char *map)
11: {
12: unsigned char buf[20000];
13: register Expr *e, *root = r->root;
14:
15: if(root->type != EOP)
16: return(0);
17: if(root->l->type != Cat)
18: return(0);
19: if(root->l->l->type != Star)
20: return(0);
21: if(root->l->l->l->type != Dot)
22: return(0);
23: e = root->l->r;
24: pat = re_cwinit(map);
25: if(altlist(e, buf) == 0)
26: return(0);
27: re_cwcomp(pat);
28: return(pat);
29: }
30:
31: static
32: altlist(Expr *e, unsigned char *buf)
33: {
34: if(e->type == Alternate)
35: return(altlist(e->l, buf) && altlist(e->r, buf));
36: return(word(e, buf));
37: }
38:
39: static unsigned char *p;
40:
41: static
42: word(Expr *e, unsigned char *buf)
43: {
44: if(buf)
45: p = buf;
46: if(e->type == Cat){
47: if(word(e->l, (unsigned char *)0) == 0)
48: return(0);
49: if(word(e->r, (unsigned char *)0) == 0)
50: return(0);
51: } else if(e->type == Literal)
52: *p++ = e->lit;
53: else
54: return(0);
55: if(buf)
56: re_cwadd(pat, buf, p);
57: return(1);
58: }
59:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.