/** * \post: * - \c result = a new \c bitset of size \c ::nritems such that any bit \c i * is set iff <tt>ritem[i]</tt> is a nonterminal after which all ritems in * the same RHS are nullable nonterminals. In other words, the follows of * a goto on <tt>ritem[i]</tt> include the lookahead set of the item. */ static bitset ielr_compute_ritem_sees_lookahead_set (void) { bitset result = bitset_create (nritems, BITSET_FIXED); unsigned int i = nritems-1; while (i>0) { --i; while (!item_number_is_rule_number (ritem[i]) && ISVAR (ritem[i]) && nullable [item_number_as_symbol_number (ritem[i]) - ntokens]) bitset_set (result, i--); if (!item_number_is_rule_number (ritem[i]) && ISVAR (ritem[i])) bitset_set (result, i--); while (!item_number_is_rule_number (ritem[i]) && i>0) --i; } if (trace_flag & trace_ielr) { fprintf (stderr, "ritem_sees_lookahead_set:\n"); debug_bitset (result); fprintf (stderr, "\n"); } return result; }
void debug_bitsetv (bitsetv bsetv) { bitset_windex i; for (i = 0; bsetv[i]; i++) { fprintf (stderr, "%lu: ", (unsigned long int) i); debug_bitset (bsetv[i]); } fprintf (stderr, "\n"); }