]> git.saurik.com Git - bison.git/blame - src/tables.c
Instead of attaching lookaheads and duplicating the rules being
[bison.git] / src / tables.c
CommitLineData
c6f1a33c
AD
1/* Output the generated parsing program for bison,
2 Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002
3 Free Software Foundation, Inc.
4
5 This file is part of Bison, the GNU Compiler Compiler.
6
7 Bison is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 Bison is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Bison; see the file COPYING. If not, write to the Free
19 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
21
22
23/* The parser tables consist of these tables.
24
25 YYTRANSLATE = vector mapping yylex's token numbers into bison's
26 token numbers.
27
28 YYTNAME = vector of string-names indexed by bison token number.
29
30 YYTOKNUM = vector of yylex token numbers corresponding to entries
31 in YYTNAME.
32
33 YYRLINE = vector of line-numbers of all rules. For yydebug
34 printouts.
35
36 YYRHS = vector of items of all rules. This is exactly what RITEMS
37 contains. For yydebug and for semantic parser.
38
39 YYPRHS[R] = index in YYRHS of first item for rule R.
40
41 YYR1[R] = symbol number of symbol that rule R derives.
42
43 YYR2[R] = number of symbols composing right hand side of rule R.
44
45 YYSTOS[S] = the symbol number of the symbol that leads to state S.
46
47 YYDEFACT[S] = default rule to reduce with in state s, when YYTABLE
48 doesn't specify something else to do. Zero means the default is an
49 error.
50
51 YYDEFGOTO[I] = default state to go to after a reduction of a rule
52 that generates variable NTOKENS + I, except when YYTABLE specifies
53 something else to do.
54
55 YYPACT[S] = index in YYTABLE of the portion describing state S.
56 The lookahead token's type is used to index that portion to find
57 out what to do.
58
59 If the value in YYTABLE is positive, we shift the token and go to
60 that state.
61
62 If the value is negative, it is minus a rule number to reduce by.
63
64 If the value is zero, the default action from YYDEFACT[S] is used.
65
66 YYPGOTO[I] = the index in YYTABLE of the portion describing what to
67 do after reducing a rule that derives variable I + NTOKENS. This
68 portion is indexed by the parser state number, S, as of before the
69 text for this nonterminal was read. The value from YYTABLE is the
70 state to go to if the corresponding value in YYCHECK is S.
71
72 YYTABLE = a vector filled with portions for different uses, found
73 via YYPACT and YYPGOTO.
74
75 YYCHECK = a vector indexed in parallel with YYTABLE. It indicates,
76 in a roundabout way, the bounds of the portion you are trying to
77 examine.
78
79 Suppose that the portion of YYTABLE starts at index P and the index
80 to be examined within the portion is I. Then if YYCHECK[P+I] != I,
81 I is outside the bounds of what is actually allocated, and the
82 default (from YYDEFACT or YYDEFGOTO) should be used. Otherwise,
83 YYTABLE[P+I] should be used.
84
85 YYFINAL = the state number of the termination state. YYFLAG = most
86 negative short int. Used to flag ?? */
87
88#include "system.h"
89#include "bitsetv.h"
90#include "quotearg.h"
91#include "getargs.h"
92#include "files.h"
93#include "gram.h"
94#include "complain.h"
95#include "lalr.h"
96#include "reader.h"
97#include "symtab.h"
98#include "conflicts.h"
99#include "tables.h"
100
101/* Several tables will be indexed both by state and nonterminal
102 numbers. We call `vector' such a thing (= either a state or a
103 symbol number.
104
105 Of course vector_number_t ought to be wide enough to contain
106 state_number_t and symbol_number_t. */
107typedef short vector_number_t;
108#define VECTOR_NUMBER_MAX ((vector_number_t) SHRT_MAX)
109#define VECTOR_NUMBER_MIN ((vector_number_t) SHRT_MIN)
110#define state_number_to_vector_number(State) \
111 ((vector_number_t) State)
112#define symbol_number_to_vector_number(Symbol) \
113 ((vector_number_t) (state_number_as_int (nstates) + Symbol - ntokens))
114
115int nvectors;
116
117
118/* FROMS and TOS are indexed by vector_number_t.
119
120 If VECTOR is a nonterminal, (FROMS[VECTOR], TOS[VECTOR]) form an
121 array of state numbers of the non defaulted GOTO on VECTOR.
122
123 If VECTOR is a state, TOS[VECTOR] is the array of actions to do on
124 the (array of) symbols FROMS[VECTOR].
125
126 In both cases, TALLY[VECTOR] is the size of the arrays
127 FROMS[VECTOR], TOS[VECTOR]; and WIDTH[VECTOR] =
128 (FROMS[VECTOR][SIZE] - FROMS[VECTOR][0] + 1) where SIZE =
129 TALLY[VECTOR].
130
131 FROMS therefore contains symbol_number_t and action_number_t,
132 TOS state_number_t and action_number_t,
133 TALLY sizes,
134 WIDTH differences of FROMS.
135
136 Let base_t be the type of FROMS, TOS, and WIDTH. */
137#define BASE_MAX ((base_t) INT_MAX)
138#define BASE_MIN ((base_t) INT_MIN)
139
140static base_t **froms = NULL;
141static base_t **tos = NULL;
142static unsigned int **conflict_tos = NULL;
143static short *tally = NULL;
144static base_t *width = NULL;
145
146
147/* For a given state, N = ACTROW[SYMBOL]:
148
149 If N = 0, stands for `run the default action'.
150 If N = MIN, stands for `raise a parse error'.
151 If N > 0, stands for `shift SYMBOL and go to n'.
152 If N < 0, stands for `reduce -N'. */
153typedef short action_t;
154#define ACTION_MAX ((action_t) SHRT_MAX)
155#define ACTION_MIN ((action_t) SHRT_MIN)
156
157static action_t *actrow = NULL;
158
159/* FROMS and TOS are reordered to be compressed. ORDER[VECTOR] is the
160 new vector number of VECTOR. We skip `empty' vectors (i.e.,
161 TALLY[VECTOR] = 0), and call these `entries'. */
162static vector_number_t *order = NULL;
163static int nentries;
164
165base_t *base = NULL;
166/* A distinguished value of BASE, negative infinite. During the
167 computation equals to BASE_MIN, later mapped to BASE_NINF to
168 keep parser tables small. */
169base_t base_ninf = 0;
170static base_t *pos = NULL;
171
172static unsigned int *conflrow = NULL;
173unsigned int *conflict_table = NULL;
174unsigned int *conflict_list = NULL;
175int conflict_list_cnt;
176static int conflict_list_free;
177
178/* TABLE_SIZE is the allocated size of both TABLE and CHECK. We start
179 with more or less the original hard-coded value (which was
180 SHRT_MAX). */
181static size_t table_size = 32768;
182base_t *table = NULL;
183base_t *check = NULL;
184/* The value used in TABLE to denote explicit parse errors
185 (%nonassoc), a negative infinite. First defaults to ACTION_MIN,
186 but in order to keep small tables, renumbered as TABLE_ERROR, which
187 is the smallest (non error) value minus 1. */
188base_t table_ninf = 0;
189static int lowzero;
190int high;
191
192state_number_t *yydefgoto;
193rule_number_t *yydefact;
194
195/*----------------------------------------------------------------.
196| If TABLE (and CHECK) appear to be small to be addressed at |
197| DESIRED, grow them. Note that TABLE[DESIRED] is to be used, so |
198| the desired size is at least DESIRED + 1. |
199`----------------------------------------------------------------*/
200
201static void
202table_grow (size_t desired)
203{
204 size_t old_size = table_size;
205
206 while (table_size <= desired)
207 table_size *= 2;
208
209 if (trace_flag & trace_resource)
210 fprintf (stderr, "growing table and check from: %d to %d\n",
211 old_size, table_size);
212
213 table = XREALLOC (table, base_t, table_size);
214 check = XREALLOC (check, base_t, table_size);
215 if (glr_parser)
216 conflict_table = XREALLOC (conflict_table, unsigned int, table_size);
217
218 for (/* Nothing. */; old_size < table_size; ++old_size)
219 {
220 table[old_size] = 0;
221 check[old_size] = -1;
222 }
223}
224
225
226
227
228/*-------------------------------------------------------------------.
229| For GLR parsers, for each conflicted token in STATE, as indicated |
230| by non-zero entries in CONFLROW, create a list of possible |
231| reductions that are alternatives to the shift or reduction |
232| currently recorded for that token in STATE. Store the alternative |
233| reductions followed by a 0 in CONFLICT_LIST, updating |
234| CONFLICT_LIST_CNT, and storing an index to the start of the list |
235| back into CONFLROW. |
236`-------------------------------------------------------------------*/
237
238static void
239conflict_row (state_t *state)
240{
241 int i, j;
cd08e51e 242 reductions_t *reds = state->reductions;
c6f1a33c
AD
243
244 if (! glr_parser)
245 return;
246
247 for (j = 0; j < ntokens; j += 1)
248 if (conflrow[j])
249 {
250 conflrow[j] = conflict_list_cnt;
251
252 /* Find all reductions for token J, and record all that do not
253 match ACTROW[J]. */
cd08e51e
AD
254 for (i = 0; i < reds->num; i += 1)
255 if (bitset_test (reds->lookaheads[i], j)
c6f1a33c 256 && (actrow[j]
cd08e51e 257 != rule_number_as_item_number (reds->rules[i]->number)))
c6f1a33c
AD
258 {
259 assert (conflict_list_free > 0);
cd08e51e 260 conflict_list[conflict_list_cnt] = reds->rules[i]->number + 1;
c6f1a33c
AD
261 conflict_list_cnt += 1;
262 conflict_list_free -= 1;
263 }
264
265 /* Leave a 0 at the end. */
266 assert (conflict_list_free > 0);
267 conflict_list_cnt += 1;
268 conflict_list_free -= 1;
269 }
270}
271
272
273/*------------------------------------------------------------------.
274| Decide what to do for each type of token if seen as the lookahead |
275| token in specified state. The value returned is used as the |
276| default action (yydefact) for the state. In addition, ACTROW is |
277| filled with what to do for each kind of token, index by symbol |
278| number, with zero meaning do the default action. The value |
279| ACTION_MIN, a very negative number, means this situation is an |
280| error. The parser recognizes this value specially. |
281| |
282| This is where conflicts are resolved. The loop over lookahead |
283| rules considered lower-numbered rules last, and the last rule |
284| considered that likes a token gets to handle it. |
285| |
286| For GLR parsers, also sets CONFLROW[SYM] to an index into |
287| CONFLICT_LIST iff there is an unresolved conflict (s/r or r/r) |
288| with symbol SYM. The default reduction is not used for a symbol |
289| that has any such conflicts. |
290`------------------------------------------------------------------*/
291
292static rule_t *
293action_row (state_t *state)
294{
295 int i;
296 rule_t *default_rule = NULL;
297 reductions_t *redp = state->reductions;
298 transitions_t *transitions = state->transitions;
299 errs_t *errp = state->errs;
300 /* Set to nonzero to inhibit having any default reduction. */
301 int nodefault = 0;
302 int conflicted = 0;
303
304 for (i = 0; i < ntokens; i++)
305 actrow[i] = conflrow[i] = 0;
306
cd08e51e 307 if (redp->lookaheads)
c6f1a33c
AD
308 {
309 int j;
310 bitset_iterator biter;
311 /* loop over all the rules available here which require
cd08e51e
AD
312 lookahead (in reverse order to give precedence to the first
313 rule) */
314 for (i = redp->num - 1; i >= 0; --i)
c6f1a33c
AD
315 /* and find each token which the rule finds acceptable
316 to come next */
cd08e51e 317 BITSET_FOR_EACH (biter, redp->lookaheads[i], j, 0)
c6f1a33c
AD
318 {
319 /* and record this rule as the rule to use if that
320 token follows. */
321 if (actrow[j] != 0)
322 conflicted = conflrow[j] = 1;
cd08e51e 323 actrow[j] = rule_number_as_item_number (redp->rules[i]->number);
c6f1a33c
AD
324 }
325 }
326
327 /* Now see which tokens are allowed for shifts in this state. For
328 them, record the shift as the thing to do. So shift is preferred
329 to reduce. */
330 FOR_EACH_SHIFT (transitions, i)
331 {
332 symbol_number_t symbol = TRANSITION_SYMBOL (transitions, i);
333 state_t *shift_state = transitions->states[i];
334
335 if (actrow[symbol] != 0)
336 conflicted = conflrow[symbol] = 1;
337 actrow[symbol] = state_number_as_int (shift_state->number);
338
339 /* Do not use any default reduction if there is a shift for
340 error */
341 if (symbol == errtoken->number)
342 nodefault = 1;
343 }
344
345 /* See which tokens are an explicit error in this state (due to
346 %nonassoc). For them, record ACTION_MIN as the action. */
347 for (i = 0; i < errp->num; i++)
348 {
349 symbol_t *symbol = errp->symbols[i];
350 actrow[symbol->number] = ACTION_MIN;
351 }
352
353 /* Now find the most common reduction and make it the default action
354 for this state. */
355
356 if (redp->num >= 1 && !nodefault)
357 {
358 if (state->consistent)
359 default_rule = redp->rules[0];
360 else
361 {
362 int max = 0;
cd08e51e 363 for (i = 0; i < redp->num; i++)
c6f1a33c
AD
364 {
365 int count = 0;
cd08e51e 366 rule_t *rule = redp->rules[i];
c6f1a33c
AD
367 symbol_number_t j;
368
369 for (j = 0; j < ntokens; j++)
370 if (actrow[j] == rule_number_as_item_number (rule->number))
371 count++;
372
373 if (count > max)
374 {
375 max = count;
376 default_rule = rule;
377 }
378 }
379
380 /* GLR parsers need space for conflict lists, so we can't
381 default conflicted entries. For non-conflicted entries
382 or as long as we are not building a GLR parser,
383 actions that match the default are replaced with zero,
384 which means "use the default". */
385
386 if (max > 0)
387 {
388 int j;
389 for (j = 0; j < ntokens; j++)
390 if (actrow[j] == rule_number_as_item_number (default_rule->number)
391 && ! (glr_parser && conflrow[j]))
392 actrow[j] = 0;
393 }
394 }
395 }
396
397 /* Find the rules which are reduced. */
398 if (!glr_parser)
399 {
400 for (i = 0; i < ntokens; i++)
401 if (actrow[i] < 0 && actrow[i] != ACTION_MIN)
402 rules[item_number_as_rule_number (actrow[i])].useful = TRUE;
403 if (default_rule)
404 default_rule->useful = TRUE;
405 }
406
407 /* If have no default rule, the default is an error.
408 So replace any action which says "error" with "use default". */
409
410 if (!default_rule)
411 for (i = 0; i < ntokens; i++)
412 if (actrow[i] == ACTION_MIN)
413 actrow[i] = 0;
414
415 if (conflicted)
416 conflict_row (state);
417
418 return default_rule;
419}
420
421
422/*--------------------------------------------.
423| Set FROMS, TOS, TALLY and WIDTH for STATE. |
424`--------------------------------------------*/
425
426static void
427save_row (state_number_t state)
428{
429 symbol_number_t i;
430 int count;
431 base_t *sp = NULL;
432 base_t *sp1 = NULL;
433 base_t *sp2 = NULL;
434 unsigned int *sp3 = NULL;
435
436 /* Number of non default actions in STATE. */
437 count = 0;
438 for (i = 0; i < ntokens; i++)
439 if (actrow[i] != 0)
440 count++;
441
442 if (count == 0)
443 return;
444
445 /* Allocate non defaulted actions. */
446 froms[state] = sp1 = sp = XCALLOC (base_t, count);
447 tos[state] = sp2 = XCALLOC (base_t, count);
448 if (glr_parser)
449 conflict_tos[state] = sp3 = XCALLOC (unsigned int, count);
450 else
451 conflict_tos[state] = NULL;
452
453 /* Store non defaulted actions. */
454 for (i = 0; i < ntokens; i++)
455 if (actrow[i] != 0)
456 {
457 *sp1++ = i;
458 *sp2++ = actrow[i];
459 if (glr_parser)
460 *sp3++ = conflrow[i];
461 }
462
463 tally[state] = count;
464 width[state] = sp1[-1] - sp[0] + 1;
465}
466
467
468/*------------------------------------------------------------------.
469| Figure out the actions for the specified state, indexed by |
470| lookahead token type. |
471| |
472| The YYDEFACT table is output now. The detailed info is saved for |
473| putting into YYTABLE later. |
474`------------------------------------------------------------------*/
475
476static void
477token_actions (void)
478{
479 state_number_t i;
480 rule_number_t r;
481 int nconflict = conflicts_total_count ();
482
483 yydefact = XCALLOC (rule_number_t, nstates);
484
485 actrow = XCALLOC (action_t, ntokens);
486 conflrow = XCALLOC (unsigned int, ntokens);
487
488 /* Now that the parser was computed, we can find which rules are
489 really reduced, and which are not because of SR or RR conflicts.
490 */
491 if (!glr_parser)
492 for (r = 0; r < nrules; ++r)
493 rules[r].useful = FALSE;
494
495 if (glr_parser)
496 {
497 conflict_list = XCALLOC (unsigned int, 1 + 2 * nconflict);
498 conflict_list_free = 2 * nconflict;
499 conflict_list_cnt = 1;
500 }
501 else
502 conflict_list_free = conflict_list_cnt = 0;
503
504 for (i = 0; i < nstates; ++i)
505 {
506 rule_t *default_rule = action_row (states[i]);
507 yydefact[i] = default_rule ? default_rule->number + 1 : 0;
508 save_row (i);
509 }
510
511 if (!glr_parser)
512 for (r = 0; r < nrules ; ++r)
513 if (!rules[r].useful)
514 {
515 LOCATION_PRINT (stderr, rules[r].location);
516 fprintf (stderr, ": %s: %s: ",
517 _("warning"), _("rule never reduced because of conflicts"));
518 rule_print (&rules[r], stderr);
519 }
520
521 free (actrow);
522 free (conflrow);
523}
524
525
526/*------------------------------------------------------------------.
527| Compute FROMS[VECTOR], TOS[VECTOR], TALLY[VECTOR], WIDTH[VECTOR], |
528| i.e., the information related to non defaulted GOTO on the nterm |
529| SYMBOL. |
530| |
531| DEFAULT_STATE is the principal destination on SYMBOL, i.e., the |
532| default GOTO destination on SYMBOL. |
533`------------------------------------------------------------------*/
534
535static void
536save_column (symbol_number_t symbol, state_number_t default_state)
537{
538 int i;
539 base_t *sp;
540 base_t *sp1;
541 base_t *sp2;
542 int count;
543 vector_number_t symno = symbol_number_to_vector_number (symbol);
544
545 goto_number_t begin = goto_map[symbol];
546 goto_number_t end = goto_map[symbol + 1];
547
548 /* Number of non default GOTO. */
549 count = 0;
550 for (i = begin; i < end; i++)
551 if (to_state[i] != default_state)
552 count++;
553
554 if (count == 0)
555 return;
556
557 /* Allocate room for non defaulted gotos. */
558 froms[symno] = sp1 = sp = XCALLOC (base_t, count);
559 tos[symno] = sp2 = XCALLOC (base_t, count);
560
561 /* Store the state numbers of the non defaulted gotos. */
562 for (i = begin; i < end; i++)
563 if (to_state[i] != default_state)
564 {
565 *sp1++ = from_state[i];
566 *sp2++ = to_state[i];
567 }
568
569 tally[symno] = count;
570 width[symno] = sp1[-1] - sp[0] + 1;
571}
572
573
574/*----------------------------------------------------------------.
575| Return `the' most common destination GOTO on SYMBOL (a nterm). |
576`----------------------------------------------------------------*/
577
578static state_number_t
579default_goto (symbol_number_t symbol, short state_count[])
580{
581 state_number_t s;
582 int i;
583 goto_number_t m = goto_map[symbol];
584 goto_number_t n = goto_map[symbol + 1];
585 state_number_t default_state = (state_number_t) -1;
586 int max = 0;
587
588 if (m == n)
589 return (state_number_t) -1;
590
591 for (s = 0; s < nstates; s++)
592 state_count[s] = 0;
593
594 for (i = m; i < n; i++)
595 state_count[to_state[i]]++;
596
597 for (s = 0; s < nstates; s++)
598 if (state_count[s] > max)
599 {
600 max = state_count[s];
601 default_state = s;
602 }
603
604 return default_state;
605}
606
607
608/*-------------------------------------------------------------------.
609| Figure out what to do after reducing with each rule, depending on |
610| the saved state from before the beginning of parsing the data that |
611| matched this rule. |
612| |
613| The YYDEFGOTO table is output now. The detailed info is saved for |
614| putting into YYTABLE later. |
615`-------------------------------------------------------------------*/
616
617static void
618goto_actions (void)
619{
620 symbol_number_t i;
621 short *state_count = XCALLOC (short, nstates);
622 yydefgoto = XMALLOC (state_number_t, nvars);
623
624 /* For a given nterm I, STATE_COUNT[S] is the number of times there
625 is a GOTO to S on I. */
626 for (i = ntokens; i < nsyms; ++i)
627 {
628 state_number_t default_state = default_goto (i, state_count);
629 save_column (i, default_state);
630 yydefgoto[i - ntokens] = default_state;
631 }
632 free (state_count);
633}
634
635
636/*------------------------------------------------------------------.
637| Compute ORDER, a reordering of vectors, in order to decide how to |
638| pack the actions and gotos information into yytable. |
639`------------------------------------------------------------------*/
640
641static void
642sort_actions (void)
643{
644 int i;
645
646 nentries = 0;
647
648 for (i = 0; i < nvectors; i++)
649 if (tally[i] > 0)
650 {
651 int k;
652 int t = tally[i];
653 int w = width[i];
654 int j = nentries - 1;
655
656 while (j >= 0 && (width[order[j]] < w))
657 j--;
658
659 while (j >= 0 && (width[order[j]] == w) && (tally[order[j]] < t))
660 j--;
661
662 for (k = nentries - 1; k > j; k--)
663 order[k + 1] = order[k];
664
665 order[j + 1] = i;
666 nentries++;
667 }
668}
669
670
671/* If VECTOR is a state which actions (reflected by FROMS, TOS, TALLY
672 and WIDTH of VECTOR) are common to a previous state, return this
673 state number.
674
675 In any other case, return -1. */
676
677static state_number_t
678matching_state (vector_number_t vector)
679{
680 vector_number_t i = order[vector];
681 int t;
682 int w;
683 int prev;
684
685 /* If VECTOR is a nterm, return -1. */
686 if (i >= (int) nstates)
687 return -1;
688
689 t = tally[i];
690 w = width[i];
691
692 for (prev = vector - 1; prev >= 0; prev--)
693 {
694 vector_number_t j = order[prev];
695 int k;
696 int match = 1;
697
698 /* Given how ORDER was computed, if the WIDTH or TALLY is
699 different, there cannot be a matching state. */
700 if (width[j] != w || tally[j] != t)
701 return -1;
702
703 for (k = 0; match && k < t; k++)
704 if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k])
705 match = 0;
706
707 if (match)
708 return j;
709 }
710
711 return -1;
712}
713
714
715static base_t
716pack_vector (vector_number_t vector)
717{
718 vector_number_t i = order[vector];
719 int j;
720 int t = tally[i];
721 int loc = 0;
722 base_t *from = froms[i];
723 base_t *to = tos[i];
724 unsigned int *conflict_to = conflict_tos[i];
725
726 assert (t);
727
728 for (j = lowzero - from[0]; j < (int) table_size; j++)
729 {
730 int k;
731 int ok = 1;
732
733 for (k = 0; ok && k < t; k++)
734 {
735 loc = j + state_number_as_int (from[k]);
3325ddc4 736 if (loc >= (int) table_size)
c6f1a33c
AD
737 table_grow (loc);
738
739 if (table[loc] != 0)
740 ok = 0;
741 }
742
743 for (k = 0; ok && k < vector; k++)
744 if (pos[k] == j)
745 ok = 0;
746
747 if (ok)
748 {
749 for (k = 0; k < t; k++)
750 {
751 loc = j + from[k];
752 table[loc] = to[k];
753 if (glr_parser && conflict_to != NULL)
754 conflict_table[loc] = conflict_to[k];
755 check[loc] = from[k];
756 }
757
758 while (table[lowzero] != 0)
759 lowzero++;
760
761 if (loc > high)
762 high = loc;
763
764 if (j < BASE_MIN || BASE_MAX < j)
765 fatal ("base_t too small to hold %d\n", j);
766 return j;
767 }
768 }
769#define pack_vector_succeeded 0
770 assert (pack_vector_succeeded);
771 return 0;
772}
773
774
775/*-------------------------------------------------------------.
776| Remap the negative infinite in TAB from NINF to the greatest |
777| possible smallest value. Return it. |
778| |
779| In most case this allows us to use shorts instead of ints in |
780| parsers. |
781`-------------------------------------------------------------*/
782
783static base_t
784table_ninf_remap (base_t tab[], size_t size, base_t ninf)
785{
786 base_t res = 0;
787 size_t i;
788
789 for (i = 0; i < size; i++)
790 if (tab[i] < res && tab[i] != ninf)
791 res = base[i];
792
793 --res;
794
795 for (i = 0; i < size; i++)
796 if (tab[i] == ninf)
797 tab[i] = res;
798
799 return res;
800}
801
802static void
803pack_table (void)
804{
805 int i;
806
807 base = XCALLOC (base_t, nvectors);
808 pos = XCALLOC (base_t, nentries);
809 table = XCALLOC (base_t, table_size);
810 if (glr_parser)
811 conflict_table = XCALLOC (unsigned int, table_size);
812 check = XCALLOC (base_t, table_size);
813
814 lowzero = 0;
815 high = 0;
816
817 for (i = 0; i < nvectors; i++)
818 base[i] = BASE_MIN;
819
820 for (i = 0; i < (int) table_size; i++)
821 check[i] = -1;
822
823 for (i = 0; i < nentries; i++)
824 {
825 state_number_t state = matching_state (i);
826 base_t place;
827
828 if (state < 0)
829 /* A new set of state actions, or a nonterminal. */
830 place = pack_vector (i);
831 else
832 /* Action of I were already coded for STATE. */
833 place = base[state];
834
835 pos[i] = place;
836 base[order[i]] = place;
837 }
838
839 /* Use the greatest possible negative infinites. */
840 base_ninf = table_ninf_remap (base, nvectors, BASE_MIN);
841 table_ninf = table_ninf_remap (table, high + 1, ACTION_MIN);
842
c6f1a33c
AD
843 free (pos);
844}
845
846\f
847
848/*-----------------------------------------------------------------.
849| Compute and output yydefact, yydefgoto, yypact, yypgoto, yytable |
850| and yycheck. |
851`-----------------------------------------------------------------*/
852
853void
854tables_generate (void)
855{
3325ddc4
AD
856 int i;
857
c6f1a33c
AD
858 /* That's a poor way to make sure the sizes are properly corelated,
859 in particular the signedness is not taking into account, but it's
860 not useless. */
861 assert (sizeof (nvectors) >= sizeof (nstates));
862 assert (sizeof (nvectors) >= sizeof (nvars));
863
864 nvectors = state_number_as_int (nstates) + nvars;
865
866 froms = XCALLOC (base_t *, nvectors);
867 tos = XCALLOC (base_t *, nvectors);
868 conflict_tos = XCALLOC (unsigned int *, nvectors);
869 tally = XCALLOC (short, nvectors);
870 width = XCALLOC (base_t, nvectors);
871
872 token_actions ();
c6f1a33c
AD
873
874 goto_actions ();
875 XFREE (goto_map + ntokens);
876 XFREE (from_state);
877 XFREE (to_state);
878
879 order = XCALLOC (vector_number_t, nvectors);
880 sort_actions ();
881 pack_table ();
882 free (order);
883
884 free (tally);
885 free (width);
3325ddc4
AD
886
887 for (i = 0; i < nvectors; i++)
888 {
889 XFREE (froms[i]);
890 XFREE (tos[i]);
891 XFREE (conflict_tos[i]);
892 }
893
894 free (froms);
895 free (tos);
896 free (conflict_tos);
c6f1a33c
AD
897}
898
899
900/*-------------------------.
901| Free the parser tables. |
902`-------------------------*/
903
904void
905tables_free (void)
906{
907 free (base);
908 free (conflict_table);
909 free (conflict_list);
910 free (table);
911 free (check);
912 free (yydefgoto);
913 free (yydefact);
914}