1*4246b616SDavid du Colombier /* 2*4246b616SDavid du Colombier * Deterministic regexp program. 3*4246b616SDavid du Colombier */ 4*4246b616SDavid du Colombier typedef struct Dreprog Dreprog; 5*4246b616SDavid du Colombier typedef struct Dreinst Dreinst; 6*4246b616SDavid du Colombier typedef struct Drecase Drecase; 7*4246b616SDavid du Colombier 8*4246b616SDavid du Colombier struct Dreinst 9*4246b616SDavid du Colombier { 10*4246b616SDavid du Colombier int isfinal; 11*4246b616SDavid du Colombier int isloop; 12*4246b616SDavid du Colombier Drecase *c; 13*4246b616SDavid du Colombier int nc; 14*4246b616SDavid du Colombier }; 15*4246b616SDavid du Colombier 16*4246b616SDavid du Colombier struct Dreprog 17*4246b616SDavid du Colombier { 18*4246b616SDavid du Colombier Dreinst *start[4]; 19*4246b616SDavid du Colombier int ninst; 20*4246b616SDavid du Colombier Dreinst inst[1]; 21*4246b616SDavid du Colombier }; 22*4246b616SDavid du Colombier 23*4246b616SDavid du Colombier struct Drecase 24*4246b616SDavid du Colombier { 25*4246b616SDavid du Colombier uint start; 26*4246b616SDavid du Colombier Dreinst *next; 27*4246b616SDavid du Colombier }; 28*4246b616SDavid du Colombier 29*4246b616SDavid du Colombier Dreprog* dregcvt(Reprog*); 30*4246b616SDavid du Colombier int dregexec(Dreprog*, char*, int); 31*4246b616SDavid du Colombier Dreprog* Breaddfa(Biobuf *b); 32*4246b616SDavid du Colombier void Bprintdfa(Biobuf*, Dreprog*); 33*4246b616SDavid du Colombier 34