Provide functions to retrieve rules from Grammar
[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   gint 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, gint);
42
43 rule_t* grammar_rule_new (Grammar*, symbol_t*);
44 void grammar_rule_append (rule_t*, symbol_t*);
45 GList* grammar_get_rules (Grammar*, symbol_t*);
46 GList* grammar_get_rule (rule_t*);
47
48 #endif