]> git.saurik.com Git - bison.git/blob - src/tables.c
91461b29bfb397b466d69d7fd4e3d7720b2268d5
[bison.git] / src / tables.c
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. */
107 typedef 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
115 int 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
140 static base_t **froms = NULL;
141 static base_t **tos = NULL;
142 static unsigned int **conflict_tos = NULL;
143 static short *tally = NULL;
144 static 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'. */
153 typedef short action_t;
154 #define ACTION_MAX ((action_t) SHRT_MAX)
155 #define ACTION_MIN ((action_t) SHRT_MIN)
156
157 static 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'. */
162 static vector_number_t *order = NULL;
163 static int nentries;
164
165 base_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. */
169 base_t base_ninf = 0;
170 static base_t *pos = NULL;
171
172 static unsigned int *conflrow = NULL;
173 unsigned int *conflict_table = NULL;
174 unsigned int *conflict_list = NULL;
175 int conflict_list_cnt;
176 static 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). */
181 static size_t table_size = 32768;
182 base_t *table = NULL;
183 base_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. */
188 base_t table_ninf = 0;
189 static int lowzero;
190 int high;
191
192 state_number_t *yydefgoto;
193 rule_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
201 static void
202 table_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
238 static void
239 conflict_row (state_t *state)
240 {
241 int i, j;
242
243 if (! glr_parser)
244 return;
245
246 for (j = 0; j < ntokens; j += 1)
247 if (conflrow[j])
248 {
249 conflrow[j] = conflict_list_cnt;
250
251 /* Find all reductions for token J, and record all that do not
252 match ACTROW[J]. */
253 for (i = 0; i < state->nlookaheads; i += 1)
254 if (bitset_test (state->lookaheads[i], j)
255 && (actrow[j]
256 != rule_number_as_item_number (state->lookaheads_rule[i]->number)))
257 {
258 assert (conflict_list_free > 0);
259 conflict_list[conflict_list_cnt]
260 = state->lookaheads_rule[i]->number + 1;
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
292 static rule_t *
293 action_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
307 if (redp->num >= 1)
308 {
309 int j;
310 bitset_iterator biter;
311 /* loop over all the rules available here which require
312 lookahead */
313 for (i = state->nlookaheads - 1; i >= 0; --i)
314 /* and find each token which the rule finds acceptable
315 to come next */
316 BITSET_FOR_EACH (biter, state->lookaheads[i], j, 0)
317 {
318 /* and record this rule as the rule to use if that
319 token follows. */
320 if (actrow[j] != 0)
321 conflicted = conflrow[j] = 1;
322 actrow[j] = rule_number_as_item_number (state->lookaheads_rule[i]->number);
323 }
324 }
325
326 /* Now see which tokens are allowed for shifts in this state. For
327 them, record the shift as the thing to do. So shift is preferred
328 to reduce. */
329 FOR_EACH_SHIFT (transitions, i)
330 {
331 symbol_number_t symbol = TRANSITION_SYMBOL (transitions, i);
332 state_t *shift_state = transitions->states[i];
333
334 if (actrow[symbol] != 0)
335 conflicted = conflrow[symbol] = 1;
336 actrow[symbol] = state_number_as_int (shift_state->number);
337
338 /* Do not use any default reduction if there is a shift for
339 error */
340 if (symbol == errtoken->number)
341 nodefault = 1;
342 }
343
344 /* See which tokens are an explicit error in this state (due to
345 %nonassoc). For them, record ACTION_MIN as the action. */
346 for (i = 0; i < errp->num; i++)
347 {
348 symbol_t *symbol = errp->symbols[i];
349 actrow[symbol->number] = ACTION_MIN;
350 }
351
352 /* Now find the most common reduction and make it the default action
353 for this state. */
354
355 if (redp->num >= 1 && !nodefault)
356 {
357 if (state->consistent)
358 default_rule = redp->rules[0];
359 else
360 {
361 int max = 0;
362 for (i = 0; i < state->nlookaheads; i++)
363 {
364 int count = 0;
365 rule_t *rule = state->lookaheads_rule[i];
366 symbol_number_t j;
367
368 for (j = 0; j < ntokens; j++)
369 if (actrow[j] == rule_number_as_item_number (rule->number))
370 count++;
371
372 if (count > max)
373 {
374 max = count;
375 default_rule = rule;
376 }
377 }
378
379 /* GLR parsers need space for conflict lists, so we can't
380 default conflicted entries. For non-conflicted entries
381 or as long as we are not building a GLR parser,
382 actions that match the default are replaced with zero,
383 which means "use the default". */
384
385 if (max > 0)
386 {
387 int j;
388 for (j = 0; j < ntokens; j++)
389 if (actrow[j] == rule_number_as_item_number (default_rule->number)
390 && ! (glr_parser && conflrow[j]))
391 actrow[j] = 0;
392 }
393 }
394 }
395
396 /* Find the rules which are reduced. */
397 if (!glr_parser)
398 {
399 for (i = 0; i < ntokens; i++)
400 if (actrow[i] < 0 && actrow[i] != ACTION_MIN)
401 rules[item_number_as_rule_number (actrow[i])].useful = TRUE;
402 if (default_rule)
403 default_rule->useful = TRUE;
404 }
405
406 /* If have no default rule, the default is an error.
407 So replace any action which says "error" with "use default". */
408
409 if (!default_rule)
410 for (i = 0; i < ntokens; i++)
411 if (actrow[i] == ACTION_MIN)
412 actrow[i] = 0;
413
414 if (conflicted)
415 conflict_row (state);
416
417 return default_rule;
418 }
419
420
421 /*--------------------------------------------.
422 | Set FROMS, TOS, TALLY and WIDTH for STATE. |
423 `--------------------------------------------*/
424
425 static void
426 save_row (state_number_t state)
427 {
428 symbol_number_t i;
429 int count;
430 base_t *sp = NULL;
431 base_t *sp1 = NULL;
432 base_t *sp2 = NULL;
433 unsigned int *sp3 = NULL;
434
435 /* Number of non default actions in STATE. */
436 count = 0;
437 for (i = 0; i < ntokens; i++)
438 if (actrow[i] != 0)
439 count++;
440
441 if (count == 0)
442 return;
443
444 /* Allocate non defaulted actions. */
445 froms[state] = sp1 = sp = XCALLOC (base_t, count);
446 tos[state] = sp2 = XCALLOC (base_t, count);
447 if (glr_parser)
448 conflict_tos[state] = sp3 = XCALLOC (unsigned int, count);
449 else
450 conflict_tos[state] = NULL;
451
452 /* Store non defaulted actions. */
453 for (i = 0; i < ntokens; i++)
454 if (actrow[i] != 0)
455 {
456 *sp1++ = i;
457 *sp2++ = actrow[i];
458 if (glr_parser)
459 *sp3++ = conflrow[i];
460 }
461
462 tally[state] = count;
463 width[state] = sp1[-1] - sp[0] + 1;
464 }
465
466
467 /*------------------------------------------------------------------.
468 | Figure out the actions for the specified state, indexed by |
469 | lookahead token type. |
470 | |
471 | The YYDEFACT table is output now. The detailed info is saved for |
472 | putting into YYTABLE later. |
473 `------------------------------------------------------------------*/
474
475 static void
476 token_actions (void)
477 {
478 state_number_t i;
479 rule_number_t r;
480 int nconflict = conflicts_total_count ();
481
482 yydefact = XCALLOC (rule_number_t, nstates);
483
484 actrow = XCALLOC (action_t, ntokens);
485 conflrow = XCALLOC (unsigned int, ntokens);
486
487 /* Now that the parser was computed, we can find which rules are
488 really reduced, and which are not because of SR or RR conflicts.
489 */
490 if (!glr_parser)
491 for (r = 0; r < nrules; ++r)
492 rules[r].useful = FALSE;
493
494 if (glr_parser)
495 {
496 conflict_list = XCALLOC (unsigned int, 1 + 2 * nconflict);
497 conflict_list_free = 2 * nconflict;
498 conflict_list_cnt = 1;
499 }
500 else
501 conflict_list_free = conflict_list_cnt = 0;
502
503 for (i = 0; i < nstates; ++i)
504 {
505 rule_t *default_rule = action_row (states[i]);
506 yydefact[i] = default_rule ? default_rule->number + 1 : 0;
507 save_row (i);
508 }
509
510 if (!glr_parser)
511 for (r = 0; r < nrules ; ++r)
512 if (!rules[r].useful)
513 {
514 LOCATION_PRINT (stderr, rules[r].location);
515 fprintf (stderr, ": %s: %s: ",
516 _("warning"), _("rule never reduced because of conflicts"));
517 rule_print (&rules[r], stderr);
518 }
519
520 free (actrow);
521 free (conflrow);
522 }
523
524
525 /*------------------------------------------------------------------.
526 | Compute FROMS[VECTOR], TOS[VECTOR], TALLY[VECTOR], WIDTH[VECTOR], |
527 | i.e., the information related to non defaulted GOTO on the nterm |
528 | SYMBOL. |
529 | |
530 | DEFAULT_STATE is the principal destination on SYMBOL, i.e., the |
531 | default GOTO destination on SYMBOL. |
532 `------------------------------------------------------------------*/
533
534 static void
535 save_column (symbol_number_t symbol, state_number_t default_state)
536 {
537 int i;
538 base_t *sp;
539 base_t *sp1;
540 base_t *sp2;
541 int count;
542 vector_number_t symno = symbol_number_to_vector_number (symbol);
543
544 goto_number_t begin = goto_map[symbol];
545 goto_number_t end = goto_map[symbol + 1];
546
547 /* Number of non default GOTO. */
548 count = 0;
549 for (i = begin; i < end; i++)
550 if (to_state[i] != default_state)
551 count++;
552
553 if (count == 0)
554 return;
555
556 /* Allocate room for non defaulted gotos. */
557 froms[symno] = sp1 = sp = XCALLOC (base_t, count);
558 tos[symno] = sp2 = XCALLOC (base_t, count);
559
560 /* Store the state numbers of the non defaulted gotos. */
561 for (i = begin; i < end; i++)
562 if (to_state[i] != default_state)
563 {
564 *sp1++ = from_state[i];
565 *sp2++ = to_state[i];
566 }
567
568 tally[symno] = count;
569 width[symno] = sp1[-1] - sp[0] + 1;
570 }
571
572
573 /*----------------------------------------------------------------.
574 | Return `the' most common destination GOTO on SYMBOL (a nterm). |
575 `----------------------------------------------------------------*/
576
577 static state_number_t
578 default_goto (symbol_number_t symbol, short state_count[])
579 {
580 state_number_t s;
581 int i;
582 goto_number_t m = goto_map[symbol];
583 goto_number_t n = goto_map[symbol + 1];
584 state_number_t default_state = (state_number_t) -1;
585 int max = 0;
586
587 if (m == n)
588 return (state_number_t) -1;
589
590 for (s = 0; s < nstates; s++)
591 state_count[s] = 0;
592
593 for (i = m; i < n; i++)
594 state_count[to_state[i]]++;
595
596 for (s = 0; s < nstates; s++)
597 if (state_count[s] > max)
598 {
599 max = state_count[s];
600 default_state = s;
601 }
602
603 return default_state;
604 }
605
606
607 /*-------------------------------------------------------------------.
608 | Figure out what to do after reducing with each rule, depending on |
609 | the saved state from before the beginning of parsing the data that |
610 | matched this rule. |
611 | |
612 | The YYDEFGOTO table is output now. The detailed info is saved for |
613 | putting into YYTABLE later. |
614 `-------------------------------------------------------------------*/
615
616 static void
617 goto_actions (void)
618 {
619 symbol_number_t i;
620 short *state_count = XCALLOC (short, nstates);
621 yydefgoto = XMALLOC (state_number_t, nvars);
622
623 /* For a given nterm I, STATE_COUNT[S] is the number of times there
624 is a GOTO to S on I. */
625 for (i = ntokens; i < nsyms; ++i)
626 {
627 state_number_t default_state = default_goto (i, state_count);
628 save_column (i, default_state);
629 yydefgoto[i - ntokens] = default_state;
630 }
631 free (state_count);
632 }
633
634
635 /*------------------------------------------------------------------.
636 | Compute ORDER, a reordering of vectors, in order to decide how to |
637 | pack the actions and gotos information into yytable. |
638 `------------------------------------------------------------------*/
639
640 static void
641 sort_actions (void)
642 {
643 int i;
644
645 nentries = 0;
646
647 for (i = 0; i < nvectors; i++)
648 if (tally[i] > 0)
649 {
650 int k;
651 int t = tally[i];
652 int w = width[i];
653 int j = nentries - 1;
654
655 while (j >= 0 && (width[order[j]] < w))
656 j--;
657
658 while (j >= 0 && (width[order[j]] == w) && (tally[order[j]] < t))
659 j--;
660
661 for (k = nentries - 1; k > j; k--)
662 order[k + 1] = order[k];
663
664 order[j + 1] = i;
665 nentries++;
666 }
667 }
668
669
670 /* If VECTOR is a state which actions (reflected by FROMS, TOS, TALLY
671 and WIDTH of VECTOR) are common to a previous state, return this
672 state number.
673
674 In any other case, return -1. */
675
676 static state_number_t
677 matching_state (vector_number_t vector)
678 {
679 vector_number_t i = order[vector];
680 int t;
681 int w;
682 int prev;
683
684 /* If VECTOR is a nterm, return -1. */
685 if (i >= (int) nstates)
686 return -1;
687
688 t = tally[i];
689 w = width[i];
690
691 for (prev = vector - 1; prev >= 0; prev--)
692 {
693 vector_number_t j = order[prev];
694 int k;
695 int match = 1;
696
697 /* Given how ORDER was computed, if the WIDTH or TALLY is
698 different, there cannot be a matching state. */
699 if (width[j] != w || tally[j] != t)
700 return -1;
701
702 for (k = 0; match && k < t; k++)
703 if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k])
704 match = 0;
705
706 if (match)
707 return j;
708 }
709
710 return -1;
711 }
712
713
714 static base_t
715 pack_vector (vector_number_t vector)
716 {
717 vector_number_t i = order[vector];
718 int j;
719 int t = tally[i];
720 int loc = 0;
721 base_t *from = froms[i];
722 base_t *to = tos[i];
723 unsigned int *conflict_to = conflict_tos[i];
724
725 assert (t);
726
727 for (j = lowzero - from[0]; j < (int) table_size; j++)
728 {
729 int k;
730 int ok = 1;
731
732 for (k = 0; ok && k < t; k++)
733 {
734 loc = j + state_number_as_int (from[k]);
735 if (loc > (int) table_size)
736 table_grow (loc);
737
738 if (table[loc] != 0)
739 ok = 0;
740 }
741
742 for (k = 0; ok && k < vector; k++)
743 if (pos[k] == j)
744 ok = 0;
745
746 if (ok)
747 {
748 for (k = 0; k < t; k++)
749 {
750 loc = j + from[k];
751 table[loc] = to[k];
752 if (glr_parser && conflict_to != NULL)
753 conflict_table[loc] = conflict_to[k];
754 check[loc] = from[k];
755 }
756
757 while (table[lowzero] != 0)
758 lowzero++;
759
760 if (loc > high)
761 high = loc;
762
763 if (j < BASE_MIN || BASE_MAX < j)
764 fatal ("base_t too small to hold %d\n", j);
765 return j;
766 }
767 }
768 #define pack_vector_succeeded 0
769 assert (pack_vector_succeeded);
770 return 0;
771 }
772
773
774 /*-------------------------------------------------------------.
775 | Remap the negative infinite in TAB from NINF to the greatest |
776 | possible smallest value. Return it. |
777 | |
778 | In most case this allows us to use shorts instead of ints in |
779 | parsers. |
780 `-------------------------------------------------------------*/
781
782 static base_t
783 table_ninf_remap (base_t tab[], size_t size, base_t ninf)
784 {
785 base_t res = 0;
786 size_t i;
787
788 for (i = 0; i < size; i++)
789 if (tab[i] < res && tab[i] != ninf)
790 res = base[i];
791
792 --res;
793
794 for (i = 0; i < size; i++)
795 if (tab[i] == ninf)
796 tab[i] = res;
797
798 return res;
799 }
800
801 static void
802 pack_table (void)
803 {
804 int i;
805
806 base = XCALLOC (base_t, nvectors);
807 pos = XCALLOC (base_t, nentries);
808 table = XCALLOC (base_t, table_size);
809 if (glr_parser)
810 conflict_table = XCALLOC (unsigned int, table_size);
811 check = XCALLOC (base_t, table_size);
812
813 lowzero = 0;
814 high = 0;
815
816 for (i = 0; i < nvectors; i++)
817 base[i] = BASE_MIN;
818
819 for (i = 0; i < (int) table_size; i++)
820 check[i] = -1;
821
822 for (i = 0; i < nentries; i++)
823 {
824 state_number_t state = matching_state (i);
825 base_t place;
826
827 if (state < 0)
828 /* A new set of state actions, or a nonterminal. */
829 place = pack_vector (i);
830 else
831 /* Action of I were already coded for STATE. */
832 place = base[state];
833
834 pos[i] = place;
835 base[order[i]] = place;
836 }
837
838 /* Use the greatest possible negative infinites. */
839 base_ninf = table_ninf_remap (base, nvectors, BASE_MIN);
840 table_ninf = table_ninf_remap (table, high + 1, ACTION_MIN);
841
842 for (i = 0; i < nvectors; i++)
843 {
844 XFREE (froms[i]);
845 XFREE (tos[i]);
846 XFREE (conflict_tos[i]);
847 }
848
849 free (froms);
850 free (tos);
851 free (conflict_tos);
852 free (pos);
853 }
854
855 \f
856
857 /*-----------------------------------------------------------------.
858 | Compute and output yydefact, yydefgoto, yypact, yypgoto, yytable |
859 | and yycheck. |
860 `-----------------------------------------------------------------*/
861
862 void
863 tables_generate (void)
864 {
865 /* That's a poor way to make sure the sizes are properly corelated,
866 in particular the signedness is not taking into account, but it's
867 not useless. */
868 assert (sizeof (nvectors) >= sizeof (nstates));
869 assert (sizeof (nvectors) >= sizeof (nvars));
870
871 nvectors = state_number_as_int (nstates) + nvars;
872
873 froms = XCALLOC (base_t *, nvectors);
874 tos = XCALLOC (base_t *, nvectors);
875 conflict_tos = XCALLOC (unsigned int *, nvectors);
876 tally = XCALLOC (short, nvectors);
877 width = XCALLOC (base_t, nvectors);
878
879 token_actions ();
880 bitsetv_free (LA);
881 free (LArule);
882
883 goto_actions ();
884 XFREE (goto_map + ntokens);
885 XFREE (from_state);
886 XFREE (to_state);
887
888 order = XCALLOC (vector_number_t, nvectors);
889 sort_actions ();
890 pack_table ();
891 free (order);
892
893 free (tally);
894 free (width);
895 }
896
897
898 /*-------------------------.
899 | Free the parser tables. |
900 `-------------------------*/
901
902 void
903 tables_free (void)
904 {
905 free (base);
906 free (conflict_table);
907 free (conflict_list);
908 free (table);
909 free (check);
910 free (yydefgoto);
911 free (yydefact);
912 }