62 state_table[sp->
number] = sp;
84 shift_table[sp->
number] = sp;
95 reduction_table[rp->
number] = rp;
102 register short *itemp;
103 register short *item_end;
110 for (itemp =
ritem; itemp < item_end; itemp++)
118 if (length > max) max = length;
130 register int i, j, k;
139 rp = reduction_table[i];
152 rp = reduction_table[i];
155 for (j = 0; j < rp->
nreds; j++)
171 register short *temp_map;
181 for (i = sp->
nshifts - 1; i >= 0; i--)
188 fatal(
"too many gotos");
214 for (i = sp->
nshifts - 1; i >= 0; i--)
216 state2 = sp->
shift[i];
221 k = temp_map[symbol]++;
250 middle = (low +
high) >> 1;
269 register short *edge;
270 register unsigned *rowp;
272 register short **reads;
274 register int stateno;
279 F =
NEW2(nwords,
unsigned);
286 for (i = 0; i <
ngotos; i++)
289 sp = shift_table[stateno];
295 for (j = 0; j < k; j++)
307 edge[nedges++] =
map_goto(stateno, symbol);
312 reads[i] = rp =
NEW2(nedges + 1,
short);
314 for (j = 0; j < nedges; j++)
328 for (i = 0; i <
ngotos; i++)
345 register short *rulep;
352 register int stateno;
353 register int symbol1;
354 register int symbol2;
355 register short *shortp;
356 register short *edge;
357 register short *states;
358 register short **new_includes;
364 for (i = 0; i <
ngotos; i++)
370 for (rulep =
derives[symbol1]; *rulep >= 0; rulep++)
376 for (rp =
ritem +
rrhs[*rulep]; *rp >= 0; rp++)
379 sp = shift_table[stateno];
382 for (j = 0; j < k; j++)
384 stateno = sp->
shift[j];
388 states[length++] = stateno;
401 stateno = states[--length];
402 edge[nedges++] =
map_goto(stateno, *rp);
403 if (
nullable[*rp] && length > 0) done = 0;
411 for (j = 0; j < nedges; j++)
419 for (i = 0; i <
ngotos; i++)
433 int stateno, ruleno, gotono;
442 while (!found && i < k)
452 sp->
next = lookback[i];
464 register short **new_R;
465 register short **temp_R;
466 register short *nedges;
471 nedges =
NEW2(n,
short);
473 for (i = 0; i < n; i++)
483 new_R =
NEW2(n,
short *);
484 temp_R =
NEW2(n,
short *);
486 for (i = 0; i < n; i++)
491 sp =
NEW2(k + 1,
short);
500 for (i = 0; i < n; i++)
506 *temp_R[*sp++]++ = i;
526 register unsigned *fp1, *fp2, *fp3;
528 register unsigned *rowp;
532 for (i = 0; i < n; i++)
535 for (sp = lookback[i]; sp; sp = sp->
next)
538 fp2 =
F + tokensetsize * sp->
value;
545 for (i = 0; i < n; i++)
546 for (sp = lookback[i]; sp; sp =
next)
569 for (i = 0; i <
ngotos; i++)
572 for (i = 0; i <
ngotos; i++)
574 if (
INDEX[i] == 0 &&
R[i])
587 register unsigned *fp1;
588 register unsigned *fp2;
589 register unsigned *fp3;
605 while ((j = *rp++) >= 0)
621 if (
INDEX[i] == height)
reductions ** reduction_table
add_lookback_edge(int stateno, int ruleno, int gotono)
int ntokens
The number of tokens (terminals) in the grammar.
done(int k)
Shutdown function.
int map_goto(int state, int symbol)
static shorts ** lookback
reductions * first_reduction
digraph(short **relation)
int nvars
The number of variables (non-terminals) in the grammar.
int nsyms
The number of symbols (terminals + non-terminals) in the grammar.
short * rrhs
List of right-hand sides of all rules.
short * ritem
Representation of all productions (and items)
short ** derives
List of rules that derive each non-terminal.