Finish implementing %define lr.type.

Its value can be "LALR", "IELR", or "canonical LR".
* lib/timevar.def (TV_IELR_PHASE1): New var.
(TV_IELR_PHASE2): New var.
(TV_IELR_PHASE3): New var.
(TV_IELR_PHASE4): New var.
* src/local.mk (src_bison_SOURCES): Add AnnotationList.c,
AnnotationList.h, InadequacyList.c, InadequacyList.h, Sbitset.c,
Sbitset.h, ielr.c, and ielr.h.
* src/getargs.h, src/getargs.c (enum trace, trace_args,
trace_types): Add trace_ielr.
* src/lalr.h, src/lalr.c (ngotos): Export it.
(F): Rename to...
(goto_follows): ... this, update all uses, and export it.
(set_goto_map): Export it.
(map_goto): Export it.
(compute_lookahead_tokens): Don't free goto_follows yet.  Now
handled in ielr.
(initialize_LA): Export it.  Move lookback allocation to...
(lalr): ... here because, for canonical LR, initialize_LA must
be invoked but lookback and much of the rest of LALR isn't
needed.
* main.c (main): Instead of lalr, invoke ielr, which invokes
lalr.
* src/reader.c (reader): Default lr.type to "LALR".
Default lr.default_rules to "accepting" if lr.type is "canonical
LR".  Leave the default as "all" otherwise.
Check for a valid lr.type value.
* src/state.h, src/state.c (struct state_list): Add state_list
member.
(state_new): Initialize state_list member to NULL.
(state_new_isocore): New function, exported.
* tests/existing.at (AT_TEST_EXISTING_GRAMMAR): New macro that
exercises all values of lr.type.
(GNU AWK Grammar): Rename test group to...
(GNU AWK 3.1.0 Grammar): ... this, and extend to use
AT_TEST_EXISTING_GRAMMAR.
(GNU Cim Grammar): Extend to use AT_TEST_EXISTING_GRAMMAR.
(GNU pic Grammar): Rename test group to...
(GNU pic (Groff 1.18.1) Grammar): ... this, and extend to use
AT_TEST_EXISTING_GRAMMAR.
* tests/reduce.at (AT_TEST_LR_TYPE): New macro that exercises
all values of lr.type.
(Single State Split): New test groups using AT_TEST_LR_TYPE.
(Lane Split): Likewise.
(Complex Lane Split): Likewise.
(Split During Added Lookahead Propagation): Likewise.
This commit is contained in:
Joel E. Denny
2009-04-21 03:40:16 -04:00
parent 7fe11bb55c
commit db34f79889
13 changed files with 2903 additions and 94 deletions

View File

@@ -1,7 +1,7 @@
/* Compute lookahead criteria for bison,
Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004, 2006, 2007 Free Software
Foundation, Inc.
Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004, 2006, 2007, 2009
Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -37,13 +37,29 @@
which rules need lookahead in each state, and which lookahead
tokens they accept.
Builds:
- #goto_map
- #from_state
- #to_state
Also builds:
- #goto_map
- #from_state
- #to_state
- #goto_follows
*/
void lalr (void);
/**
* Set #nLA and allocate all reduction lookahead sets. Normally invoked by
* #lalr.
*/
void initialize_LA (void);
/**
* Build only:
* - #goto_map
* - #from_state
* - #to_state
* Normally invoked by #lalr.
*/
void set_goto_map (void);
/**
* Update state numbers recorded in #goto_map, #from_state, and #to_state such
* that:
@@ -62,7 +78,6 @@ void lalr_update_state_numbers (state_number old_to_new[],
Can be performed once the action tables are computed. */
void lalr_free (void);
typedef size_t goto_number;
# define GOTO_NUMBER_MAXIMUM ((goto_number) -1)
@@ -73,11 +88,20 @@ typedef size_t goto_number;
TO_STATE of the first of them. */
extern goto_number *goto_map;
/** State number which a transition leads from. */
/** The size of #from_state and #to_state. */
extern goto_number ngotos;
/** State number which a transition leads from. */
extern state_number *from_state;
/** State number it leads to. */
extern state_number *to_state;
/** Map a state/symbol pair into its numeric representation. */
goto_number map_goto (state_number s0, symbol_number sym);
/* goto_follows[i] is the set of tokens following goto i. */
extern bitsetv goto_follows;
#endif /* !LALR_H_ */