#ifndef AST_H #define AST_H struct repeat { long min, max; }; enum { ATOM_ALTERNATION, ATOM_SEQUENCE, ATOM_REPETITION, ATOM_ALPHABETIC, ATOM_NUMERIC, ATOM_UPPERCASE, ATOM_LOWERCASE, ATOM_CONTROL, ATOM_PUNCTUATION, ATOM_EVERYTHING, ATOM_LITERAL, ATOM_MAX }; struct atom { int type; union { struct { struct repeat counts; struct atom *child; } repeat; const struct atom *children[2]; const char *literal; } u; }; struct atom *mkatom(const struct atom *src); void dump_atom(const struct atom *a); void print_regex(const struct atom *a); extern struct atom *ast; #endif