#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;
+ GQuark 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*);
+} grammar_t;
+
+symbol_t* symbol_new (gboolean, GQuark);
+symbol_t* symbol_copy (symbol_t*);
+guint symbol_hash (gconstpointer);
+gboolean symbol_equal (gconstpointer, gconstpointer);
+gint symbol_cmp (symbol_t*, symbol_t*);
+
+rule_t* rule_new ();
+rule_t* rule_copy (rule_t*);
+gint rule_cmp (rule_t*, rule_t*);
+gboolean rule_equal (gconstpointer, gconstpointer);
+guint rule_hash (gconstpointer);
+symbol_t* rule_pop (rule_t*);
+void rule_append (rule_t*, symbol_t*);
+void rule_delete (rule_t*);
+
+grammar_t* grammar_new ();
+rule_t* grammar_rule_new (grammar_t*, symbol_t*);
+GList* grammar_get_rules (grammar_t*, symbol_t*);
+GList* grammar_get_rule (rule_t*);
+void grammar_delete (grammar_t*);
#endif