]> git.saurik.com Git - bison.git/blob - src/output.c
735ef33ae22f3189629d26fc8f7fa55310b47513
[bison.git] / src / output.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 "error.h"
92 #include "getargs.h"
93 #include "files.h"
94 #include "gram.h"
95 #include "LR0.h"
96 #include "complain.h"
97 #include "output.h"
98 #include "lalr.h"
99 #include "reader.h"
100 #include "symtab.h"
101 #include "conflicts.h"
102 #include "muscle_tab.h"
103
104 /* From src/scan-skel.l. */
105 void m4_invoke PARAMS ((const char *definitions));
106
107
108 /* Several tables will be indexed both by state and nonterminal
109 numbers. We call `vector' such a thing (= either a state or a
110 symbol number.
111
112 Of course vector_number_t ought to be wide enough to contain
113 state_number_t and symbol_number_t. */
114 typedef short vector_number_t;
115 #define VECTOR_NUMBER_MAX ((vector_number_t) SHRT_MAX)
116 #define VECTOR_NUMBER_MIN ((vector_number_t) SHRT_MIN)
117 #define state_number_to_vector_number(State) \
118 ((vector_number_t) State)
119 #define symbol_number_to_vector_number(Symbol) \
120 ((vector_number_t) (state_number_as_int (nstates) + Symbol - ntokens))
121
122 static int nvectors;
123
124
125 /* FROMS and TOS are indexed by vector_number_t.
126
127 If VECTOR is a nonterminal, (FROMS[VECTOR], TOS[VECTOR]) form an
128 array of state numbers of the non defaulted GOTO on VECTOR.
129
130 If VECTOR is a state, TOS[VECTOR] is the array of actions to do on
131 the (array of) symbols FROMS[VECTOR].
132
133 In both cases, TALLY[VECTOR] is the size of the arrays
134 FROMS[VECTOR], TOS[VECTOR]; and WIDTH[VECTOR] =
135 (FROMS[VECTOR][SIZE] - FROMS[VECTOR][0] + 1) where SIZE =
136 TALLY[VECTOR].
137
138 FROMS therefore contains symbol_number_t and action_number_t,
139 TOS state_number_t and action_number_t,
140 TALLY sizes,
141 WIDTH differences of FROMS.
142
143 Let base_t be the type of FROMS, TOS, and WIDTH. */
144 typedef int base_t;
145 #define BASE_MAX ((base_t) INT_MAX)
146 #define BASE_MIN ((base_t) INT_MIN)
147
148 static base_t **froms = NULL;
149 static base_t **tos = NULL;
150 static unsigned int **conflict_tos = NULL;
151 static short *tally = NULL;
152 static base_t *width = NULL;
153
154
155 /* For a given state, N = ACTROW[SYMBOL]:
156
157 If N = 0, stands for `run the default action'.
158 If N = MIN, stands for `raise a parse error'.
159 If N > 0, stands for `shift SYMBOL and go to n'.
160 If N < 0, stands for `reduce -N'. */
161 typedef short action_t;
162 #define ACTION_MAX ((action_t) SHRT_MAX)
163 #define ACTION_MIN ((action_t) SHRT_MIN)
164
165 static action_t *actrow = NULL;
166
167 /* FROMS and TOS are reordered to be compressed. ORDER[VECTOR] is the
168 new vector number of VECTOR. We skip `empty' vectors (i.e.,
169 TALLY[VECTOR] = 0), and call these `entries'. */
170 static vector_number_t *order = NULL;
171 static int nentries;
172
173 static base_t *base = NULL;
174 /* A distinguished value of BASE, negative infinite. During the
175 computation equals to BASE_MIN, later mapped to BASE_NINF to
176 keep parser tables small. */
177 base_t base_ninf = 0;
178 static base_t *pos = NULL;
179
180 static unsigned int *conflrow = NULL;
181 static unsigned int *conflict_table = NULL;
182 static unsigned int *conflict_list = NULL;
183 static int conflict_list_cnt;
184 static int conflict_list_free;
185
186 /* TABLE_SIZE is the allocated size of both TABLE and CHECK.
187 We start with the original hard-coded value: SHRT_MAX
188 (yes, not USHRT_MAX). */
189 static size_t table_size = SHRT_MAX;
190 static base_t *table = NULL;
191 static base_t *check = NULL;
192 /* The value used in TABLE to denote explicit parse errors
193 (%nonassoc), a negative infinite. First defaults to ACTION_MIN,
194 but in order to keep small tables, renumbered as TABLE_ERROR, which
195 is the smallest (non error) value minus 1. */
196 base_t table_ninf = 0;
197 static int lowzero;
198 static int high;
199
200 static struct obstack format_obstack;
201
202 int error_verbose = 0;
203
204
205 /*----------------------------------------------------------------.
206 | If TABLE (and CHECK) appear to be small to be addressed at |
207 | DESIRED, grow them. Note that TABLE[DESIRED] is to be used, so |
208 | the desired size is at least DESIRED + 1. |
209 `----------------------------------------------------------------*/
210
211 static void
212 table_grow (size_t desired)
213 {
214 size_t old_size = table_size;
215
216 while (table_size <= desired)
217 table_size *= 2;
218
219 if (trace_flag)
220 fprintf (stderr, "growing table and check from: %d to %d\n",
221 old_size, table_size);
222
223 table = XREALLOC (table, base_t, table_size);
224 check = XREALLOC (check, base_t, table_size);
225 if (glr_parser)
226 conflict_table = XREALLOC (conflict_table, unsigned int, table_size);
227
228 for (/* Nothing. */; old_size < table_size; ++old_size)
229 {
230 table[old_size] = 0;
231 check[old_size] = -1;
232 }
233 }
234
235
236 /*-------------------------------------------------------------------.
237 | Create a function NAME which associates to the muscle NAME the |
238 | result of formatting the FIRST and then TABLE_DATA[BEGIN..END[ (of |
239 | TYPE), and to the muscle NAME_max, the max value of the |
240 | TABLE_DATA. |
241 `-------------------------------------------------------------------*/
242
243
244 #define GENERATE_MUSCLE_INSERT_TABLE(Name, Type) \
245 \
246 static void \
247 Name (const char *name, \
248 Type *table_data, \
249 Type first, \
250 int begin, \
251 int end) \
252 { \
253 Type min = first; \
254 Type max = first; \
255 int i; \
256 int j = 1; \
257 \
258 obstack_fgrow1 (&format_obstack, "%6d", first); \
259 for (i = begin; i < end; ++i) \
260 { \
261 obstack_1grow (&format_obstack, ','); \
262 if (j >= 10) \
263 { \
264 obstack_sgrow (&format_obstack, "\n "); \
265 j = 1; \
266 } \
267 else \
268 ++j; \
269 obstack_fgrow1 (&format_obstack, "%6d", table_data[i]); \
270 if (table_data[i] < min) \
271 min = table_data[i]; \
272 if (max < table_data[i]) \
273 max = table_data[i]; \
274 } \
275 obstack_1grow (&format_obstack, 0); \
276 muscle_insert (name, obstack_finish (&format_obstack)); \
277 \
278 /* Build `NAME_min' and `NAME_max' in the obstack. */ \
279 obstack_fgrow1 (&format_obstack, "%s_min", name); \
280 obstack_1grow (&format_obstack, 0); \
281 MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), \
282 (long int) min); \
283 obstack_fgrow1 (&format_obstack, "%s_max", name); \
284 obstack_1grow (&format_obstack, 0); \
285 MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), \
286 (long int) max); \
287 }
288
289 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_unsigned_int_table, unsigned int)
290 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_int_table, int)
291 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_short_table, short)
292 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_base_table, base_t)
293 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_rule_number_table, rule_number_t)
294 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_symbol_number_table, symbol_number_t)
295 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_item_number_table, item_number_t)
296 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_state_number_table, state_number_t)
297
298
299 /*-----------------------------------------------------------------.
300 | Prepare the muscles related to the tokens: translate, tname, and |
301 | toknum. |
302 `-----------------------------------------------------------------*/
303
304 static void
305 prepare_tokens (void)
306 {
307 muscle_insert_symbol_number_table ("translate",
308 token_translations,
309 0, 1, max_user_token_number + 1);
310
311 {
312 int i;
313 int j = 0;
314 for (i = 0; i < nsyms; i++)
315 {
316 /* Be sure not to use twice the same QUOTEARG slot:
317 SYMBOL_TAG_GET uses slot 0. */
318 const char *cp =
319 quotearg_n_style (1, c_quoting_style,
320 symbols[i]->tag);
321 /* Width of the next token, including the two quotes, the coma
322 and the space. */
323 int strsize = strlen (cp) + 2;
324
325 if (j + strsize > 75)
326 {
327 obstack_sgrow (&format_obstack, "\n ");
328 j = 2;
329 }
330
331 obstack_sgrow (&format_obstack, cp);
332 obstack_sgrow (&format_obstack, ", ");
333 j += strsize;
334 }
335 /* Add a NULL entry to list of tokens (well, 0, as NULL might not be
336 defined). */
337 obstack_sgrow (&format_obstack, "0");
338
339 /* Finish table and store. */
340 obstack_1grow (&format_obstack, 0);
341 muscle_insert ("tname", obstack_finish (&format_obstack));
342 }
343
344 /* Output YYTOKNUM. */
345 {
346 int i;
347 int *values = XCALLOC (int, ntokens + 1);
348 for (i = 0; i < ntokens + 1; ++i)
349 values[i] = symbols[i]->user_token_number;
350 muscle_insert_int_table ("toknum", values,
351 0, 1, ntokens + 1);
352 free (values);
353 }
354 }
355
356
357 /*-------------------------------------------------------------.
358 | Prepare the muscles related to the rules: rhs, prhs, r1, r2, |
359 | rline, dprec, merger |
360 `-------------------------------------------------------------*/
361
362 static void
363 prepare_rules (void)
364 {
365 rule_number_t r;
366 unsigned int i = 0;
367 item_number_t *rhs = XMALLOC (item_number_t, nritems);
368 unsigned int *prhs = XMALLOC (unsigned int, nrules + 1);
369 unsigned int *rline = XMALLOC (unsigned int, nrules + 1);
370 symbol_number_t *r1 = XMALLOC (symbol_number_t, nrules + 1);
371 unsigned int *r2 = XMALLOC (unsigned int, nrules + 1);
372 short *dprec = XMALLOC (short, nrules + 1);
373 short *merger = XMALLOC (short, nrules + 1);
374
375 for (r = 1; r < nrules + 1; ++r)
376 {
377 item_number_t *rhsp = NULL;
378 /* Index of rule R in RHS. */
379 prhs[r] = i;
380 /* RHS of the rule R. */
381 for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
382 rhs[i++] = *rhsp;
383 /* LHS of the rule R. */
384 r1[r] = rules[r].lhs->number;
385 /* Length of rule R's RHS. */
386 r2[r] = i - prhs[r];
387 /* Separator in RHS. */
388 rhs[i++] = -1;
389 /* Line where rule was defined. */
390 rline[r] = rules[r].location.first_line;
391 /* Dynamic precedence (GLR) */
392 dprec[r] = rules[r].dprec;
393 /* Merger-function index (GLR) */
394 merger[r] = rules[r].merger;
395 }
396 assert (i == nritems);
397
398 muscle_insert_item_number_table ("rhs", rhs, ritem[0], 1, nritems);
399 muscle_insert_unsigned_int_table ("prhs", prhs, 0, 1, nrules + 1);
400 muscle_insert_unsigned_int_table ("rline", rline, 0, 1, nrules + 1);
401 muscle_insert_symbol_number_table ("r1", r1, 0, 1, nrules + 1);
402 muscle_insert_unsigned_int_table ("r2", r2, 0, 1, nrules + 1);
403 muscle_insert_short_table ("dprec", dprec, 0, 1, nrules + 1);
404 muscle_insert_short_table ("merger", merger, 0, 1, nrules + 1);
405
406 free (rhs);
407 free (prhs);
408 free (rline);
409 free (r1);
410 free (r2);
411 free (dprec);
412 free (merger);
413 }
414
415 /*--------------------------------------------.
416 | Prepare the muscles related to the states. |
417 `--------------------------------------------*/
418
419 static void
420 prepare_states (void)
421 {
422 state_number_t i;
423 symbol_number_t *values =
424 (symbol_number_t *) alloca (sizeof (symbol_number_t) * nstates);
425 for (i = 0; i < nstates; ++i)
426 values[i] = states[i]->accessing_symbol;
427 muscle_insert_symbol_number_table ("stos", values,
428 0, 1, nstates);
429 }
430
431
432 /*-------------------------------------------------------------------.
433 | For GLR parsers, for each conflicted token in STATE, as indicated |
434 | by non-zero entries in CONFLROW, create a list of possible |
435 | reductions that are alternatives to the shift or reduction |
436 | currently recorded for that token in STATE. Store the alternative |
437 | reductions followed by a 0 in conflict_list, updating |
438 | conflict_list_cnt, and storing an index to the start of the list |
439 | back into CONFLROW. |
440 `-------------------------------------------------------------------*/
441
442 static void
443 conflict_row (state_t *state)
444 {
445 int i, j;
446
447 if (! glr_parser)
448 return;
449
450 for (j = 0; j < ntokens; j += 1)
451 if (conflrow[j])
452 {
453 conflrow[j] = conflict_list_cnt;
454
455 /* Find all reductions for token J, and record all that do not
456 match ACTROW[J]. */
457 for (i = 0; i < state->nlookaheads; i += 1)
458 if (bitset_test (state->lookaheads[i], j)
459 && (actrow[j]
460 != rule_number_as_item_number (state->lookaheads_rule[i]->number)))
461 {
462 assert (conflict_list_free > 0);
463 conflict_list[conflict_list_cnt]
464 = state->lookaheads_rule[i]->number;
465 conflict_list_cnt += 1;
466 conflict_list_free -= 1;
467 }
468
469 /* Leave a 0 at the end. */
470 assert (conflict_list_free > 0);
471 conflict_list_cnt += 1;
472 conflict_list_free -= 1;
473 }
474 }
475
476
477 /*------------------------------------------------------------------.
478 | Decide what to do for each type of token if seen as the lookahead |
479 | token in specified state. The value returned is used as the |
480 | default action (yydefact) for the state. In addition, ACTROW is |
481 | filled with what to do for each kind of token, index by symbol |
482 | number, with zero meaning do the default action. The value |
483 | ACTION_MIN, a very negative number, means this situation is an |
484 | error. The parser recognizes this value specially. |
485 | |
486 | This is where conflicts are resolved. The loop over lookahead |
487 | rules considered lower-numbered rules last, and the last rule |
488 | considered that likes a token gets to handle it. |
489 | |
490 | For GLR parsers, also sets CONFLROW[SYM] to an index into |
491 | conflict_list iff there is an unresolved conflict (s/r or r/r) |
492 | with symbol SYM. The default reduction is not used for a symbol |
493 | that has any such conflicts. |
494 `------------------------------------------------------------------*/
495
496 static rule_number_t
497 action_row (state_t *state)
498 {
499 int i;
500 rule_number_t default_rule = 0;
501 reductions_t *redp = state->reductions;
502 transitions_t *transitions = state->transitions;
503 errs_t *errp = state->errs;
504 /* set nonzero to inhibit having any default reduction */
505 int nodefault = 0;
506 int conflicted = 0;
507
508 for (i = 0; i < ntokens; i++)
509 actrow[i] = conflrow[i] = 0;
510
511 if (redp->num >= 1)
512 {
513 int j;
514 bitset_iterator biter;
515 /* loop over all the rules available here which require
516 lookahead */
517 for (i = state->nlookaheads - 1; i >= 0; --i)
518 /* and find each token which the rule finds acceptable
519 to come next */
520 BITSET_FOR_EACH (biter, state->lookaheads[i], j, 0)
521 {
522 /* and record this rule as the rule to use if that
523 token follows. */
524 if (actrow[j] != 0)
525 conflicted = conflrow[j] = 1;
526 actrow[j] = rule_number_as_item_number (state->lookaheads_rule[i]->number);
527 }
528 }
529
530 /* Now see which tokens are allowed for shifts in this state. For
531 them, record the shift as the thing to do. So shift is preferred
532 to reduce. */
533 for (i = 0; i < transitions->num && TRANSITION_IS_SHIFT (transitions, i); i++)
534 if (!TRANSITION_IS_DISABLED (transitions, i))
535 {
536 symbol_number_t symbol = TRANSITION_SYMBOL (transitions, i);
537 state_number_t shift_state = transitions->states[i];
538
539 if (actrow[symbol] != 0)
540 conflicted = conflrow[symbol] = 1;
541 actrow[symbol] = state_number_as_int (shift_state);
542
543 /* Do not use any default reduction if there is a shift for
544 error */
545 if (symbol == errtoken->number)
546 nodefault = 1;
547 }
548
549 /* See which tokens are an explicit error in this state (due to
550 %nonassoc). For them, record ACTION_MIN as the action. */
551 for (i = 0; i < errp->num; i++)
552 {
553 symbol_number_t symbol = errp->symbols[i];
554 actrow[symbol] = ACTION_MIN;
555 }
556
557 /* Now find the most common reduction and make it the default action
558 for this state. */
559
560 if (redp->num >= 1 && !nodefault)
561 {
562 if (state->consistent)
563 default_rule = redp->rules[0];
564 else
565 {
566 int max = 0;
567 for (i = 0; i < state->nlookaheads; i++)
568 {
569 int count = 0;
570 rule_number_t rule = state->lookaheads_rule[i]->number;
571 symbol_number_t j;
572
573 for (j = 0; j < ntokens; j++)
574 if (actrow[j] == rule_number_as_item_number (rule))
575 count++;
576
577 if (count > max)
578 {
579 max = count;
580 default_rule = rule;
581 }
582 }
583
584 /* GLR parsers need space for conflict lists, so we can't
585 default conflicted entries. For non-conflicted entries
586 or as long as we are not building a GLR parser,
587 actions that match the default are replaced with zero,
588 which means "use the default". */
589
590 if (max > 0)
591 {
592 int j;
593 for (j = 0; j < ntokens; j++)
594 if (actrow[j] == rule_number_as_item_number (default_rule)
595 && ! (glr_parser && conflrow[j]))
596 actrow[j] = 0;
597 }
598 }
599 }
600
601 /* If have no default rule, the default is an error.
602 So replace any action which says "error" with "use default". */
603
604 if (default_rule == 0)
605 for (i = 0; i < ntokens; i++)
606 if (actrow[i] == ACTION_MIN)
607 actrow[i] = 0;
608
609 if (conflicted)
610 conflict_row (state);
611
612 return default_rule;
613 }
614
615
616 /*--------------------------------------------.
617 | Set FROMS, TOS, TALLY and WIDTH for STATE. |
618 `--------------------------------------------*/
619
620 static void
621 save_row (state_number_t state)
622 {
623 symbol_number_t i;
624 int count;
625 base_t *sp = NULL;
626 base_t *sp1 = NULL;
627 base_t *sp2 = NULL;
628 unsigned int *sp3 = NULL;
629
630 /* Number of non default actions in STATE. */
631 count = 0;
632 for (i = 0; i < ntokens; i++)
633 if (actrow[i] != 0)
634 count++;
635
636 if (count == 0)
637 return;
638
639 /* Allocate non defaulted actions. */
640 froms[state] = sp1 = sp = XCALLOC (base_t, count);
641 tos[state] = sp2 = XCALLOC (base_t, count);
642 if (glr_parser)
643 conflict_tos[state] = sp3 = XCALLOC (unsigned int, count);
644 else
645 conflict_tos[state] = NULL;
646
647 /* Store non defaulted actions. */
648 for (i = 0; i < ntokens; i++)
649 if (actrow[i] != 0)
650 {
651 *sp1++ = i;
652 *sp2++ = actrow[i];
653 if (glr_parser)
654 *sp3++ = conflrow[i];
655 }
656
657 tally[state] = count;
658 width[state] = sp1[-1] - sp[0] + 1;
659 }
660
661
662 /*------------------------------------------------------------------.
663 | Figure out the actions for the specified state, indexed by |
664 | lookahead token type. |
665 | |
666 | The YYDEFACT table is output now. The detailed info is saved for |
667 | putting into YYTABLE later. |
668 `------------------------------------------------------------------*/
669
670 static void
671 token_actions (void)
672 {
673 state_number_t i;
674 int nconflict = conflicts_total_count ();
675
676 rule_number_t *yydefact = XCALLOC (rule_number_t, nstates);
677
678 actrow = XCALLOC (action_t, ntokens);
679 conflrow = XCALLOC (unsigned int, ntokens);
680
681 if (glr_parser)
682 {
683 conflict_list = XCALLOC (unsigned int, 1 + 2 * nconflict);
684 conflict_list_free = 2 * nconflict;
685 conflict_list_cnt = 1;
686 }
687 else
688 conflict_list_free = conflict_list_cnt = 0;
689
690 for (i = 0; i < nstates; ++i)
691 {
692 yydefact[i] = action_row (states[i]);
693 save_row (i);
694 }
695
696 muscle_insert_rule_number_table ("defact", yydefact,
697 yydefact[0], 1, nstates);
698 XFREE (actrow);
699 XFREE (conflrow);
700 XFREE (yydefact);
701 }
702
703
704 /*-----------------------------.
705 | Output the actions to OOUT. |
706 `-----------------------------*/
707
708 void
709 actions_output (FILE *out)
710 {
711 rule_number_t r;
712
713 fputs ("m4_define([b4_actions], \n[[", out);
714 for (r = 1; r < nrules + 1; ++r)
715 if (rules[r].action)
716 {
717 fprintf (out, " case %d:\n", r);
718
719 if (!no_lines_flag)
720 fprintf (out, muscle_find ("linef"),
721 rules[r].action_location.first_line,
722 quotearg_style (c_quoting_style,
723 muscle_find ("filename")));
724 fprintf (out, " %s\n break;\n\n",
725 rules[r].action);
726 }
727 fputs ("]])\n\n", out);
728 }
729
730 /*--------------------------------------.
731 | Output the merge functions to OUT. |
732 `--------------------------------------*/
733
734 static void
735 merger_output (FILE *out)
736 {
737 int n;
738 merger_list* p;
739
740 fputs ("m4_define([b4_mergers], \n[[", out);
741 for (n = 1, p = merge_functions; p != NULL; n += 1, p = p->next)
742 {
743 if (p->type[0] == '\0')
744 fprintf (out, " case %d: yyval = %s (*yy0, *yy1); break;\n",
745 n, p->name);
746 else
747 fprintf (out, " case %d: yyval.%s = %s (*yy0, *yy1); break;\n",
748 n, p->type, p->name);
749 }
750 fputs ("]])\n\n", out);
751 }
752
753 /*---------------------------------------.
754 | Output the tokens definition to OOUT. |
755 `---------------------------------------*/
756
757 void
758 token_definitions_output (FILE *out)
759 {
760 int i;
761 int first = 1;
762
763 fputs ("m4_define([b4_tokens], \n[", out);
764 for (i = 0; i < ntokens; ++i)
765 {
766 symbol_t *symbol = symbols[i];
767 int number = symbol->user_token_number;
768
769 /* At this stage, if there are literal aliases, they are part of
770 SYMBOLS, so we should not find symbols which are the aliases
771 here. */
772 assert (number != USER_NUMBER_ALIAS);
773
774 /* Skip error token. */
775 if (symbol == errtoken)
776 continue;
777
778 /* If this string has an alias, then it is necessarily the alias
779 which is to be output. */
780 if (symbol->alias)
781 symbol = symbol->alias;
782
783 /* Don't output literal chars or strings (when defined only as a
784 string). Note that must be done after the alias resolution:
785 think about `%token 'f' "f"'. */
786 if (symbol->tag[0] == '\'' || symbol->tag[0] == '\"')
787 continue;
788
789 /* Don't #define nonliteral tokens whose names contain periods
790 or '$' (as does the default value of the EOF token). */
791 if (strchr (symbol->tag, '.') || strchr (symbol->tag, '$'))
792 continue;
793
794 fprintf (out, "%s[[[%s]], [%d]]",
795 first ? "" : ",\n", symbol->tag, number);
796
797 first = 0;
798 }
799 fputs ("])\n\n", out);
800 }
801
802
803 /*----------------------------------------.
804 | Output the symbol destructors to OOUT. |
805 `----------------------------------------*/
806
807 static void
808 symbol_destructors_output (FILE *out)
809 {
810 int i;
811 int first = 1;
812
813 fputs ("m4_define([b4_symbol_destructors], \n[", out);
814 for (i = 0; i < nsyms; ++i)
815 if (symbols[i]->destructor)
816 {
817 symbol_t *symbol = symbols[i];
818
819 /* Filename, lineno,
820 Symbol-name, Symbol-number,
821 destructor, typename. */
822 fprintf (out, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
823 first ? "" : ",\n",
824 infile, symbol->destructor_location.first_line,
825 symbol->tag,
826 symbol->number,
827 symbol->destructor,
828 symbol->type_name);
829
830 first = 0;
831 }
832 fputs ("])\n\n", out);
833 }
834
835
836 /*-------------------------------------.
837 | Output the symbol printers to OOUT. |
838 `-------------------------------------*/
839
840 static void
841 symbol_printers_output (FILE *out)
842 {
843 int i;
844 int first = 1;
845
846 fputs ("m4_define([b4_symbol_printers], \n[", out);
847 for (i = 0; i < nsyms; ++i)
848 if (symbols[i]->destructor)
849 {
850 symbol_t *symbol = symbols[i];
851
852 /* Filename, lineno,
853 Symbol-name, Symbol-number,
854 destructor, typename. */
855 fprintf (out, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
856 first ? "" : ",\n",
857 infile, symbol->printer_location.first_line,
858 symbol->tag,
859 symbol->number,
860 symbol->printer,
861 symbol->type_name);
862
863 first = 0;
864 }
865 fputs ("])\n\n", out);
866 }
867
868
869 /*------------------------------------------------------------------.
870 | Compute FROMS[VECTOR], TOS[VECTOR], TALLY[VECTOR], WIDTH[VECTOR], |
871 | i.e., the information related to non defaulted GOTO on the nterm |
872 | SYMBOL. |
873 | |
874 | DEFAULT_STATE is the principal destination on SYMBOL, i.e., the |
875 | default GOTO destination on SYMBOL. |
876 `------------------------------------------------------------------*/
877
878 static void
879 save_column (symbol_number_t symbol, state_number_t default_state)
880 {
881 int i;
882 base_t *sp;
883 base_t *sp1;
884 base_t *sp2;
885 int count;
886 vector_number_t symno = symbol_number_to_vector_number (symbol);
887
888 goto_number_t begin = goto_map[symbol];
889 goto_number_t end = goto_map[symbol + 1];
890
891 /* Number of non default GOTO. */
892 count = 0;
893 for (i = begin; i < end; i++)
894 if (to_state[i] != default_state)
895 count++;
896
897 if (count == 0)
898 return;
899
900 /* Allocate room for non defaulted gotos. */
901 froms[symno] = sp1 = sp = XCALLOC (base_t, count);
902 tos[symno] = sp2 = XCALLOC (base_t, count);
903
904 /* Store the state numbers of the non defaulted gotos. */
905 for (i = begin; i < end; i++)
906 if (to_state[i] != default_state)
907 {
908 *sp1++ = from_state[i];
909 *sp2++ = to_state[i];
910 }
911
912 tally[symno] = count;
913 width[symno] = sp1[-1] - sp[0] + 1;
914 }
915
916
917 /*----------------------------------------------------------------.
918 | Return `the' most common destination GOTO on SYMBOL (a nterm). |
919 `----------------------------------------------------------------*/
920
921 static state_number_t
922 default_goto (symbol_number_t symbol, short state_count[])
923 {
924 state_number_t s;
925 int i;
926 goto_number_t m = goto_map[symbol];
927 goto_number_t n = goto_map[symbol + 1];
928 state_number_t default_state = (state_number_t) -1;
929 int max = 0;
930
931 if (m == n)
932 return (state_number_t) -1;
933
934 for (s = 0; s < nstates; s++)
935 state_count[s] = 0;
936
937 for (i = m; i < n; i++)
938 state_count[to_state[i]]++;
939
940 for (s = 0; s < nstates; s++)
941 if (state_count[s] > max)
942 {
943 max = state_count[s];
944 default_state = s;
945 }
946
947 return default_state;
948 }
949
950
951 /*-------------------------------------------------------------------.
952 | Figure out what to do after reducing with each rule, depending on |
953 | the saved state from before the beginning of parsing the data that |
954 | matched this rule. |
955 | |
956 | The YYDEFGOTO table is output now. The detailed info is saved for |
957 | putting into YYTABLE later. |
958 `-------------------------------------------------------------------*/
959
960 static void
961 goto_actions (void)
962 {
963 symbol_number_t i;
964 state_number_t *yydefgoto = XMALLOC (state_number_t, nvars);
965
966 /* For a given nterm I, STATE_COUNT[S] is the number of times there
967 is a GOTO to S on I. */
968 short *state_count = XCALLOC (short, nstates);
969 for (i = ntokens; i < nsyms; ++i)
970 {
971 state_number_t default_state = default_goto (i, state_count);
972 save_column (i, default_state);
973 yydefgoto[i - ntokens] = default_state;
974 }
975
976 muscle_insert_state_number_table ("defgoto", yydefgoto,
977 yydefgoto[0], 1, nsyms - ntokens);
978 XFREE (state_count);
979 XFREE (yydefgoto);
980 }
981
982
983 /*------------------------------------------------------------------.
984 | Compute ORDER, a reordering of vectors, in order to decide how to |
985 | pack the actions and gotos information into yytable. |
986 `------------------------------------------------------------------*/
987
988 static void
989 sort_actions (void)
990 {
991 int i;
992
993 nentries = 0;
994
995 for (i = 0; i < nvectors; i++)
996 if (tally[i] > 0)
997 {
998 int k;
999 int t = tally[i];
1000 int w = width[i];
1001 int j = nentries - 1;
1002
1003 while (j >= 0 && (width[order[j]] < w))
1004 j--;
1005
1006 while (j >= 0 && (width[order[j]] == w) && (tally[order[j]] < t))
1007 j--;
1008
1009 for (k = nentries - 1; k > j; k--)
1010 order[k + 1] = order[k];
1011
1012 order[j + 1] = i;
1013 nentries++;
1014 }
1015 }
1016
1017
1018 /* If VECTOR is a state which actions (reflected by FROMS, TOS, TALLY
1019 and WIDTH of VECTOR) are common to a previous state, return this
1020 state number.
1021
1022 In any other case, return -1. */
1023
1024 static state_number_t
1025 matching_state (vector_number_t vector)
1026 {
1027 vector_number_t i = order[vector];
1028 int t;
1029 int w;
1030 int prev;
1031
1032 /* If VECTOR is a nterm, return -1. */
1033 if (i >= (int) nstates)
1034 return -1;
1035
1036 t = tally[i];
1037 w = width[i];
1038
1039 for (prev = vector - 1; prev >= 0; prev--)
1040 {
1041 vector_number_t j = order[prev];
1042 int k;
1043 int match = 1;
1044
1045 /* Given how ORDER was computed, if the WIDTH or TALLY is
1046 different, there cannot be a matching state. */
1047 if (width[j] != w || tally[j] != t)
1048 return -1;
1049
1050 for (k = 0; match && k < t; k++)
1051 if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k])
1052 match = 0;
1053
1054 if (match)
1055 return j;
1056 }
1057
1058 return -1;
1059 }
1060
1061
1062 static base_t
1063 pack_vector (vector_number_t vector)
1064 {
1065 vector_number_t i = order[vector];
1066 int j;
1067 int t = tally[i];
1068 int loc = 0;
1069 base_t *from = froms[i];
1070 base_t *to = tos[i];
1071 unsigned int *conflict_to = conflict_tos[i];
1072
1073 assert (t);
1074
1075 for (j = lowzero - from[0]; j < (int) table_size; j++)
1076 {
1077 int k;
1078 int ok = 1;
1079
1080 for (k = 0; ok && k < t; k++)
1081 {
1082 loc = j + state_number_as_int (from[k]);
1083 if (loc > (int) table_size)
1084 table_grow (loc);
1085
1086 if (table[loc] != 0)
1087 ok = 0;
1088 }
1089
1090 for (k = 0; ok && k < vector; k++)
1091 if (pos[k] == j)
1092 ok = 0;
1093
1094 if (ok)
1095 {
1096 for (k = 0; k < t; k++)
1097 {
1098 loc = j + from[k];
1099 table[loc] = to[k];
1100 if (glr_parser && conflict_to != NULL)
1101 conflict_table[loc] = conflict_to[k];
1102 check[loc] = from[k];
1103 }
1104
1105 while (table[lowzero] != 0)
1106 lowzero++;
1107
1108 if (loc > high)
1109 high = loc;
1110
1111 if (j < BASE_MIN || BASE_MAX < j)
1112 fatal ("base_t too small to hold %d\n", j);
1113 return j;
1114 }
1115 }
1116 #define pack_vector_succeeded 0
1117 assert (pack_vector_succeeded);
1118 return 0;
1119 }
1120
1121
1122 /*-------------------------------------------------------------.
1123 | Remap the negative infinite in TAB from NINF to the greatest |
1124 | possible smallest value. Return it. |
1125 | |
1126 | In most case this allows us to use shorts instead of ints in |
1127 | parsers. |
1128 `-------------------------------------------------------------*/
1129
1130 static base_t
1131 table_ninf_remap (base_t tab[], size_t size, base_t ninf)
1132 {
1133 base_t res = 0;
1134 size_t i;
1135
1136 for (i = 0; i < size; i++)
1137 if (tab[i] < res && tab[i] != ninf)
1138 res = base[i];
1139
1140 --res;
1141
1142 for (i = 0; i < size; i++)
1143 if (tab[i] == ninf)
1144 tab[i] = res;
1145
1146 return res;
1147 }
1148
1149 static void
1150 pack_table (void)
1151 {
1152 int i;
1153
1154 base = XCALLOC (base_t, nvectors);
1155 pos = XCALLOC (base_t, nentries);
1156 table = XCALLOC (base_t, table_size);
1157 if (glr_parser)
1158 conflict_table = XCALLOC (unsigned int, table_size);
1159 check = XCALLOC (base_t, table_size);
1160
1161 lowzero = 0;
1162 high = 0;
1163
1164 for (i = 0; i < nvectors; i++)
1165 base[i] = BASE_MIN;
1166
1167 for (i = 0; i < (int) table_size; i++)
1168 check[i] = -1;
1169
1170 for (i = 0; i < nentries; i++)
1171 {
1172 state_number_t state = matching_state (i);
1173 base_t place;
1174
1175 if (state < 0)
1176 /* A new set of state actions, or a nonterminal. */
1177 place = pack_vector (i);
1178 else
1179 /* Action of I were already coded for STATE. */
1180 place = base[state];
1181
1182 pos[i] = place;
1183 base[order[i]] = place;
1184 }
1185
1186 /* Use the greatest possible negative infinites. */
1187 base_ninf = table_ninf_remap (base, nvectors, BASE_MIN);
1188 table_ninf = table_ninf_remap (table, high + 1, ACTION_MIN);
1189
1190 for (i = 0; i < nvectors; i++)
1191 {
1192 XFREE (froms[i]);
1193 XFREE (tos[i]);
1194 XFREE (conflict_tos[i]);
1195 }
1196
1197 free (froms);
1198 free (tos);
1199 free (conflict_tos);
1200 free (pos);
1201 }
1202
1203
1204 /* the following functions output yytable, yycheck, yyconflp, yyconfl,
1205 and the vectors whose elements index the portion starts. */
1206
1207 static void
1208 output_base (void)
1209 {
1210 /* Output PACT. */
1211 muscle_insert_base_table ("pact", base,
1212 base[0], 1, nstates);
1213 MUSCLE_INSERT_INT ("pact_ninf", base_ninf);
1214
1215 /* Output PGOTO. */
1216 muscle_insert_base_table ("pgoto", base,
1217 base[nstates], nstates + 1, nvectors);
1218 XFREE (base);
1219 }
1220
1221
1222 static void
1223 output_table (void)
1224 {
1225 muscle_insert_base_table ("table", table,
1226 table[0], 1, high + 1);
1227 MUSCLE_INSERT_INT ("table_ninf", table_ninf);
1228 XFREE (table);
1229 }
1230
1231
1232 static void
1233 output_conflicts (void)
1234 {
1235 /* GLR parsing slightly modifies yytable and yycheck
1236 (and thus yypact) so that in states with unresolved conflicts,
1237 the default reduction is not used in the conflicted entries, so
1238 that there is a place to put a conflict pointer. This means that
1239 yyconflp and yyconfl are nonsense for a non-GLR parser, so we
1240 avoid accidents by not writing them out in that case. */
1241 if (! glr_parser)
1242 return;
1243
1244 muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table,
1245 conflict_table[0], 1, high+1);
1246 muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list,
1247 conflict_list[0], 1, conflict_list_cnt);
1248
1249 XFREE (conflict_table);
1250 XFREE (conflict_list);
1251 }
1252
1253
1254 static void
1255 output_check (void)
1256 {
1257 muscle_insert_base_table ("check", check,
1258 check[0], 1, high + 1);
1259 XFREE (check);
1260 }
1261
1262 /*-----------------------------------------------------------------.
1263 | Compute and output yydefact, yydefgoto, yypact, yypgoto, yytable |
1264 | and yycheck. |
1265 `-----------------------------------------------------------------*/
1266
1267 static void
1268 prepare_actions (void)
1269 {
1270 /* That's a poor way to make sure the sizes are properly corelated,
1271 in particular the signedness is not taking into account, but it's
1272 not useless. */
1273 assert (sizeof (nvectors) >= sizeof (nstates));
1274 assert (sizeof (nvectors) >= sizeof (nvars));
1275
1276 nvectors = state_number_as_int (nstates) + nvars;
1277
1278 froms = XCALLOC (base_t *, nvectors);
1279 tos = XCALLOC (base_t *, nvectors);
1280 conflict_tos = XCALLOC (unsigned int *, nvectors);
1281 tally = XCALLOC (short, nvectors);
1282 width = XCALLOC (base_t, nvectors);
1283
1284 token_actions ();
1285 bitsetv_free (LA);
1286 free (LArule);
1287
1288 goto_actions ();
1289 XFREE (goto_map + ntokens);
1290 XFREE (from_state);
1291 XFREE (to_state);
1292
1293 order = XCALLOC (vector_number_t, nvectors);
1294 sort_actions ();
1295 pack_table ();
1296 free (order);
1297
1298 free (tally);
1299 free (width);
1300
1301 output_base ();
1302 output_table ();
1303 output_conflicts ();
1304
1305 output_check ();
1306 }
1307
1308 \f
1309 /*---------------------------.
1310 | Call the skeleton parser. |
1311 `---------------------------*/
1312
1313 static void
1314 output_skeleton (void)
1315 {
1316 /* Store the definition of all the muscles. */
1317 const char *tempdir = getenv ("TMPDIR");
1318 char *tempfile = NULL;
1319 FILE *out = NULL;
1320 int fd;
1321
1322 if (tempdir == NULL)
1323 tempdir = DEFAULT_TMPDIR;
1324 tempfile = xmalloc (strlen (tempdir) + 11);
1325 sprintf (tempfile, "%s/bsnXXXXXX", tempdir);
1326 fd = mkstemp (tempfile);
1327 if (fd == -1)
1328 error (EXIT_FAILURE, errno, "%s", tempfile);
1329
1330 out = fdopen (fd, "w");
1331 if (out == NULL)
1332 error (EXIT_FAILURE, errno, "%s", tempfile);
1333
1334 /* There are no comments, especially not `#': we do want M4 expansion
1335 after `#': think of CPP macros! */
1336 fputs ("m4_changecom()\n", out);
1337 fputs ("m4_init()\n", out);
1338
1339 actions_output (out);
1340 merger_output (out);
1341 token_definitions_output (out);
1342 symbol_destructors_output (out);
1343 symbol_printers_output (out);
1344
1345 muscles_m4_output (out);
1346
1347 fputs ("m4_wrap([m4_divert_pop(0)])\n", out);
1348 fputs ("m4_divert_push(0)dnl\n", out);
1349 xfclose (out);
1350
1351 m4_invoke (tempfile);
1352
1353 /* If `debugging', keep this file alive. */
1354 if (!trace_flag)
1355 unlink (tempfile);
1356
1357 free (tempfile);
1358 }
1359
1360 static void
1361 prepare (void)
1362 {
1363 /* Flags. */
1364 MUSCLE_INSERT_INT ("locations_flag", locations_flag);
1365 MUSCLE_INSERT_INT ("defines_flag", defines_flag);
1366 MUSCLE_INSERT_INT ("error_verbose", error_verbose);
1367 MUSCLE_INSERT_INT ("pure", pure_parser);
1368 MUSCLE_INSERT_INT ("debug", debug_flag);
1369
1370 /* FIXME: This is wrong: the muscles should decide whether they hold
1371 a copy or not, but the situation is too obscure currently. */
1372 MUSCLE_INSERT_STRING ("prefix", spec_name_prefix ? spec_name_prefix : "yy");
1373 MUSCLE_INSERT_STRING ("output_infix", output_infix ? output_infix : "");
1374 MUSCLE_INSERT_STRING ("output_prefix", short_base_name);
1375 MUSCLE_INSERT_STRING ("output_parser_name", parser_file_name);
1376 MUSCLE_INSERT_STRING ("output_header_name", spec_defines_file);
1377
1378 /* Symbols. */
1379 MUSCLE_INSERT_INT ("tokens_number", ntokens);
1380 MUSCLE_INSERT_INT ("nterms_number", nvars);
1381 MUSCLE_INSERT_INT ("undef_token_number", undeftoken->number);
1382 MUSCLE_INSERT_INT ("user_token_number_max", max_user_token_number);
1383
1384 /* Rules. */
1385 MUSCLE_INSERT_INT ("rules_number", nrules);
1386
1387 /* States. */
1388 MUSCLE_INSERT_INT ("last", high);
1389 MUSCLE_INSERT_INT ("final_state_number", final_state->number);
1390 MUSCLE_INSERT_INT ("states_number", nstates);
1391
1392 /* User Code. */
1393 obstack_1grow (&pre_prologue_obstack, 0);
1394 obstack_1grow (&post_prologue_obstack, 0);
1395 muscle_insert ("pre_prologue", obstack_finish (&pre_prologue_obstack));
1396 muscle_insert ("post_prologue", obstack_finish (&post_prologue_obstack));
1397
1398 /* Find the right skeleton file. */
1399 if (!skeleton)
1400 {
1401 if (glr_parser)
1402 skeleton = "glr.c";
1403 else
1404 skeleton = "yacc.c";
1405 }
1406
1407 /* Parse the skeleton file and output the needed parsers. */
1408 muscle_insert ("skeleton", skeleton);
1409 }
1410
1411
1412 /*----------------------------------------------------------.
1413 | Output the parsing tables and the parser code to ftable. |
1414 `----------------------------------------------------------*/
1415
1416 void
1417 output (void)
1418 {
1419 obstack_init (&format_obstack);
1420
1421 prepare_tokens ();
1422 prepare_rules ();
1423 prepare_states ();
1424 prepare_actions ();
1425
1426 prepare ();
1427
1428 /* Process the selected skeleton file. */
1429 output_skeleton ();
1430
1431 obstack_free (&format_obstack, NULL);
1432 obstack_free (&pre_prologue_obstack, NULL);
1433 obstack_free (&post_prologue_obstack, NULL);
1434 }