GObjectified Grammar
[cascardo/grammar.git] / grammar.h
diff --git a/grammar.h b/grammar.h
new file mode 100644 (file)
index 0000000..ee32492
--- /dev/null
+++ b/grammar.h
@@ -0,0 +1,46 @@
+#ifndef GRAMMAR_H
+#define GRAMMAR_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#define GRAMMAR_TYPE            (grammar_get_type ())
+#define GRAMMAR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+                                    GRAMMAR_TYPE, Grammar))
+#define GRAMMAR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), \
+                                    GRAMMAR_TYPE, GrammarClass))
+#define IS_GRAMMAR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+                                    GRAMMAR_TYPE))
+#define IS_GRAMMAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+                                    GRAMMAR_TYPE))
+#define GRAMMAR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+                                    GRAMMAR_TYPE, GrammarClass))
+
+
+typedef gint (*nextcb) (gpointer, gpointer*);
+
+typedef struct
+{
+  gboolean terminal;
+  gint value;
+} symbol_t;
+
+typedef struct _rule rule_t;
+typedef struct
+{
+  GObject parent;
+  GHashTable* grammar;
+} Grammar;
+typedef struct
+{
+  GObjectClass parent;
+} GrammarClass;
+
+GType grammar_get_type ();
+
+symbol_t* symbol_new (gboolean, gint);
+
+rule_t* grammar_rule_new (Grammar*, symbol_t*);
+void grammar_rule_append (rule_t*, symbol_t*);
+
+#endif