#pragma once #include #include enum { Toperator = RuneMask + 1, Tstart = Toperator, Trparen, Tlparen, Tor, Tcat, Tstar, Tplus, Tqmark, Tany = Toperator << 1, Tnop, Tbol, Teol, Tcclass, Tnclass, Tend, isoptor = Toperator, isopand = Toperator << 1, }; typedef struct Class Class; typedef struct State State; typedef struct Patch Patch; typedef struct Node Node; typedef struct Parser Parser; typedef struct Machine Machine; struct Class { rune *end; rune span[64]; }; struct State { int type; union { State *l; }; union { State *r; State *out; }; }; struct Patch { State *s; Patch *link; }; struct Node { State *beg; State *end; }; struct Parser { Machine *mach; byte *re; int wasopand : 1; int *optor, optorstk[1000]; Node *node, nodestk[1000]; }; struct Machine { /* memory buffers */ struct { void *heap; mem·Reallocator; }; State *state, statestk[1000]; struct { int cap; int len; Class *c; } class; State *entry; };