Charles.Forsyth20060303644188019 years agoHistory
66 lines · 1.3 KB · C
RawDownload
#pragma	src	"/usr/inferno/libregexp"#pragma	lib	"libregexp.a" typedef struct Resub		Resub;typedef struct Reclass		Reclass;typedef struct Reinst		Reinst;typedef struct Reprog		Reprog; /* *	Sub expression matches */struct Resub{	union	{		char *sp;		Rune *rsp;	}s;	union	{		char *ep;		Rune *rep;	}e;}; /* *	character class, each pair of rune's defines a range */struct Reclass{	Rune	*end;	Rune	spans[64];}; /* *	Machine instructions */struct Reinst{	int	type;	union	{		Reclass	*cp;		/* class pointer */		Rune	r;		/* character */		int	subid;		/* sub-expression id for RBRA and LBRA */		Reinst	*right;		/* right child of OR */	}u1;	union {	/* regexp relies on these two being in the same union */		Reinst *left;		/* left child of OR */		Reinst *next;		/* next instruction for CAT & LBRA */	}u2;}; /* *	Reprogram definition */struct Reprog{	Reinst	*startinst;	/* start pc */	Reclass	class[16];	/* .data */	Reinst	firstinst[5];	/* .text */}; extern Reprog	*regcomp(char*);extern Reprog	*regcomplit(char*);extern Reprog	*regcompnl(char*);extern void	regerror(char*);extern int	regexec(Reprog*, char*, Resub*, int);extern void	regsub(char*, char*, Resub*, int);extern int	rregexec(Reprog*, Rune*, Resub*, int);extern void	rregsub(Rune*, Rune*, Resub*, int);