From bedde43d47f11c6b5a2b3401c90d986a0ccef0a9 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Wed, 27 Aug 2008 14:22:22 -0300 Subject: [PATCH] Added some debugging --- first.c | 24 ++++++++++++++++++++++++ first.h | 1 + item.c | 6 +++--- lr1_gen.c | 12 +++++++++--- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/first.c b/first.c index da7d344..895ad2c 100644 --- a/first.c +++ b/first.c @@ -548,3 +548,27 @@ GList* first_rule (GHashTable* first, rule_t* rule) return l; } + +void first_print_symbol (gpointer key, gpointer val, gpointer data) +{ + symbol_t* symbol; + symbol = (symbol_t*) key; + fprintf (stdout, "%s\n", g_quark_to_string (symbol->value)); +} + +void first_print_set (gpointer key, gpointer val, gpointer data) +{ + symbol_t* symbol; + first_set_t* first_set; + symbol = (symbol_t*) key; + first_set = (first_set_t*) val; + fprintf (stdout, "FIRST of %s:\n", g_quark_to_string (symbol->value)); + if (first_set->has_empty) + fprintf (stdout, "empty symbol\n"); + g_hash_table_foreach (first_set->terminals, first_print_symbol, NULL); +} + +void first_print (GHashTable* first) +{ + g_hash_table_foreach (first, first_print_set, NULL); +} diff --git a/first.h b/first.h index 47a6200..17b1bb8 100644 --- a/first.h +++ b/first.h @@ -6,5 +6,6 @@ GHashTable* grammar_first (grammar_t*); GList* first_get (GHashTable*, symbol_t*); GList* first_rule (GHashTable*, rule_t*); +void first_print (GHashTable*); #endif diff --git a/item.c b/item.c index f1f61ce..8f4f4cf 100644 --- a/item.c +++ b/item.c @@ -347,13 +347,13 @@ GHashTable* item_collection_lookup (GHashTable* collection, return symbols; } -#define HASH_ITEM_SET(item_set) (((GPOINTER_TO_INT(item_set) & 0x3f00) >> 8)) +#define HASH_ITEM_SET(item_set) (item_set) #ifdef DEBUG void item_collection_print_each (gpointer key, gpointer val, gpointer data) { GHashTable* item_set; item_set = (GHashTable*) key; - fprintf (stdout, "Item %x:\n", HASH_ITEM_SET(key)); + fprintf (stdout, "Item %p:\n", HASH_ITEM_SET(key)); item_set_print (item_set); fprintf (stdout, "\n"); } @@ -362,7 +362,7 @@ void item_set_print_goto (gpointer key, gpointer val, gpointer data) { symbol_t* symbol; symbol = (symbol_t*) key; - fprintf (stdout, "GOTO (%x, %s) =\t %x\n", HASH_ITEM_SET(data), + fprintf (stdout, "GOTO (%p, %s) =\t %p\n", HASH_ITEM_SET(data), g_quark_to_string (symbol->value), HASH_ITEM_SET(val)); } diff --git a/lr1_gen.c b/lr1_gen.c index 3ff7cbf..ff9658b 100644 --- a/lr1_gen.c +++ b/lr1_gen.c @@ -42,20 +42,23 @@ void lr1_gen_add (gpointer key, gpointer val, gpointer data) if (item->dot == NULL) { #ifdef DEBUG - printf ("ACCEPT: %x\n", key); + printf ("ACCEPT: %p\n", key); #endif transition = transition_accept_new (); lr1_add (data, key, symbol_new (TRUE, 0), transition); } else { +#ifdef DEBUG + printf ("START: %p\n", key); +#endif lr1_push (data, key, NULL); } } else if (item->dot == NULL) { #ifdef DEBUG - printf ("REDUCE: %x, %s\n", key, + printf ("REDUCE: %p, %s\n", key, g_quark_to_string (item->lookahead->value)); #endif transition = transition_reduce_new (item->left, item->right); @@ -80,7 +83,7 @@ void lr1_gen_add (gpointer key, gpointer val, gpointer data) l = g_list_next (l); #ifdef DEBUG - printf ("SHIFT: %x, %s, %x\n", key, + printf ("SHIFT: %p, %s, %p\n", key, g_quark_to_string (symbol->value), l->data); #endif transition = transition_shift_new (l->data); @@ -104,6 +107,9 @@ lr1_t* lr1_gen (grammar_t* grammar, symbol_t* start, nextcb cb, gpointer data) lr1 = lr1_new (cb, data); first = grammar_first (grammar); +#ifdef DEBUG + first_print (first); +#endif collection = item_set_collection (grammar, first, start); -- 2.20.1