#ifndef ITEM_H
#define ITEM_H
+ #include <grammar.h>
+ #include <glib.h>
+
typedef struct
{
symbol_t* left;
symbol_t* lookahead;
} item_t;
--GHashTable* item_set_collection (Grammar*, GHashTable*, symbol_t*);
++GHashTable* item_set_collection (grammar_t*, GHashTable*, symbol_t*);
#endif
#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))
void transition_delete (transition_t*);
lr1_t* lr1_new (nextcb, gpointer);
void lr1_delete (lr1_t*);
- void lr1_add (lr1_t*, gint, symbol_t*, transition_t*);
+ gboolean lr1_add (lr1_t*, gint, symbol_t*, transition_t*);
+void lr1_push (lr1_t*, gint, gpointer);
gpointer lr1_build (lr1_t*);
#endif