First version of libgrammatic with rdp and lr0 parser
[cascardo/grammar.git] / parser.c
1 #include "parser.h"
2
3 symbol_t* symbol_new (gboolean terminal, gint value)
4 {
5   symbol_t* symbol;
6   symbol = g_malloc (sizeof (symbol_t));
7   symbol->terminal = terminal;
8   symbol->value = value;
9   return symbol;
10 }
11
12 rule_t* rule_new (symbol_t* left)
13 {
14   rule_t* rule;
15   rule = g_malloc (sizeof (rule_t));
16   rule->left = left;
17   rule->right = NULL;
18   return rule;
19 }
20
21 void rule_append (rule_t* rule, symbol_t* right)
22 {
23   rule->right = g_list_append (rule->right, right);
24 }
25
26 guint symbol_hash (gconstpointer data)
27 {
28   symbol_t* symbol;
29   symbol = (symbol_t*) data;
30   return g_direct_hash (symbol->value);
31 }
32
33 gboolean symbol_equal (gconstpointer data1, gconstpointer data2)
34 {
35   symbol_t* symbol1;
36   symbol_t* symbol2;
37   symbol1 = (symbol_t*) data1;
38   symbol2 = (symbol_t*) data2;
39   return symbol1->value == symbol2->value &&
40     symbol1->terminal == symbol2->terminal;
41 }
42