5
#include "tools/re2c/token.h"
6
#include "tools/re2c/ins.h"
14
typedef struct CharPtn {
20
typedef struct CharSet {
22
CharPtn *freeHead, **freeTail;
27
typedef struct Range {
29
unsigned int lb, ub; /* [lb,ub) */
33
Range_init(Range *r, unsigned int l, unsigned int u)
41
Range_new(unsigned int l, unsigned int u)
43
Range *r = malloc(sizeof(Range));
51
Range_copy(Range *ro, const Range *r)
59
Range_new_copy(Range *r)
61
Range *ro = malloc(sizeof(Range));
68
void Range_out(FILE *, const Range *);
80
typedef struct RegExp {
95
/* for AltOp and CatOp*/
97
struct RegExp *exp1, *exp2;
111
RegExp_isA(RegExp *r, RegExpType t)
113
return r->type == t ? r : NULL;
116
void RegExp_split(RegExp*, CharSet*);
117
void RegExp_calcSize(RegExp*, Char*);
118
unsigned int RegExp_fixedLength(RegExp*);
119
void RegExp_compile(RegExp*, Char*, Ins*);
120
void RegExp_display(RegExp*, FILE *);
123
RegExp_new_NullOp(void)
125
RegExp *r = malloc(sizeof(RegExp));
131
RegExp_new_MatchOp(Range *m)
133
RegExp *r = malloc(sizeof(RegExp));
139
RegExp *RegExp_new_RuleOp(RegExp*, RegExp*, Token*, unsigned int);
142
RegExp_new_AltOp(RegExp *e1, RegExp *e2)
144
RegExp *r = malloc(sizeof(RegExp));
146
r->d.AltCatOp.exp1 = e1;
147
r->d.AltCatOp.exp2 = e2;
152
RegExp_new_CatOp(RegExp *e1, RegExp *e2)
154
RegExp *r = malloc(sizeof(RegExp));
156
r->d.AltCatOp.exp1 = e1;
157
r->d.AltCatOp.exp2 = e2;
162
RegExp_new_CloseOp(RegExp *e)
164
RegExp *r = malloc(sizeof(RegExp));
171
RegExp_new_CloseVOp(RegExp *e, int lb, int ub)
173
RegExp *r = malloc(sizeof(RegExp));
175
r->d.CloseVOp.exp = e;
176
r->d.CloseVOp.min = lb;
177
r->d.CloseVOp.max = ub;
181
extern void genCode(FILE *, RegExp*);
182
extern RegExp *mkDiff(RegExp*, RegExp*);
183
extern RegExp *mkDot(void);
184
extern RegExp *strToRE(SubStr);
185
extern RegExp *strToCaseInsensitiveRE(SubStr);
186
extern RegExp *ranToRE(SubStr);
187
extern RegExp *invToRE(SubStr);
189
extern RegExp *mkAlt(RegExp*, RegExp*);