summaryrefslogtreecommitdiff
path: root/ast.h
diff options
context:
space:
mode:
Diffstat (limited to 'ast.h')
-rw-r--r--ast.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/ast.h b/ast.h
new file mode 100644
index 0000000..4694c33
--- /dev/null
+++ b/ast.h
@@ -0,0 +1,40 @@
+#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,
+};
+
+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);
+
+extern struct atom *ast;
+
+#endif
+