+ state_number_t number;
+ symbol_number_t accessing_symbol;
+ transitions_t *transitions;
+ reductions_t *reductions;
+ errs_t *errs;
+
+ /* Nonzero if no lookahead is 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.
+ */
+ unsigned short nitems;
+ item_number_t items[1];
+};
+
+extern state_number_t nstates;
+extern state_t *final_state;
+
+/* Create a new state with ACCESSING_SYMBOL for those items. */
+state_t *state_new PARAMS ((symbol_number_t accessing_symbol,
+ size_t core_size, item_number_t *core));
+
+/* Set the transitions of STATE. */
+void state_transitions_set PARAMS ((state_t *state,
+ int num, state_t **transitions));
+
+/* Set the reductions of STATE. */
+void state_reductions_set PARAMS ((state_t *state,
+ int num, rule_t **reductions));
+
+int state_reduction_find PARAMS ((state_t *state, rule_t *rule));
+
+/* Set the errs of STATE. */
+void state_errs_set PARAMS ((state_t *state,
+ int num, symbol_t **errs));
+
+/* Print on OUT all the lookaheads such that this STATE wants to
+ reduce this RULE. */
+void state_rule_lookaheads_print PARAMS ((state_t *state, rule_t *rule,
+ FILE *out));
+
+/* Create/destroy the states hash table. */
+void state_hash_new PARAMS ((void));
+void state_hash_free PARAMS ((void));
+
+/* Find the state associated to the CORE, and return it. If it does
+ not exist yet, return NULL. */
+state_t *state_hash_lookup PARAMS ((size_t core_size, item_number_t *core));
+
+/* Insert STATE in the state hash table. */
+void state_hash_insert PARAMS ((state_t *state));
+
+/* All the states, indexed by the state number. */
+extern state_t **states;