xref: /plan9/sys/src/libregexp/regcomp.h (revision 3468a4915d661daa200976acc4f80f51aae144b2)
13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier  *  substitution list
33e12c5d1SDavid du Colombier  */
4219b2ee8SDavid du Colombier #define NSUBEXP 32
53e12c5d1SDavid du Colombier typedef struct Resublist	Resublist;
63e12c5d1SDavid du Colombier struct	Resublist
73e12c5d1SDavid du Colombier {
8219b2ee8SDavid du Colombier 	Resub	m[NSUBEXP];
93e12c5d1SDavid du Colombier };
103e12c5d1SDavid du Colombier 
113e12c5d1SDavid du Colombier /*
123e12c5d1SDavid du Colombier  * Actions and Tokens (Reinst types)
133e12c5d1SDavid du Colombier  *
143e12c5d1SDavid du Colombier  *	02xx are operators, value == precedence
153e12c5d1SDavid du Colombier  *	03xx are tokens, i.e. operands for operators
163e12c5d1SDavid du Colombier  */
173e12c5d1SDavid du Colombier #define RUNE		0177
183e12c5d1SDavid du Colombier #define	OPERATOR	0200	/* Bitmask of all operators */
193e12c5d1SDavid du Colombier #define	START		0200	/* Start, used for marker on stack */
203e12c5d1SDavid du Colombier #define	RBRA		0201	/* Right bracket, ) */
213e12c5d1SDavid du Colombier #define	LBRA		0202	/* Left bracket, ( */
223e12c5d1SDavid du Colombier #define	OR		0203	/* Alternation, | */
233e12c5d1SDavid du Colombier #define	CAT		0204	/* Concatentation, implicit operator */
243e12c5d1SDavid du Colombier #define	STAR		0205	/* Closure, * */
253e12c5d1SDavid du Colombier #define	PLUS		0206	/* a+ == aa* */
263e12c5d1SDavid du Colombier #define	QUEST		0207	/* a? == a|nothing, i.e. 0 or 1 a's */
273e12c5d1SDavid du Colombier #define	ANY		0300	/* Any character except newline, . */
283e12c5d1SDavid du Colombier #define	ANYNL		0301	/* Any character including newline, . */
293e12c5d1SDavid du Colombier #define	NOP		0302	/* No operation, internal use only */
303e12c5d1SDavid du Colombier #define	BOL		0303	/* Beginning of line, ^ */
313e12c5d1SDavid du Colombier #define	EOL		0304	/* End of line, $ */
323e12c5d1SDavid du Colombier #define	CCLASS		0305	/* Character class, [] */
333e12c5d1SDavid du Colombier #define	NCCLASS		0306	/* Negated character class, [] */
343e12c5d1SDavid du Colombier #define	END		0377	/* Terminate: match found */
353e12c5d1SDavid du Colombier 
363e12c5d1SDavid du Colombier /*
373e12c5d1SDavid du Colombier  *  regexec execution lists
383e12c5d1SDavid du Colombier  */
39219b2ee8SDavid du Colombier #define LISTSIZE	10
40*0c0e9c72SDavid du Colombier #define BIGLISTSIZE	(25*LISTSIZE)
413e12c5d1SDavid du Colombier typedef struct Relist	Relist;
423e12c5d1SDavid du Colombier struct Relist
433e12c5d1SDavid du Colombier {
443e12c5d1SDavid du Colombier 	Reinst*		inst;		/* Reinstruction of the thread */
453e12c5d1SDavid du Colombier 	Resublist	se;		/* matched subexpressions in this thread */
463e12c5d1SDavid du Colombier };
47219b2ee8SDavid du Colombier typedef struct Reljunk	Reljunk;
48219b2ee8SDavid du Colombier struct	Reljunk
49219b2ee8SDavid du Colombier {
50219b2ee8SDavid du Colombier 	Relist*	relist[2];
51219b2ee8SDavid du Colombier 	Relist*	reliste[2];
52219b2ee8SDavid du Colombier 	int	starttype;
53219b2ee8SDavid du Colombier 	Rune	startchar;
54219b2ee8SDavid du Colombier 	char*	starts;
55219b2ee8SDavid du Colombier 	char*	eol;
56219b2ee8SDavid du Colombier 	Rune*	rstarts;
57219b2ee8SDavid du Colombier 	Rune*	reol;
58219b2ee8SDavid du Colombier };
593e12c5d1SDavid du Colombier 
607dd7cddfSDavid du Colombier extern Relist*	_renewthread(Relist*, Reinst*, int, Resublist*);
613e12c5d1SDavid du Colombier extern void	_renewmatch(Resub*, int, Resublist*);
627dd7cddfSDavid du Colombier extern Relist*	_renewemptythread(Relist*, Reinst*, int, char*);
637dd7cddfSDavid du Colombier extern Relist*	_rrenewemptythread(Relist*, Reinst*, int, Rune*);
64