diff options
Diffstat (limited to 'types.h')
| -rw-r--r-- | types.h | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/types.h b/types.h deleted file mode 100644 index 2dda92d..0000000 --- a/types.h +++ /dev/null @@ -1,135 +0,0 @@ -// -// types.h - Datatypes used by BP -// -#ifndef TYPES__H -#define TYPES__H - -#include <stdbool.h> -#include <sys/types.h> - -#define UNBOUNDED(pat) ((pat)->max_matchlen == -1) - -// BP virtual machine pattern types -enum pattype_e { - BP_ANYCHAR = 1, - BP_ID_START = 2, - BP_ID_CONTINUE = 3, - BP_STRING = 4, - BP_RANGE = 5, - BP_NOT = 6, - BP_UPTO = 7, - BP_UPTO_STRICT = 8, - BP_REPEAT = 9, - BP_BEFORE = 10, - BP_AFTER = 11, - BP_CAPTURE = 12, - BP_OTHERWISE = 13, - BP_CHAIN = 14, - BP_MATCH = 15, - BP_NOT_MATCH = 16, - BP_REPLACE = 17, - BP_REF = 18, - BP_NODENT = 19, - BP_START_OF_FILE = 20, - BP_START_OF_LINE = 21, - BP_END_OF_FILE = 22, - BP_END_OF_LINE = 23, - BP_WORD_BOUNDARY = 24, - BP_DEFINITION = 25, - BP_LEFTRECURSION = 26, -}; - -struct match_s; // forward declared to resolve circular struct defs - -// -// A struct reperesenting a BP virtual machine operation -// -typedef struct pat_s { - struct pat_s *next; - enum pattype_e type; - const char *start, *end; - // The bounds of the match length (used for backtracking) - size_t min_matchlen; - ssize_t max_matchlen; // -1 means unbounded length - union { - const char *string; - struct { - const char *name; - size_t len; - } ref; - struct { - const char *name; - size_t namelen; - struct pat_s *def, *pat; - } def; - struct { - unsigned char low, high; - } range; - struct { - size_t min; - ssize_t max; - struct pat_s *sep, *repeat_pat; - } repetitions; - // TODO: use a linked list instead of a binary tree - struct { - struct pat_s *first, *second; - } multiple; - struct { - struct pat_s *pat; - const char *text; - size_t len; - } replace; - struct { - struct pat_s *capture_pat; - const char *name; - size_t namelen; - } capture; - struct match_s *backref; - struct { - struct match_s *match; - unsigned int visits; - const char *at; - struct pat_s *fallback; - } leftrec; - struct { - const char *start, *end, *msg; - } error; - struct pat_s *pat; - } args; - size_t id; -} pat_t; - -typedef struct { - struct match_s **home, *next; -} match_dll_t; - -// #define MATCH_FROM(node, name) ((match_t*)((char*)node + (size_t)(&((match_t*)0)->name))) - -// -// Pattern matching result object -// -typedef struct match_s { - // Where the match starts and ends (end is after the last character) - const char *start, *end; - pat_t *pat; - // Intrusive linked list nodes for garbage collection and cache buckets: - match_dll_t gc, cache; - size_t defs_id; - int refcount; - struct match_s **children; - struct match_s *_children[3]; -} match_t; - -// -// Pattern matching rule definition(s) -// -typedef struct def_s { - size_t id; - size_t namelen; - const char *name; - pat_t *pat; - struct def_s *next; -} def_t; - -#endif -// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0 |
