#include <grammar.h>
#include <stdlib.h>
#include <lr1.h>
+#ifdef DEBUG
+#include <stdio.h>
+#endif
enum { PARSER_SHIFT, PARSER_REDUCE, PARSER_ACCEPT };
if (!lr1_lookup (parser, state->state, symbol, &transition))
return NULL;
+#ifdef DEBUG
+ printf ("State: %x, Symbol: %s\n", state->state,
+ g_quark_to_string (symbol->value));
+#endif
+
if (transition->action == PARSER_SHIFT)
{
gint st;
+#ifdef DEBUG
+ printf ("SHIFT: %x\n", transition->state);
+#endif
lr1_push (parser, transition->state, leaf_new (attrib));
symbol->value = parser->cb (parser->data, &attrib);
symbol->terminal = TRUE;
l = g_list_first (parser->stack);
state = (state_t*) l->data;
+
+#ifdef DEBUG
+ printf ("REDUCE: back to %x, ", state->state);
+#endif
+
lr1_lookup (parser, state->state, transition->left, &trans);
+
+#ifdef DEBUG
+ printf ("%x\n", trans->state);
+#endif
+
lr1_push (parser, trans->state, attrib);
}
else if (transition->action == PARSER_ACCEPT)
{
+#ifdef DEBUG
+ printf ("ACCEPT\n");
+#endif
l = g_list_first (parser->stack);
state = (state_t*) l->data;
return state->attrib;