Commit Graph

37 Commits

Author SHA1 Message Date
Akim Demaille
ccaf65bc63 * src/state.h, src/state.c (shift_t, SHIFT_SYMBOL, SHIFT_IS_SHIFT)
(SHIFT_IS_GOTO, SHIFT_IS_ERROR, SHIFT_DISABLE, SHIFT_IS_DISABLED)
(shifts_to): Rename as...
(transition_t, TRANSITION_SYMBOL, TRANSITION_IS_TRANSITION)
(TRANSITION_IS_GOTO, TRANSITION_IS_ERROR, TRANSITION_DISABLE)
(TRANSITION_IS_DISABLED, transitions_to): these.
2002-06-30 17:33:37 +00:00
Akim Demaille
53d4308dbb * src/output.c (action_row): Let default_rule be always a rule
number.
2002-06-30 17:32:35 +00:00
Akim Demaille
24c7d80020 * src/state.h, src/state.c (shifts_to): New.
* src/lalr.c (build_relations): Use it.
2002-06-30 17:31:37 +00:00
Akim Demaille
8a731ca829 * src/LR0.c (save_reductions): Remove, replaced by...
* src/state.h, src/state.c (state_reductions_set): New.
(reductions, errs): Rename as...
(reductions_t, errs_t): these.
Adjust all dependencies.
2002-06-30 17:30:46 +00:00
Akim Demaille
32e1e0a486 * src/LR0.c (state_list_t, state_list_append): New.
(first_state, last_state): Now symbol_list_t.
(this_state): Remove.
(new_itemsets, append_states, save_reductions): Take a state_t as
argument.
(set_states, generate_states): Adjust.
(save_shifts): Remove, replaced by...
* src/state.h, src/state.c (state_shifts_set): New.
(shifts): Rename as...
(shifts_t): this.
Adjust all dependencies.
* src/state.h (state_t): Remove the `next' member.
2002-06-30 17:30:29 +00:00
Akim Demaille
c7ca99d4b0 Use hash.h for the state hash table.
* src/LR0.c (STATE_HASH_SIZE, state_hash): Remove.
(allocate_storage): Use state_hash_new.
(free_storage): Use state_hash_free.
(new_state, get_state): Adjust.
* src/lalr.h, src/lalr.c (states): Move to...
* src/states.h (state_t): Remove the `link' member, no longer
used.
* src/states.h, src/states.c: here.
(state_hash_new, state_hash_free, state_hash_lookup)
(state_hash_insert, states_free): New.
* src/states.c (state_table, state_compare, state_hash): New.
* src/output.c (output_actions): Do not free states now, since we
still need to know the final_state number in `prepare', called
afterwards.  Do it...
* src/main.c (main): here: call states_free after `output'.
2002-06-30 17:29:36 +00:00
Akim Demaille
df0e7316a9 * src/state.h, src/state.c (state_new): New, extracted from...
* src/LR0.c (new_state): here.
* src/state.h (STATE_ALLOC): Move to...
* src/state.c: here.
* src/LR0.h, src/LR0.c (nstates, final_state): Move to...
* src/state.h, src/state.c: here.
2002-06-30 17:28:44 +00:00
Akim Demaille
d57650a5ff * src/state.h (state_number_t, STATE_NUMBER_MAX): New.
* src/LR0.c, src/LR0.h, src/conflicts.c, src/lalr.c, src/lalr.h,
* src/output.c, src/print.c, src/print_graph.c: Propagate.
* src/LR0.h, src/LR0.h (final_state): Is a state_t*.
2002-06-30 17:27:34 +00:00
Akim Demaille
10e5b8bd0a * src/state.h, src/state.c (state_rule_lookaheads_print): New.
* src/print.c (print_core): Use it.
2002-06-15 18:24:25 +00:00
Akim Demaille
9801d40c50 * src/conflicts.c (log_resolution): Accept the rule involved in
the sr conflicts instead of the lookahead number that points to
that rule.
(flush_reduce): Accept the current lookahead vector as argument,
instead of the index in LA.
(resolve_sr_conflict): Accept the current number of lookahead
bitset to consider for the STATE, instead of the index in LA.
(set_conflicts): Adjust.
* src/lalr.c, src/lalr.h, src/state.h: Comment changes.
2002-06-15 18:24:08 +00:00
Akim Demaille
c026349221 * src/state.h (state_t): Replace the `lookaheadsp' member, a
short, with `lookaheads' (bitsetv), `lookaheads_rule' (rule_t**).
Adjust all dependencies.
* src/lalr.c (initialize_lookaheads): Split into...
(states_lookaheads_count, states_lookaheads_initialize): these.
(lalr): Adjust.
2002-06-15 18:23:50 +00:00
Akim Demaille
b408954b40 * src/state.h (state_t): `solved_conflicts' is a new member.
* src/LR0.c (new_state): Set it to 0.
* src/conflicts.h, src/conflicts.c (print_conflicts)
(free_conflicts, solve_conflicts): Rename as...
(conflicts_print, conflicts_free, conflicts_solve): these.
Adjust callers.
* src/conflicts.c (enum conflict_resolution_e)
(solved_conflicts_obstack): New, used by...
(log_resolution): this.
Adjust to attach the conflict resolution to each state.
Complete the description with the precedence/associativity
information.
(resolve_sr_conflict): Adjust.
* src/print.c (print_state): Output its solved_conflicts.
* tests/conflicts.at (Unresolved SR Conflicts)
(Solved SR Conflicts): Exercise --report=all.
2002-05-26 20:25:52 +00:00
Akim Demaille
a49aecd528 * src/LR0.c, src/derives.c, src/gram.c, src/gram.h, src/lalr.c,
* src/nullable.c, src/output.c, src/print.c, src/print_graph.c,
* src/reader.c, src/reduce.c, src/state.h, src/symtab.h
(token_number_t, item_number_as_token_number)
(token_number_as_item_number, muscle_insert_token_number_table):
Rename as...
(symbol_number_t, item_number_as_symbol_number)
(symbol_number_as_item_number, muscle_insert_symbol_number_table):
these, since it is more appropriate.
2002-05-26 18:39:05 +00:00
Akim Demaille
0c2d3f4cba Kill GCC warnings.
* src/reduce.c (nonterminals_reduce): Don't loop over RITEM: loop
over the RHS of each rule.
* src/gram.h, src/gram.c (nritems): Is `unsigned int', not int.
* src/state.h (state_t): Member `nitems' is unsigned short.
* src/LR0.c (get_state): Adjust.
* src/reader.c (packgram): Likewise.
* src/output.c (GENERATE_MUSCLE_INSERT_TABLE): `max' is of type
`Type'.
(muscle_insert_int_table): Remove, unused.
(prepare_rules): Remove `max'.
2002-05-07 08:07:32 +00:00
Akim Demaille
5fbb0954b8 Propagate more token_number_t.
* src/gram.h (token_number_as_item_number)
(item_number_as_token_number): New.
* src/output.c (GENERATE_OUTPUT_TABLE): New.
Use it to create output_item_number_table and
output_token_number_table.
* src/LR0.c, src/derives.c, src/gram.c, src/gram.h, src/lalr.c,
* src/lex.c, src/nullable.c, src/output.c, src/print.c,
* src/print_graph.c, src/reader.c, src/reduce.c, src/state.h,
* src/symtab.c, src/symtab.h: Use token_number_t instead of shorts.
2002-04-22 08:21:55 +00:00
Akim Demaille
007a50a493 * src/gram.h, src/gram.c (error_token_number): Remove, use
errtoken->number.
* src/reader.c (reader): Don't specify the user token number (2)
for $undefined, as it uselessly prevents using it.
* src/gram.h (token_number_t): Move to...
* src/symtab.h: here.
(state_t.number): Is a token_number_t.
* src/print.c, src/reader.c: Use undeftoken->number instead of
hard coded 2.
(Even though this 2 is not the same as above: the number of the
undeftoken remains being 2, it is its user token number which
might not be 2).
* src/output.c (prepare_tokens): Rename the `maxtok' muscle with
`user_token_number_max'.
Output `undef_token_number'.
* data/bison.simple, data/bison.c++: Use them.
Be sure to map invalid yylex return values to
`undef_token_number'.  This saves us from gratuitous SEGV.
* tests/conflicts.at (Solved SR Conflicts)
(Unresolved SR Conflicts): Adjust.
* tests/regression.at (Web2c Actions): Adjust.
2002-04-09 19:19:59 +00:00
Akim Demaille
62a3e4f0c5 * src/gram.h (item_number_t): New, the type of item numbers in
RITEM.  Note that it must be able to code symbol numbers as
positive number, and the negation of rule numbers as negative
numbers.
Adjust all dependencies (pretty many).
* src/reduce.c (rule): Remove this `short *' pointer: use
item_number_t.
* src/system.h (MINSHORT, MAXSHORT): Remove.
Include `limits.h'.
Adjust dependencies to using SHRT_MAX and SHRT_MIN.
(shortcpy): Remove.
(MAXTABLE): Move to...
* src/output.c (MAXTABLE): here.
(prepare_rules): Use output_int_table to output rhs.
* data/bison.simple, data/bison.c++: Adjust.
* tests/torture.at (Big triangle): Move the limit from 254 to
500.
* tests/regression.at (Web2c Actions): Ajust.
Trying with bigger grammars shows various phenomena: at 3000 (28Mb
of grammar file) bison is killed by my system, at 2000 (12Mb) bison
passes, but produces negative #line number, once fixed, GCC is
killed while compiling 14Mb, at 1500 (6.7 Mb of grammar, 8.2Mb of
C), it passes.
* src/state.h (state_h): Code input lines on ints, not shorts.
2002-04-08 11:46:26 +00:00
Akim Demaille
5123689ba0 * src/gram.h, src/gram.c (nitems): Remove, it is an alias of
nritems.
Adjust dependencies.
2002-04-07 17:44:24 +00:00
Akim Demaille
db8837cbe1 Rename all the bucket's as symbol_t'.
* src/gram.c, src/gram.h, src/lex.c, src/lex.h, src/output.c,
* src/reader.c, src/reader.h, src/reduce.c, src/state.h,
* src/symtab.c, src/symtab.h (bucket): Rename as...
(symbol_t): this.
(symbol_list_new, bucket_check_defined, bucket_make_alias)
(bucket_check_alias_consistence, bucket_pack, bucket_translation)
(bucket_new, bucket_free, hash_compare_bucket, hash_bucket)
(buckets_new, buckets_free, buckets_do): Rename as...
(symbol_list_new, symbol_check_defined, symbol_make_alias)
(symbol_check_alias_consistence, symbol_pack, symbol_translation)
(symbol_new, symbol_free, hash_compare_symbol_t, hash_symbol_t)
(symbols_new, symbols_free, symbols_do): these.
2002-04-07 17:43:41 +00:00
Akim Demaille
29e8831621 * src/LR0.c, src/conflicts.c, src/lalr.c, src/lalr.h, src/output.c
* src/print.c, src/print_graph.c, src/state.h: Rename state_table
as states.
2001-12-29 14:20:47 +00:00
Akim Demaille
80dac38c5e * src/state.h, src/state.c (reductions_new): New.
* src/LR0.c (set_state_table): Let all the states have a
`reductions', even if reduced to 0.
(save_reductions): Adjust.
* src/lalr.c (initialize_LA, initialize_lookaheads): Adjust.
* src/print.c (print_reductions, print_actions): Adjust.
* src/output.c (action_row): Adjust.
2001-12-27 18:11:06 +00:00
Akim Demaille
2cec70b9f1 * src/state.h, src/state.c (errs_new, errs_dup): New.
* src/LR0.c (set_state_table): Let all the states have an errs,
even if reduced to 0.
* src/print.c (print_errs, print_reductions): Adjust.
* src/output.c (output_actions, action_row): Adjust.
* src/conflicts.c (resolve_sr_conflict): Adjust.
2001-12-27 18:10:48 +00:00
Akim Demaille
3877f72ba2 * src/state.h (state_t): Rename lookaheads as lookaheadsp.
nlookaheads is a new member.
Adjust all users.
* src/lalr.h (nlookaheads): Remove this orphan declaration.
* src/lalr.c (initialize_lookaheads): Set nlookaheads for each
state.
2001-12-17 17:32:59 +00:00
Akim Demaille
0279f8e90c * src/state.h (shifts): Remove the `number' member: shifts are
attached to state, hence no longer need to be labelled with a
state number.
2001-12-10 09:10:10 +00:00
Akim Demaille
190c4f5f0a Now that states have a complete set of members, the linked list of
shifts is useless: just fill directly the state's shifts member.
* src/state.h (shifts): Remove the `next' member.
* src/LR0.c (first_state, last_state): Remove.
Adjust the callers.
(augment_automaton): Don't look for the shifts that must be added
a shift on EOF: it is those of the state we looked for!  But now,
since shifts are attached, it is no longer needed to looking
merely by its id: its number.
2001-12-10 09:09:49 +00:00
Akim Demaille
49701457c2 Now that states have a complete set of members, the linked list of
reductions is useless: just fill directly the state's reductions
member.
* src/state.h (struct reductions): Remove member `number' and
`next'.
* src/LR0.c (first_reduction, last_reduction): Remove.
(save_reductions): Don't link the new reductions, store them in
this_state.
* src/lalr.c (set_state_table): No need to attach reductions to
states, it's already done.
* src/output.c (output_actions): No longer free the shifts, then
the reductions, then the states: free all the states and their
members.
2001-12-10 09:06:48 +00:00
Akim Demaille
f693ad146e One structure for states is enough, even though theoretically
there are LR(0) states and LALR(1) states.
* src/lalr.h (state_t): Remove.
(state_table): Be state_t **, not state_t *.
* src/state.h (core, CORE_ALLOC): Rename as...
(state_t, STATE_ALLOC): this.
Add the LALR(1) members: shifts, reductions, errs.
* src/LR0.c (state_table): Rename as...
(state_hash): this, to avoid name clashes with the global
`state_table'.
* src/print_graph.c, src/LR0.c, src/LR0.h, src/conflicts.c
* src/lalr.c, src/lalr.h, src/output.c, src/print.c: Adjust.
2001-12-10 08:45:22 +00:00
Akim Demaille
d954473dee Pessimize the code to simplify it: from now on, all the states
have a valid SHIFTS, which NSHIFTS is possibly 0.
* src/LR0.c (shifts_new): Be global and move to..
* src/state.c, src/state.h: here.
* src/conflicts, src/lalr.c, src/output.c, src/print.c,
* src/print_graph: Adjust.
2001-12-05 09:34:55 +00:00
Akim Demaille
9839bbe557 * src/state.h (SHIFT_DISABLE, SHIFT_IS_DISABLED): New.
* src/conflicts.c: Use it.
Restore a few missing `if (!SHIFT_IS_DISABLED)' which were
incorrectly ``simplified''.
2001-12-05 09:32:23 +00:00
Akim Demaille
b608206eca * src/state.h (SHIFT_SYMBOL): New.
* src/conflicts.c: Use it to deobfuscate.
2001-12-05 09:31:46 +00:00
Akim Demaille
aa2aab3c16 * src/state.h (SHIFT_IS_ERROR, SHIFT_IS_GOTO, SHIFT_IS_SHIFT): New.
* src/lalr.c: Use them.
2001-12-05 09:30:00 +00:00
Akim Demaille
f59c437a25 * src/state.h (CORE_ALLOC, SHIFTS_ALLOC, ERRS_ALLOC)
(REDUCTIONS_ALLOC):  New.
* src/LR0.c, src/conflicts.c: Use them to de-obfuscate memory
allocation.
2001-11-19 10:29:17 +00:00
Akim Demaille
aa7815f5c6 * src: s/Copyright (C)/Copyright/g. 2000-11-07 16:28:47 +00:00
Akim Demaille
b2ca4022ea * src/state.h (nstates, final_state, first_state, first_shift)
(first_reduction): Move their exportation from here...
* src/LR0.h: to here.
Adjust dependencies.
* src/getargs.c (statisticsflag): New variable.
Add support for `--statistics'.
Adjust dependencies.
Remove a lot of now useless `extern' statements in most files.
2000-10-02 08:22:23 +00:00
Akim Demaille
a70083a3ed * src/reader.h: New file.
Propagate its use instead of tedious list of `extern' and
prototypes.
* src/reader.c: Formatting changes, topological sort,
s/register//.
2000-10-02 08:00:34 +00:00
Jesse Thilo
c49a8e71ce Update FSF address. 1999-01-14 14:58:38 +00:00
Richard M. Stallman
d0fb370f66 entered into RCS 1991-12-21 00:17:44 +00:00