/* Type definitions for nondeterministic finite state machine for Bison.
- Copyright (C) 1984, 1989, 2000, 2001, 2002, 2003, 2004 Free
+ Copyright (C) 1984, 1989, 2000, 2001, 2002, 2003, 2004, 2007 Free
Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
ACCESSING_SYMBOL of the core.
Each core contains a vector of NITEMS items which are the indices
- in the RITEMS vector of the items that are selected in this state.
+ in the RITEM vector of the items that are selected in this state.
The two types of actions are shifts/gotos (push the lookahead token
and read another/goto to the state designated by a nterm) and
deletes transitions by having them point to zero.
Each reductions structure describes the possible reductions at the
- state whose number is in the number field. The data is a list of
- nreds rules, represented by their rule numbers. first_reduction
- points to the list of these structures.
+ state whose number is in the number field. rules is an array of
+ num rules. lookahead_tokens is an array of bitsets, one per rule.
Conflict resolution can decide that certain tokens in certain
states should explicitly be errors (for implementing %nonassoc).
{
int num;
bitset *lookahead_tokens;
+ /* Sorted ascendingly on rule number. */
rule *rules[1];
} reductions;
reductions *reductions;
errs *errs;
- /* Nonzero if no lookahead is needed to decide what to do in state S. */
+ /* If non-zero, then no lookahead sets on reduce actions are needed to
+ decide what to do in state S. */
char consistent;
/* If some conflicts were solved thanks to precedence/associativity,
a human readable description of the resolution. */
const char *solved_conflicts;
- /* Its items. Must be last, since ITEMS can be arbitrarily large.
- */
+ /* Its items. Must be last, since ITEMS can be arbitrarily large. Sorted
+ ascendingly on item index in RITEM, which is sorted on rule number. */
size_t nitems;
item_number items[1];
};
/* Insert STATE in the state hash table. */
void state_hash_insert (state *s);
+/* Remove unreachable states, renumber remaining states, update NSTATES, and
+ write to OLD_TO_NEW a mapping of old state numbers to new state numbers such
+ that the old value of NSTATES is written as the new state number for removed
+ states. The size of OLD_TO_NEW must be the old value of NSTATES. */
+void state_remove_unreachable_states (state_number old_to_new[]);
+
/* All the states, indexed by the state number. */
extern state **states;
/* Free all the states. */
void states_free (void);
+
#endif /* !STATE_H_ */