|
| #define | NPAREN 10 /* we need to remember () 1-9 for back refs */ |
| |
| #define | PEEK() (*p->next) |
| |
| #define | PEEK2() (*(p->next + 1)) |
| |
| #define | MORE() (p->next < p->end) |
| |
| #define | MORE2() (p->next + 1 < p->end) |
| |
| #define | SEE(c) (MORE() && PEEK() == (c)) |
| |
| #define | SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b)) |
| |
| #define | EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0) |
| |
| #define | EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0) |
| |
| #define | NEXT() (p->next++) |
| |
| #define | NEXT2() (p->next += 2) |
| |
| #define | NEXTn(n) (p->next += (n)) |
| |
| #define | GETNEXT() (*p->next++) |
| |
| #define | SETERROR(e) seterr(p, (e)) |
| |
| #define | REQUIRE(co, e) ((co) || SETERROR(e)) |
| |
| #define | MUSTSEE(c, e) (REQUIRE(MORE() && PEEK() == (c), e)) |
| |
| #define | MUSTEAT(c, e) (REQUIRE(MORE() && GETNEXT() == (c), e)) |
| |
| #define | MUSTNOTSEE(c, e) (REQUIRE(!MORE() || PEEK() != (c), e)) |
| |
| #define | EMIT(op, sopnd) doemit(p, (sop)(op), (size_t)(sopnd)) |
| |
| #define | INSERT(op, pos) doinsert(p, (sop)(op), HERE() - (pos) + 1, pos) |
| |
| #define | AHEAD(pos) dofwd(p, pos, HERE() - (pos)) |
| |
| #define | ASTERN(sop, pos) EMIT(sop, HERE() - pos) |
| |
| #define | HERE() (p->slen) |
| |
| #define | THERE() (p->slen - 1) |
| |
| #define | THERETHERE() (p->slen - 2) |
| |
| #define | DROP(n) (p->slen -= (n)) |
| |
| #define | never 0 /* some <assert.h>s have bugs too */ |
| |
|
#define | GOODFLAGS(f) ((f) & ~REG_DUMP) |
| |
|
#define | BACKSL (1 << CHAR_BIT) |
| |
|
#define | N 2 |
| |
|
#define | INF 3 |
| |
|
#define | REP(f, t) ((f)*8 + (t)) |
| |
|
#define | MAP(n) (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N) |
| |
Regular expression compiler.
Definition in file regcomp.c.