Lines Matching refs:pat

260 static Expr *eall(re_re *r, PATTERN *pat);
261 static Expr *d0(re_re *r, PATTERN *pat);
262 static Expr *d1(re_re *r, PATTERN *pat);
263 static Expr *d2(re_re *r, PATTERN *pat);
264 static Expr *d3(re_re *r, PATTERN *pat);
266 static void lex(re_re *r, PATTERN *pat);
267 static int re_lit(PATTERN *pat, uchar_t **b, uchar_t **e);
268 static void traverse(PATTERN *pat, Expr *e);
269 static int ccl(PATTERN *pat, uchar_t *tab);
271 static BOOL altlist(Expr *e, uchar_t *buf, re_cw *pat);
286 static re_re *egprep(PATTERN *pat);
290 static BOOL re_bmexec(PATTERN *pat, uchar_t *s, uchar_t *e, uchar_t **mb,
292 static BOOL re_cwexec(PATTERN *pat, uchar_t *rs, uchar_t *re, uchar_t **mb,
294 static BOOL re_reexec(PATTERN *pat, uchar_t *b, uchar_t *e, uchar_t **mb,
298 static void dogre(PATTERN *pat);
299 static BOOL pattern_match(PATTERN *pat, LINE *lptr);
301 static BOOL grepmatch(PATTERN *pat, uchar_t **mb, uchar_t **me);
356 dogre(PATTERN *pat)
361 printf("PATTERN %s\n", pat->expression);
363 pat->re_ptr = egprep(pat);
364 bestlen = re_lit(pat, &lb, &le);
366 if (bestlen && pat->fullmatch) { /* Full Boyer Moore */
375 pat->bm_ptr = re_bmcomp(lb, le, pat->cmap);
376 pat->procfn = re_bmexec;
381 pat->bm_ptr = re_bmcomp(lb, le, pat->cmap);
382 pat->procfn = re_bmexec;
383 pat->fullmatch = NO;
385 pat->fullmatch = YES;
386 if ((pat->cw_ptr = re_recw(pat->re_ptr, pat->cmap)) != NULL) {
387 pat->procfn = re_cwexec; /* CW */
392 pat->succfn = re_reexec;
394 if (pat->fullmatch) {
395 pat->procfn = pat->succfn;
396 pat->succfn = NULL;
428 grepmatch(PATTERN *pat, uchar_t **mb, uchar_t **me)
432 if (pat->fullmatch)
441 if ((*pat->succfn)(pat, s, f, mb, me)) {
487 re_reexec(PATTERN *pat, uchar_t *b, uchar_t *e, uchar_t **mb, uchar_t **me)
489 re_re *r = pat->re_ptr;
516 c = pat->cmap[*b];
530 (void) printf("pat = %s\n", buf);
902 egprep(PATTERN *pat)
909 pat->loc1 = pat->expression;
910 pat->loc2 = pat->expression + strlen((char *)pat->expression);
914 r->cmap = pat->cmap;
915 lex(r, pat);
916 r->root = newexpr(EOP, '#', eall(r, pat), (Expr *)NULL);
947 lex(re_re *r, PATTERN *pat)
949 if (pat->loc1 == pat->loc2) {
952 } else switch (toklit = *pat->loc1++) {
962 if (pat->loc1 == pat->loc2) {
966 toklit = r->cmap[*pat->loc1++];
974 ccl(PATTERN *pat, uchar_t *tab)
983 if (*pat->loc1 == '^') {
984 pat->loc1++;
987 if (*pat->loc1 == ']') {
988 uchar_t c = pat->cmap[*pat->loc1];
990 lastc = *pat->loc1++;
993 for (; (pat->loc1 < pat->loc2) && (*pat->loc1 != ']');
994 pat->loc1++) {
995 if (*pat->loc1 == '-') {
996 if (lastc < 0) CCL_SET(tab, pat->cmap['-']);
1001 for (i = *pat->loc1; i >= lastc; i--) {
1002 CCL_SET(tab, pat->cmap[i]);
1005 uchar_t c = pat->cmap[*pat->loc1];
1011 lastc = *pat->loc1;
1013 if (range) CCL_SET(tab, pat->cmap['-']);
1015 if (pat->loc1 < pat->loc2) pat->loc1++;
1019 CCL_SET(tab, pat->cmap[NL]);
1023 if (pat->cmap[i] != i) CCL_CLR(tab, i);
1044 d3(re_re *r, PATTERN *pat)
1054 lex(r, pat);
1058 lex(r, pat);
1062 count = ccl(pat, tab);
1072 lex(r, pat);
1075 lex(r, pat);
1077 e = d0(r, pat);
1079 lex(r, pat);
1091 d2(re_re *r, PATTERN *pat)
1096 e = d3(r, pat);
1099 lex(r, pat);
1106 d1(re_re *r, PATTERN *pat)
1110 e = d2(r, pat);
1113 f = d2(r, pat);
1120 d0(re_re *r, PATTERN *pat)
1124 e = d1(r, pat);
1126 lex(r, pat);
1129 f = d1(r, pat);
1136 eall(re_re *r, PATTERN *pat)
1141 lex(r, pat);
1142 e = d0(r, pat);
1144 lex(r, pat);
1158 re_lit(PATTERN *pat, uchar_t **b, uchar_t **e)
1161 pat->fullmatch = YES;
1163 traverse(pat, pat->re_ptr->root->l);
1174 traverse(PATTERN *pat, Expr *e)
1181 traverse(pat, e->l);
1182 traverse(pat, e->r);
1185 traverse(pat, e->l);
1187 pat->fullmatch = NO;
1189 traverse(pat, e->l);
1193 pat->fullmatch = NO;
1251 re_bmexec(PATTERN *pat, uchar_t *s, uchar_t *e, uchar_t **mb, uchar_t **me)
1253 re_bm *b = pat->bm_ptr;
1270 if (grepmatch(pat, mb, me))
1291 re_cw *pat;
1297 pat = re_cwinit(map);
1299 if (!altlist(e, buf, pat)) {
1302 re_cwcomp(pat);
1303 return (pat);
1307 altlist(Expr *e, uchar_t *buf, re_cw *pat)
1310 return ((BOOL)(altlist(e->l, buf, pat) &&
1311 altlist(e->r, buf, pat)));
1312 return (word(e, buf, pat));
1316 word(Expr *e, uchar_t *buf, re_cw *pat)
1323 if (!word(e->l, (uchar_t *)NULL, pat))
1325 if (!word(e->r, (uchar_t *)NULL, pat))
1333 re_cwadd(pat, buf, p);
1545 re_cwexec(PATTERN *pat, uchar_t *rs, uchar_t *re, uchar_t **mb, uchar_t **me)
1554 re_cw *c = pat->cw_ptr;
1766 pattern_match(PATTERN *pat, LINE *lptr)
1768 if ((*pat->procfn)(pat, lptr->prntbuf - 1, lptr->newline + 1,
1769 &pat->loc1, &pat->loc2)) {
1772 pat->loc1 = lptr->prntbuf;
1773 pat->loc2 = lptr->newline - 1;