#include <grammar.h>
#include <stdlib.h>
+#include <lr1.h>
enum { PARSER_SHIFT, PARSER_REDUCE, PARSER_ACCEPT };
g_free (transition);
}
-static void lr1_push (lr1_t* parser, gint st, gpointer attrib)
+void lr1_push (lr1_t* parser, gint st, gpointer attrib)
{
state_t* state;
state = g_malloc (sizeof (state_t));
parser->data = data;
parser->stack = NULL;
- lr1_push (parser, 0, NULL);
parser->table = g_hash_table_new_full (g_direct_hash, g_direct_equal,
NULL, g_hash_table_destroy);
for (l = grammar_get_rule (transition->right);
l != NULL;
- l = g_list_previous (l))
+ l = g_list_next (l))
{
gpointer attr;
if (!lr1_pop (parser, &attr))