|
|
1.1 ! root 1: #include <regexp.h> ! 2: ! 3: /* useful constants */ ! 4: #define NULL 0 ! 5: #define TRUE 1 ! 6: #define FALSE 0 ! 7: #define HAT '\177' /* character to mark real beg. of line */ ! 8: ! 9: /* ! 10: * Sub expression matches ! 11: */ ! 12: #define NSUBEXP 10 ! 13: typedef struct { ! 14: regsubexp m[NSUBEXP]; ! 15: }Subexp; ! 16: ! 17: /* ! 18: * character class ! 19: */ ! 20: typedef struct { ! 21: char map[16]; /* 16 bytes == 128 bits, one bit per char */ ! 22: }Class; ! 23: ! 24: /* ! 25: * Machine instructions ! 26: */ ! 27: typedef struct Inst{ ! 28: int type; /* < 0200 ==> literal, otherwise action */ ! 29: union { ! 30: int sid; /* sub-expression id for RBRA and LBRA */ ! 31: struct Inst *other; /* instructions pointer */ ! 32: } u; ! 33: struct Inst *left; ! 34: }Inst; ! 35: #define next left /* Left branch is usually just next ptr */ ! 36: #define subid u.sid ! 37: #define right u.other ! 38: ! 39: /* ! 40: * Program definition ! 41: */ ! 42: #define NCLASS 32 ! 43: typedef struct Program{ ! 44: Inst *startinst; /* start pc */ ! 45: Class class[NCLASS]; /* .data */ ! 46: Inst firstinst[5]; /* .text */ ! 47: }Prog; ! 48: ! 49: /* ! 50: * Actions and Tokens ! 51: * ! 52: * 02xx are operators, value == precedence ! 53: * 03xx are tokens, i.e. operands for operators ! 54: */ ! 55: #define OPERATOR 0200 /* Bitmask of all operators */ ! 56: #define START 0200 /* Start, used for marker on stack */ ! 57: #define RBRA 0201 /* Right bracket, ) */ ! 58: #define LBRA 0202 /* Left bracket, ( */ ! 59: #define OR 0203 /* Alternation, | */ ! 60: #define CAT 0204 /* Concatentation, implicit operator */ ! 61: #define STAR 0205 /* Closure, * */ ! 62: #define PLUS 0206 /* a+ == aa* */ ! 63: #define QUEST 0207 /* a? == a|nothing, i.e. 0 or 1 a's */ ! 64: #define ANY 0300 /* Any character, . */ ! 65: #define NOP 0301 /* No operation, internal use only */ ! 66: #define BOL 0302 /* Beginning of line, ^ */ ! 67: #define EOL 0303 /* End of line, $ */ ! 68: #define CCLASS 0304 /* Character class, [] */ ! 69: #define END 0377 /* Terminate: match found */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.