Merge nobobject with LR1
[cascardo/grammar.git] / grammar.h
1 #ifndef GRAMMAR_H
2 #define GRAMMAR_H
3
4 #include <glib.h>
5
6 typedef gint (*nextcb) (gpointer, gpointer*);
7
8 typedef struct
9 {
10   gboolean terminal;
11   GQuark value;
12 } symbol_t;
13
14 typedef struct _rule rule_t;
15 typedef struct
16 {
17   GHashTable* grammar;
18 } grammar_t;
19
20 symbol_t* symbol_new (gboolean, GQuark);
21 symbol_t* symbol_copy (symbol_t*);
22 guint symbol_hash (gconstpointer);
23 gboolean symbol_equal (gconstpointer, gconstpointer);
24 gint symbol_cmp (symbol_t*, symbol_t*);
25
26 rule_t* rule_new ();
27 rule_t* rule_copy (rule_t*);
28 gint rule_cmp (rule_t*, rule_t*);
29 gboolean rule_equal (gconstpointer, gconstpointer);
30 guint rule_hash (gconstpointer);
31 symbol_t* rule_pop (rule_t*);
32 void rule_append (rule_t*, symbol_t*);
33 void rule_delete (rule_t*);
34
35 grammar_t* grammar_new ();
36 rule_t* grammar_rule_new (grammar_t*, symbol_t*);
37 GList* grammar_get_rules (grammar_*, symbol_t*);
38 GList* grammar_get_rule (rule_t*);
39 void grammar_delete (grammar_t*);
40
41 #endif