Added functions to compare symbols and hash and equal for rules
[cascardo/grammar.git] / grammar.h
1 #ifndef GRAMMAR_H
2 #define GRAMMAR_H
3
4 #include <glib.h>
5 #include <glib-object.h>
6
7 #define GRAMMAR_TYPE            (grammar_get_type ())
8 #define GRAMMAR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
9                                     GRAMMAR_TYPE, Grammar))
10 #define GRAMMAR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), \
11                                     GRAMMAR_TYPE, GrammarClass))
12 #define IS_GRAMMAR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
13                                     GRAMMAR_TYPE))
14 #define IS_GRAMMAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
15                                     GRAMMAR_TYPE))
16 #define GRAMMAR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), \
17                                     GRAMMAR_TYPE, GrammarClass))
18
19
20 typedef gint (*nextcb) (gpointer, gpointer*);
21
22 typedef struct
23 {
24   gboolean terminal;
25   GQuark value;
26 } symbol_t;
27
28 typedef struct _rule rule_t;
29 typedef struct
30 {
31   GObject parent;
32   GHashTable* grammar;
33 } Grammar;
34 typedef struct
35 {
36   GObjectClass parent;
37 } GrammarClass;
38
39 GType grammar_get_type ();
40
41 symbol_t* symbol_new (gboolean, GQuark);
42 symbol_t* symbol_copy (symbol_t*);
43 guint symbol_hash (gconstpointer);
44 gboolean symbol_equal (gconstpointer, gconstpointer);
45 gint symbol_cmp (symbol_t*, symbol_t*);
46
47 rule_t* rule_new ();
48 rule_t* rule_copy (rule_t*);
49 gint rule_cmp (rule_t*, rule_t*);
50 gboolean rule_equal (gconstpointer, gconstpointer);
51 guint rule_hash (gconstpointer);
52 symbol_t* rule_pop (rule_t*);
53 void rule_append (rule_t*, symbol_t*);
54 void rule_delete (rule_t*);
55
56
57 rule_t* grammar_rule_new (Grammar*, symbol_t*);
58 GList* grammar_get_rules (Grammar*, symbol_t*);
59 GList* grammar_get_rule (rule_t*);
60
61 #endif