From: Thadeu Lima de Souza Cascardo Date: Thu, 10 Nov 2005 17:36:09 +0000 (+0000) Subject: Debug for LR(1) parser X-Git-Tag: cascardo@tlscascardo--private,libgrammatic--regular--0.1--base-0 X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fgrammar.git;a=commitdiff_plain;h=44329c28581fa2283d5652547c6193e9071fbe75 Debug for LR(1) parser Inserted debug code for LR(1) parser. git-archimport-id: cascardo@tlscascardo--private/libgrammatic--nogobject-lr1--0.1--patch-12 --- diff --git a/lr1.c b/lr1.c index 2124bb1..afbc9e0 100644 --- a/lr1.c +++ b/lr1.c @@ -1,6 +1,9 @@ #include #include #include +#ifdef DEBUG +#include +#endif enum { PARSER_SHIFT, PARSER_REDUCE, PARSER_ACCEPT }; @@ -216,9 +219,17 @@ gpointer lr1_build (lr1_t* parser) 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; @@ -246,13 +257,26 @@ gpointer lr1_build (lr1_t* parser) 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;