xref: /plan9/sys/src/ape/lib/regexp/regcomp.h (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier /*
2*3e12c5d1SDavid du Colombier  *  substitution list
3*3e12c5d1SDavid du Colombier  */
4*3e12c5d1SDavid du Colombier typedef struct Resublist	Resublist;
5*3e12c5d1SDavid du Colombier struct	Resublist
6*3e12c5d1SDavid du Colombier {
7*3e12c5d1SDavid du Colombier 	Resub	m[32];
8*3e12c5d1SDavid du Colombier };
9*3e12c5d1SDavid du Colombier 
10*3e12c5d1SDavid du Colombier /* max subexpressions per program */
11*3e12c5d1SDavid du Colombier Resublist ReSuBlIsT;
12*3e12c5d1SDavid du Colombier #define NSUBEXP (sizeof(ReSuBlIsT.m)/sizeof(Resub))
13*3e12c5d1SDavid du Colombier 
14*3e12c5d1SDavid du Colombier /* max character classes per program */
15*3e12c5d1SDavid du Colombier Reprog	RePrOg;
16*3e12c5d1SDavid du Colombier #define	NCLASS	(sizeof(RePrOg.class)/sizeof(Reclass))
17*3e12c5d1SDavid du Colombier 
18*3e12c5d1SDavid du Colombier /* max rune ranges per character class */
19*3e12c5d1SDavid du Colombier #define NCCRUNE	(sizeof(Reclass)/sizeof(wchar_t))
20*3e12c5d1SDavid du Colombier 
21*3e12c5d1SDavid du Colombier /*
22*3e12c5d1SDavid du Colombier  * Actions and Tokens (Reinst types)
23*3e12c5d1SDavid du Colombier  *
24*3e12c5d1SDavid du Colombier  *	02xx are operators, value == precedence
25*3e12c5d1SDavid du Colombier  *	03xx are tokens, i.e. operands for operators
26*3e12c5d1SDavid du Colombier  */
27*3e12c5d1SDavid du Colombier #define RUNE		0177
28*3e12c5d1SDavid du Colombier #define	OPERATOR	0200	/* Bitmask of all operators */
29*3e12c5d1SDavid du Colombier #define	START		0200	/* Start, used for marker on stack */
30*3e12c5d1SDavid du Colombier #define	RBRA		0201	/* Right bracket, ) */
31*3e12c5d1SDavid du Colombier #define	LBRA		0202	/* Left bracket, ( */
32*3e12c5d1SDavid du Colombier #define	OR		0203	/* Alternation, | */
33*3e12c5d1SDavid du Colombier #define	CAT		0204	/* Concatentation, implicit operator */
34*3e12c5d1SDavid du Colombier #define	STAR		0205	/* Closure, * */
35*3e12c5d1SDavid du Colombier #define	PLUS		0206	/* a+ == aa* */
36*3e12c5d1SDavid du Colombier #define	QUEST		0207	/* a? == a|nothing, i.e. 0 or 1 a's */
37*3e12c5d1SDavid du Colombier #define	ANY		0300	/* Any character except newline, . */
38*3e12c5d1SDavid du Colombier #define	ANYNL		0301	/* Any character including newline, . */
39*3e12c5d1SDavid du Colombier #define	NOP		0302	/* No operation, internal use only */
40*3e12c5d1SDavid du Colombier #define	BOL		0303	/* Beginning of line, ^ */
41*3e12c5d1SDavid du Colombier #define	EOL		0304	/* End of line, $ */
42*3e12c5d1SDavid du Colombier #define	CCLASS		0305	/* Character class, [] */
43*3e12c5d1SDavid du Colombier #define	NCCLASS		0306	/* Negated character class, [] */
44*3e12c5d1SDavid du Colombier #define	END		0377	/* Terminate: match found */
45*3e12c5d1SDavid du Colombier 
46*3e12c5d1SDavid du Colombier /*
47*3e12c5d1SDavid du Colombier  *  regexec execution lists
48*3e12c5d1SDavid du Colombier  */
49*3e12c5d1SDavid du Colombier #define LISTINCREMENT 8
50*3e12c5d1SDavid du Colombier typedef struct Relist	Relist;
51*3e12c5d1SDavid du Colombier struct Relist
52*3e12c5d1SDavid du Colombier {
53*3e12c5d1SDavid du Colombier 	Reinst		*inst;		/* Reinstruction of the thread */
54*3e12c5d1SDavid du Colombier 	Resublist	se;		/* matched subexpressions in this thread */
55*3e12c5d1SDavid du Colombier };
56*3e12c5d1SDavid du Colombier extern Relist*	_relist[2];
57*3e12c5d1SDavid du Colombier extern Relist*	_reliste[2];
58*3e12c5d1SDavid du Colombier extern int	_relistsize;
59*3e12c5d1SDavid du Colombier 
60*3e12c5d1SDavid du Colombier extern Relist*	_renewthread(Relist*, Reinst*, Resublist*);
61*3e12c5d1SDavid du Colombier extern void	_renewmatch(Resub*, int, Resublist*);
62