123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /*
- * 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.
- */
- #include <u.h>
- #include <libc.h>
- #include <bio.h>
- #ifndef EXTERN
- #define EXTERN extern
- #endif
- typedef struct Re Re;
- typedef struct Re2 Re2;
- typedef struct State State;
- struct State {
- int count;
- int match;
- Re **re;
- State *linkleft;
- State *linkright;
- State *next[256];
- };
- struct Re2 {
- Re *beg;
- Re *end;
- };
- struct Re {
- uint8_t type;
- uint16_t gen;
- union {
- Re *alt; /* Talt */
- Re **cases; /* case */
- struct { /* class */
- Rune lo;
- Rune hi;
- };
- Rune val; /* char */
- };
- Re *next;
- };
- enum {
- Talt = 1,
- Tbegin,
- Tcase,
- Tclass,
- Tend,
- Tor,
- Caselim = 7,
- Nhunk = 1 << 16,
- Cbegin = Runemax + 1,
- Flshcnt = (1 << 9) - 1,
- Cflag = 1 << 0,
- Hflag = 1 << 1,
- Iflag = 1 << 2,
- Llflag = 1 << 3,
- LLflag = 1 << 4,
- Nflag = 1 << 5,
- Sflag = 1 << 6,
- Vflag = 1 << 7,
- Bflag = 1 << 8
- };
- EXTERN union {
- char string[16 * 1024];
- struct {
- /*
- * if a line requires multiple reads, we keep shifting
- * buf down into pre and then do another read into
- * buf. so you'll get the last 16-32k of the matching line.
- * if pre were smaller than buf you'd get a suffix of the
- * line with a hole cut out.
- */
- uint8_t pre[16 * 1024]; /* to save to previous '\n' */
- uint8_t buf[16 * 1024]; /* input buffer */
- };
- } u;
- EXTERN char *filename;
- EXTERN char *pattern;
- EXTERN Biobuf bout;
- EXTERN char flags[256];
- EXTERN Re **follow;
- EXTERN uint16_t gen;
- EXTERN char *input;
- EXTERN int32_t lineno;
- EXTERN int literal;
- EXTERN int matched;
- EXTERN int32_t maxfollow;
- EXTERN int32_t nfollow;
- EXTERN int peekc;
- EXTERN Biobuf *rein;
- EXTERN State *state0;
- EXTERN Re2 topre;
- extern Re *addcase(Re *);
- extern void appendnext(Re *, Re *);
- extern void error(char *);
- extern int fcmp(const void *, const void *); /* (Re**, Re**) */
- extern void fol1(Re *, int);
- extern int getrec(void);
- extern void increment(State *, int);
- extern State *initstate(Re *);
- extern void *mal(int);
- extern void patchnext(Re *, Re *);
- extern Re *ral(int);
- extern Re2 re2cat(Re2, Re2);
- extern Re2 re2class(char *);
- extern Re2 re2or(Re2, Re2);
- extern Re2 re2char(int, int);
- extern Re2 re2star(Re2);
- extern State *sal(int);
- extern int search(char *, int);
- extern void str2top(char *);
- extern int yyparse(void);
- extern void reprint(char *, Re *);
- extern void yyerror(char *, ...);
|