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);
+}