regcomp.h - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
regcomp.h (2091B) | |
--- | |
1 /* | |
2 * substitution list | |
3 */ | |
4 #define uchar __reuchar | |
5 typedef unsigned char uchar; | |
6 #define nelem(x) (sizeof(x)/sizeof((x)[0])) | |
7 | |
8 #define NSUBEXP 32 | |
9 typedef struct Resublist Resublist; | |
10 struct Resublist | |
11 { | |
12 Resub m[NSUBEXP]; | |
13 }; | |
14 | |
15 /* max character classes per program */ | |
16 extern Reprog RePrOg; | |
17 #define NCLASS (sizeof(RePrOg.class)/sizeof(Reclass)) | |
18 | |
19 /* max rune ranges per character class */ | |
20 #define NCCRUNE (sizeof(Reclass)/sizeof(Rune)) | |
21 | |
22 /* | |
23 * Actions and Tokens (Reinst types) | |
24 * | |
25 * 02xx are operators, value == precedence | |
26 * 03xx are tokens, i.e. operands for operators | |
27 */ | |
28 #define RUNE 0177 | |
29 #define OPERATOR 0200 /* Bitmask of all operators */ | |
30 #define START 0200 /* Start, used for marke… | |
31 #define RBRA 0201 /* Right bracket, ) */ | |
32 #define LBRA 0202 /* Left bracket, ( */ | |
33 #define OR 0203 /* Alternation, | */ | |
34 #define CAT 0204 /* Concatentation, implici… | |
35 #define STAR 0205 /* Closure, * */ | |
36 #define PLUS 0206 /* a+ == aa* */ | |
37 #define QUEST 0207 /* a? == a|nothing, i.e.… | |
38 #define ANY 0300 /* Any character except ne… | |
39 #define ANYNL 0301 /* Any character includi… | |
40 #define NOP 0302 /* No operation, internal … | |
41 #define BOL 0303 /* Beginning of line, ^ */ | |
42 #define EOL 0304 /* End of line, $ */ | |
43 #define CCLASS 0305 /* Character class, [] … | |
44 #define NCCLASS 0306 /* Negated character c… | |
45 #define END 0377 /* Terminate: match found … | |
46 | |
47 /* | |
48 * regexec execution lists | |
49 */ | |
50 #define LISTSIZE 10 | |
51 #define BIGLISTSIZE (10*LISTSIZE) | |
52 typedef struct Relist Relist; | |
53 struct Relist | |
54 { | |
55 Reinst* inst; /* Reinstruction of … | |
56 Resublist se; /* matched subexpressions in… | |
57 }; | |
58 typedef struct Reljunk Reljunk; | |
59 struct Reljunk | |
60 { | |
61 Relist* relist[2]; | |
62 Relist* reliste[2]; | |
63 int starttype; | |
64 Rune startchar; | |
65 char* starts; | |
66 char* eol; | |
67 Rune* rstarts; | |
68 Rune* reol; | |
69 }; | |
70 | |
71 extern Relist* _renewthread(Relist*, Reinst*, int, Resublist*); | |
72 extern void _renewmatch(Resub*, int, Resublist*); | |
73 extern Relist* _renewemptythread(Relist*, Reinst*, int, char*); | |
74 extern Relist* _rrenewemptythread(Relist*, Reinst*, int, Rune*); |