123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
- /*
- * substitution list
- */
- #define NSUBEXP 32
- typedef struct Resublist Resublist;
- struct Resublist
- {
- Resub m[NSUBEXP];
- };
- /*
- * Actions and Tokens (Reinst types)
- *
- * 02xx are operators, value == precedence
- * 03xx are tokens, i.e. operands for operators
- */
- #define RUNE 0177
- #define OPERATOR 0200 /* Bitmask of all operators */
- #define START 0200 /* Start, used for marker on stack */
- #define RBRA 0201 /* Right bracket, ) */
- #define LBRA 0202 /* Left bracket, ( */
- #define OR 0203 /* Alternation, | */
- #define CAT 0204 /* Concatentation, implicit operator */
- #define STAR 0205 /* Closure, * */
- #define PLUS 0206 /* a+ == aa* */
- #define QUEST 0207 /* a? == a|nothing, i.e. 0 or 1 a's */
- #define ANY 0300 /* Any character except newline, . */
- #define ANYNL 0301 /* Any character including newline, . */
- #define NOP 0302 /* No operation, internal use only */
- #define BOL 0303 /* Beginning of line, ^ */
- #define EOL 0304 /* End of line, $ */
- #define CCLASS 0305 /* Character class, [] */
- #define NCCLASS 0306 /* Negated character class, [] */
- #define END 0377 /* Terminate: match found */
- /*
- * regexec execution lists
- */
- #define LISTSIZE 10
- #define BIGLISTSIZE (25*LISTSIZE)
- typedef struct Relist Relist;
- struct Relist
- {
- Reinst* inst; /* Reinstruction of the thread */
- Resublist se; /* matched subexpressions in this thread */
- };
- typedef struct Reljunk Reljunk;
- struct Reljunk
- {
- Relist* relist[2];
- Relist* reliste[2];
- int starttype;
- Rune startchar;
- char* starts;
- char* eol;
- Rune* rstarts;
- Rune* reol;
- };
- extern Relist* _renewthread(Relist*, Reinst*, int, Resublist*);
- extern void _renewmatch(Resub*, int, Resublist*);
- extern Relist* _renewemptythread(Relist*, Reinst*, int, char*);
- extern Relist* _rrenewemptythread(Relist*, Reinst*, int, Rune*);
|