From 90b4416b5b154710407d10d6ed995c83a889a9df Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 19 Nov 2001 10:07:44 +0000 Subject: [PATCH 1/1] * src/lalr.h (reduction_table, shift_table): Removed arrays, which contents is now members of... (state_t): this structure. * src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c: Adjust. --- ChangeLog | 9 +++++++ src/conflicts.c | 8 +++--- src/lalr.c | 65 ++++++++++++++++++----------------------------- src/lalr.h | 6 +++-- src/output.c | 8 ++---- src/print.c | 4 +-- src/print_graph.c | 4 +-- 7 files changed, 48 insertions(+), 56 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7ca1de7e..09d1b416 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2001-11-19 Akim Demaille + + * src/lalr.h (reduction_table, shift_table): Removed arrays, which + contents is now members of... + (state_t): this structure. + * src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c: + Adjust. + + 2001-11-19 Akim Demaille * src/lalr.h (state_t): New. diff --git a/src/conflicts.c b/src/conflicts.c index b05fd3cc..2f213850 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -60,7 +60,7 @@ flush_shift (int state, int token) shifts *shiftp; int k, i; - shiftp = shift_table[state]; + shiftp = state_table[state].shift_table; if (shiftp) { @@ -197,7 +197,7 @@ set_conflicts (int state) for (i = 0; i < tokensetsize; i++) lookaheadset[i] = 0; - shiftp = shift_table[state]; + shiftp = state_table[state].shift_table; if (shiftp) { k = shiftp->nshifts; @@ -288,7 +288,7 @@ count_sr_conflicts (int state) int src_count = 0; - shiftp = shift_table[state]; + shiftp = state_table[state].shift_table; if (!shiftp) return 0; @@ -533,7 +533,7 @@ print_reductions (FILE *out, int state) for (i = 0; i < tokensetsize; i++) shiftset[i] = 0; - shiftp = shift_table[state]; + shiftp = state_table[state].shift_table; if (shiftp) { k = shiftp->nshifts; diff --git a/src/lalr.c b/src/lalr.c index 4b11caaa..27e04be4 100644 --- a/src/lalr.c +++ b/src/lalr.c @@ -43,8 +43,6 @@ short *LAruleno; unsigned *LA; char *consistent; -shifts **shift_table; -reductions **reduction_table; short *goto_map; short *from_state; short *to_state; @@ -148,39 +146,28 @@ digraph (short **relation) static void set_state_table (void) { - core *sp; - state_table = XCALLOC (state_t, nstates); - for (sp = first_state; sp; sp = sp->next) - { - state_table[sp->number].state = sp; - state_table[sp->number].accessing_symbol = sp->accessing_symbol; - } -} - - -static void -set_shift_table (void) -{ - shifts *sp; - - shift_table = XCALLOC (shifts *, nstates); - - for (sp = first_shift; sp; sp = sp->next) - shift_table[sp->number] = sp; -} - - -static void -set_reduction_table (void) -{ - reductions *rp; - - reduction_table = XCALLOC (reductions *, nstates); - - for (rp = first_reduction; rp; rp = rp->next) - reduction_table[rp->number] = rp; + { + core *sp; + for (sp = first_state; sp; sp = sp->next) + { + state_table[sp->number].state = sp; + state_table[sp->number].accessing_symbol = sp->accessing_symbol; + } + } + + { + shifts *sp; + for (sp = first_shift; sp; sp = sp->next) + state_table[sp->number].shift_table = sp; + } + + { + reductions *rp; + for (rp = first_reduction; rp; rp = rp->next) + state_table[rp->number].reduction_table = rp; + } } @@ -231,8 +218,8 @@ initialize_LA (void) lookaheads[i] = count; - rp = reduction_table[i]; - sp = shift_table[i]; + rp = state_table[i].reduction_table; + sp = state_table[i].shift_table; if (rp && (rp->nreds > 1 || (sp && !ISVAR (state_table[sp->shifts[0]].accessing_symbol)))) @@ -270,7 +257,7 @@ initialize_LA (void) { if (!consistent[i]) { - if ((rp = reduction_table[i])) + if ((rp = state_table[i].reduction_table)) for (j = 0; j < rp->nreds; j++) *np++ = rp->rules[j]; } @@ -408,7 +395,7 @@ initialize_F (void) for (i = 0; i < ngotos; i++) { stateno = to_state[i]; - sp = shift_table[stateno]; + sp = state_table[stateno].shift_table; if (sp) { @@ -580,7 +567,7 @@ build_relations (void) for (rp = ritem + rrhs[*rulep]; *rp > 0; rp++) { symbol2 = *rp; - sp = shift_table[stateno]; + sp = state_table[stateno].shift_table; k = sp->nshifts; for (j = 0; j < k; j++) @@ -704,8 +691,6 @@ lalr (void) tokensetsize = WORDSIZE (ntokens); set_state_table (); - set_shift_table (); - set_reduction_table (); set_maxrhs (); initialize_LA (); set_goto_map (); diff --git a/src/lalr.h b/src/lalr.h index c803edd2..c3d719fd 100644 --- a/src/lalr.h +++ b/src/lalr.h @@ -82,6 +82,9 @@ typedef struct state_s /* Its accessing symbol. */ short accessing_symbol; + + shifts *shift_table; + reductions *reduction_table; } state_t; /* All the decorated states, indexed by the state number. Warning: @@ -91,8 +94,7 @@ extern state_t *state_table; extern int tokensetsize; extern short *lookaheads; -extern shifts **shift_table; -extern reductions **reduction_table; + diff --git a/src/output.c b/src/output.c index ff8b72c0..4c86b22e 100644 --- a/src/output.c +++ b/src/output.c @@ -338,7 +338,7 @@ action_row (int state) default_rule = 0; nreds = 0; - redp = reduction_table[state]; + redp = state_table[state].reduction_table; if (redp) { @@ -377,7 +377,7 @@ action_row (int state) } } - shiftp = shift_table[state]; + shiftp = state_table[state].shift_table; /* Now see which tokens are allowed for shifts in this state. For them, record the shift as the thing to do. So shift is preferred @@ -552,8 +552,6 @@ free_shifts (void) { shifts *sp, *sptmp; /* JF derefrenced freed ptr */ - XFREE (shift_table); - for (sp = first_shift; sp; sp = sptmp) { sptmp = sp->next; @@ -567,8 +565,6 @@ free_reductions (void) { reductions *rp, *rptmp; /* JF fixed freed ptr */ - XFREE (reduction_table); - for (rp = first_reduction; rp; rp = rptmp) { rptmp = rp->next; diff --git a/src/print.c b/src/print.c index a52d660a..cbc0ceb2 100644 --- a/src/print.c +++ b/src/print.c @@ -102,8 +102,8 @@ print_actions (FILE *out, int state) reductions *redp; int rule; - shiftp = shift_table[state]; - redp = reduction_table[state]; + shiftp = state_table[state].shift_table; + redp = state_table[state].reduction_table; errp = err_table[state]; if (!shiftp && !redp) diff --git a/src/print_graph.c b/src/print_graph.c index a99af9c9..55eb702c 100644 --- a/src/print_graph.c +++ b/src/print_graph.c @@ -104,8 +104,8 @@ print_actions (int state, const char *node_name, struct obstack *node_obstack) static char buff[10]; edge_t edge; - shiftp = shift_table[state]; - redp = reduction_table[state]; + shiftp = state_table[state].shift_table; + redp = state_table[state].reduction_table; errp = err_table[state]; if (!shiftp && !redp) -- 2.45.2