-/* From src/scan-skel.l. */
-void m4_invoke PARAMS ((const char *definitions));
-
-
-/* Several tables will be indexed both by state and nonterminal
- numbers. We call `vector' such a thing (= either a state or a
- symbol number.
-
- Of course vector_number_t ought to be wide enough to contain
- state_number_t and symbol_number_t. */
-typedef short vector_number_t;
-#define VECTOR_NUMBER_MAX ((vector_number_t) SHRT_MAX)
-#define VECTOR_NUMBER_MIN ((vector_number_t) SHRT_MIN)
-#define state_number_to_vector_number(State) \
- ((vector_number_t) State)
-#define symbol_number_to_vector_number(Symbol) \
- ((vector_number_t) (state_number_as_int (nstates) + Symbol - ntokens))
-
-static int nvectors;
-
-
-/* FROMS and TOS are indexed by vector_number_t.
-
- If VECTOR is a nonterminal, (FROMS[VECTOR], TOS[VECTOR]) form an
- array of state numbers of the non defaulted GOTO on VECTOR.
-
- If VECTOR is a state, TOS[VECTOR] is the array of actions to do on
- the (array of) symbols FROMS[VECTOR].
-
- In both cases, TALLY[VECTOR] is the size of the arrays
- FROMS[VECTOR], TOS[VECTOR]; and WIDTH[VECTOR] =
- (FROMS[VECTOR][SIZE] - FROMS[VECTOR][0] + 1) where SIZE =
- TALLY[VECTOR].
-
- FROMS therefore contains symbol_number_t and action_number_t,
- TOS state_number_t and action_number_t,
- TALLY sizes,
- WIDTH differences of FROMS.
-
- Let base_t be the type of FROMS, TOS, and WIDTH. */
-typedef int base_t;
-#define BASE_MAX ((base_t) INT_MAX)
-#define BASE_MIN ((base_t) INT_MIN)
-
-static base_t **froms = NULL;
-static base_t **tos = NULL;
-static unsigned int **conflict_tos = NULL;
-static short *tally = NULL;
-static base_t *width = NULL;
-
-
-/* For a given state, N = ACTROW[SYMBOL]:
-
- If N = 0, stands for `run the default action'.
- If N = MIN, stands for `raise a parse error'.
- If N > 0, stands for `shift SYMBOL and go to n'.
- If N < 0, stands for `reduce -N'. */
-typedef short action_t;
-#define ACTION_MAX ((action_t) SHRT_MAX)
-#define ACTION_MIN ((action_t) SHRT_MIN)
-
-static action_t *actrow = NULL;
-
-/* FROMS and TOS are reordered to be compressed. ORDER[VECTOR] is the
- new vector number of VECTOR. We skip `empty' vectors (i.e.,
- TALLY[VECTOR] = 0), and call these `entries'. */
-static vector_number_t *order = NULL;
-static int nentries;
-
-static base_t *base = NULL;
-/* A distinguished value of BASE, negative infinite. During the
- computation equals to BASE_MIN, later mapped to BASE_NINF to
- keep parser tables small. */
-base_t base_ninf = 0;
-static base_t *pos = NULL;
-
-static unsigned int *conflrow = NULL;
-static unsigned int *conflict_table = NULL;
-static unsigned int *conflict_list = NULL;
-static int conflict_list_cnt;
-static int conflict_list_free;
-
-/* TABLE_SIZE is the allocated size of both TABLE and CHECK.
- We start with the original hard-coded value: SHRT_MAX
- (yes, not USHRT_MAX). */
-static size_t table_size = SHRT_MAX;
-static base_t *table = NULL;
-static base_t *check = NULL;
-/* The value used in TABLE to denote explicit parse errors
- (%nonassoc), a negative infinite. First defaults to ACTION_MIN,
- but in order to keep small tables, renumbered as TABLE_ERROR, which
- is the smallest (non error) value minus 1. */
-base_t table_ninf = 0;
-static int lowzero;
-static int high;