tables: scope reduction

* src/tables.c (default_goto): Make it easier to understand.
This commit is contained in:
Akim Demaille
2012-12-27 10:52:42 +01:00
parent 0a9042a652
commit 11aef5e95b

View File

@@ -395,7 +395,7 @@ save_row (state_number s)
base_number *sp1 = froms[s] = xnmalloc (count, sizeof *sp1); base_number *sp1 = froms[s] = xnmalloc (count, sizeof *sp1);
base_number *sp2 = tos[s] = xnmalloc (count, sizeof *sp2); base_number *sp2 = tos[s] = xnmalloc (count, sizeof *sp2);
unsigned int *sp3 = conflict_tos[s] = unsigned int *sp3 = conflict_tos[s] =
nondeterministic_parser ? xnmalloc (count, sizeof *sp3) : NULL;; nondeterministic_parser ? xnmalloc (count, sizeof *sp3) : NULL;
/* Store non defaulted actions. */ /* Store non defaulted actions. */
for (i = 0; i < ntokens; i++) for (i = 0; i < ntokens; i++)
@@ -513,37 +513,38 @@ save_column (symbol_number sym, state_number default_state)
} }
/*-------------------------------------------------------------. /*----------------------------------------------------------------.
| Return `the' most common destination GOTO on SYM (a nterm). | | The default state for SYM: the state which is 'the' most common |
`-------------------------------------------------------------*/ | GOTO destination on SYM (an nterm). |
`----------------------------------------------------------------*/
static state_number static state_number
default_goto (symbol_number sym, size_t state_count[]) default_goto (symbol_number sym, size_t state_count[])
{ {
state_number s; goto_number begin = goto_map[sym - ntokens];
goto_number i; goto_number end = goto_map[sym - ntokens + 1];
goto_number m = goto_map[sym - ntokens]; state_number res = -1;
goto_number n = goto_map[sym - ntokens + 1];
state_number default_state = -1;
size_t max = 0;
if (m == n) if (begin != end)
return -1; {
size_t max = 0;
goto_number i;
state_number s;
for (s = 0; s < nstates; s++) for (s = 0; s < nstates; s++)
state_count[s] = 0; state_count[s] = 0;
for (i = m; i < n; i++) for (i = begin; i < end; i++)
state_count[to_state[i]]++; state_count[to_state[i]]++;
for (s = 0; s < nstates; s++) for (s = 0; s < nstates; s++)
if (state_count[s] > max) if (max < state_count[s])
{ {
max = state_count[s]; max = state_count[s];
default_state = s; res = s;
} }
}
return default_state; return res;
} }