|
|
1.1 root 1: #ifndef RE_H
2: #define RE_H
3:
4: # if defined(__cplusplus)
5: extern "C" { /* C++ 2.0 */
6: # endif
7:
8: typedef struct re_bm
9: {
10: int delta0[256], *delta2;
11: unsigned char cmap[256];
12: char *bmpat;
13: int patlen;
14: } re_bm;
15:
16: typedef struct re_cw
17: {
18: int maxdepth, mindepth;
19: char seenerror; /* set if we called re_error */
20: long nodeid;
21: int step[256];
22: unsigned char map[256];
23: struct Node *root;
24: } re_cw;
25:
26: typedef enum
27: {
28: Literal, Dot, Carat, Dollar, Charclass, Compcharclass, /* 0-5 */
29: Cat, Alternate, Star, Plus, Quest, Backref, Group, EOP, /* 6-13 */
30: /* not in grammar, just helping */
31: Lpar, Rpar, Backslash, Null
32: } Exprtype;
33:
34: typedef struct Expr
35: {
36: Exprtype type;
37: char reallit; /* just for dollar and -G, dammit! */
38: char backref; /* backref used here or below */
39: char parens; /* parens used here or below */
40: char seenerror; /* set if we called re_error */
41: int id;
42: unsigned int lit;
43: long flen;
44: int *follow;
45: struct Expr *l, *r, *parent;
46: } Expr;
47: typedef enum Parsetype { greparse, grepparse, egrepparse } Parsetype;
48:
49: #define RE_DOLLAR 256
50: #define RE_CARAT 257
51: #define RE_HIGH 258 /* always 1+last constant */
52:
53: typedef struct State
54: {
55: struct State *tab[RE_HIGH];
56: char out; /* matched */
57: char init; /* inital state */
58: long npos;
59: int pos; /* index into posbase */
60: } State;
61:
62: typedef struct Positionset
63: {
64: long count;
65: int last;
66: int *base;
67: } Positionset;
68:
69: typedef enum {
70: br_re, br_group, br_br, br_cat, br_alt, br_star, br_plus, br_quest
71: } Br_type;
72:
73: typedef struct Br
74: {
75: Br_type type;
76: Expr *e;
77: int group;
78: struct re_re *r;
79: struct Br *lb, *rb;
80: } Br;
81:
82: typedef struct re_re
83: {
84: int *posbase;
85: int nposalloc, posnext, posreset;
86: int maxid;
87: Expr *root;
88: Expr **ptr;
89: unsigned char mymap[256];
90: Positionset firstpos, begin, tmp;
91: int nstates, statelim;
92: State *states;
93: State istate;
94: int initialstate;
95: int carat;
96: int flushed;
97: int threshhold; /* resize cache every threshhold flushes */
98: int backref;
99: int parens;
100: Br *br;
101: } re_re;
102:
103: /*
104: matching routine endpoint markers
105: */
106: #define RE_BEG 1 /* beginning matches ^ */
107: #define RE_END 2 /* end matches $ */
108:
109: # ifdef USE_STDIO
110: # include <stdio.h>
111: # if defined(__STDC__) || defined(c_plusplus) || defined(__cplusplus)
112: extern void re_refile(re_re*, FILE*);
113: extern re_re *re_filere(FILE*);
114: # else
115: extern void re_refile();
116: extern re_re *re_filere();
117: # endif
118: # endif /* USE_STDIO */
119:
120: # if defined(__STDC__) || defined(c_plusplus) || defined(__cplusplus)
121: # define VOID void
122: typedef int (*RDFN)(char**, char**);
123: typedef int (*MATCHFN)(char**,char**);
124: typedef int (*PROCFN)(VOID*, RDFN, MATCHFN);
125: extern re_bm *re_bmcomp(char*, char*, unsigned char*);
126: extern int re_bmexec(VOID*, RDFN, MATCHFN);
127: extern void re_bmfree(re_bm*);
128: extern void re_cwadd(re_cw*, unsigned char*, unsigned char*);
129: extern void re_cwcomp(re_cw*);
130: extern int re_cwexec(VOID*, RDFN, MATCHFN);
131: extern void re_cwfree(re_cw*);
132: extern re_cw *re_cwinit(unsigned char*);
133: extern void re_error(char*);
134: extern int re_paren(re_re *e);
135: extern re_re *re_recomp(char*, char*, unsigned char*);
136: extern re_cw *re_recw(re_re*, unsigned char*);
137: extern int re_reexec(re_re*, char*, char*, char*[10][2]);
138: extern void re_refree(re_re*);
139: #else
140: # define VOID char
141: typedef int (*RDFN)();
142: typedef int (*MATCHFN)();
143: typedef int (*PROCFN)();
144: extern re_bm *re_bmcomp();
145: extern int re_bmexec();
146: extern void re_bmfree();
147: extern void re_cwadd();
148: extern void re_cwcomp();
149: extern int re_cwexec();
150: extern void re_cwfree();
151: extern re_cw *re_cwinit();
152: extern void re_error();
153: extern int re_paren();
154: extern re_re *re_recomp();
155: extern re_cw *re_recw();
156: extern int re_reexec();
157: extern void re_refree();
158: # endif
159:
160: # if defined(__cplusplus)
161: } /* C++ 2.0 */
162: # endif
163: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.