1 /* Output the generated parsing program for bison,
2 Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002
3 Free Software Foundation, Inc.
5 This file is part of Bison, the GNU Compiler Compiler.
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)
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.
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
23 /* The parser tables consist of these tables.
25 YYTRANSLATE = vector mapping yylex's token numbers into bison's
28 YYTNAME = vector of string-names indexed by bison token number.
30 YYTOKNUM = vector of yylex token numbers corresponding to entries
33 YYRLINE = vector of line-numbers of all rules. For yydebug
36 YYRHS = vector of items of all rules. This is exactly what RITEMS
37 contains. For yydebug and for semantic parser.
39 YYPRHS[R] = index in YYRHS of first item for rule R.
41 YYR1[R] = symbol number of symbol that rule R derives.
43 YYR2[R] = number of symbols composing right hand side of rule R.
45 YYSTOS[S] = the symbol number of the symbol that leads to state S.
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
51 YYDEFGOTO[I] = default state to go to after a reduction of a rule
52 that generates variable NTOKENS + I, except when YYTABLE specifies
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
59 If the value in YYTABLE is positive, we shift the token and go to
62 If the value is negative, it is minus a rule number to reduce by.
64 If the value is zero, the default action from YYDEFACT[S] is used.
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.
72 YYTABLE = a vector filled with portions for different uses, found
73 via YYPACT and YYPGOTO.
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
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.
85 YYFINAL = the state number of the termination state. YYFLAG = most
86 negative short int. Used to flag ?? */
101 #include "conflicts.h"
102 #include "muscle_tab.h"
104 /* From src/scan-skel.l. */
105 void m4_invoke
PARAMS ((const char *definitions
));
108 /* Several tables will be indexed both by state and nonterminal
109 numbers. We call `vector' such a thing (= either a state or a
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))
125 /* FROMS and TOS are indexed by vector_number_t.
127 If VECTOR is a nonterminal, (FROMS[VECTOR], TOS[VECTOR]) form an
128 array of state numbers of the non defaulted GOTO on VECTOR.
130 If VECTOR is a state, TOS[VECTOR] is the array of actions to do on
131 the (array of) symbols FROMS[VECTOR].
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 =
138 FROMS therefore contains symbol_number_t and action_number_t,
139 TOS state_number_t and action_number_t,
141 WIDTH differences of FROMS.
143 Let base_t be the type of FROMS, TOS, and WIDTH. */
145 #define BASE_MAX ((base_t) INT_MAX)
146 #define BASE_MIN ((base_t) INT_MIN)
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
;
155 /* For a given state, N = ACTROW[SYMBOL]:
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)
165 static action_t
*actrow
= NULL
;
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
;
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
;
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
;
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;
200 static struct obstack format_obstack
;
202 int error_verbose
= 0;
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 `----------------------------------------------------------------*/
212 table_grow (size_t desired
)
214 size_t old_size
= table_size
;
216 while (table_size
<= desired
)
220 fprintf (stderr
, "growing table and check from: %d to %d\n",
221 old_size
, table_size
);
223 table
= XREALLOC (table
, base_t
, table_size
);
224 check
= XREALLOC (check
, base_t
, table_size
);
226 conflict_table
= XREALLOC (conflict_table
, unsigned int, table_size
);
228 for (/* Nothing. */; old_size
< table_size
; ++old_size
)
231 check
[old_size
] = -1;
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 |
241 `-------------------------------------------------------------------*/
244 #define GENERATE_MUSCLE_INSERT_TABLE(Name, Type) \
247 Name (const char *name, \
258 obstack_fgrow1 (&format_obstack, "%6d", first); \
259 for (i = begin; i < end; ++i) \
261 obstack_1grow (&format_obstack, ','); \
264 obstack_sgrow (&format_obstack, "\n "); \
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]; \
275 obstack_1grow (&format_obstack, 0); \
276 muscle_insert (name, obstack_finish (&format_obstack)); \
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), \
283 obstack_fgrow1 (&format_obstack, "%s_max", name); \
284 obstack_1grow (&format_obstack, 0); \
285 MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), \
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
)
299 /*-----------------------------------------------------------------.
300 | Prepare the muscles related to the tokens: translate, tname, and |
302 `-----------------------------------------------------------------*/
305 prepare_tokens (void)
307 muscle_insert_symbol_number_table ("translate",
309 token_translations
[0],
310 1, max_user_token_number
+ 1);
315 for (i
= 0; i
< nsyms
; i
++)
317 /* Be sure not to use twice the same QUOTEARG slot:
318 SYMBOL_TAG_GET uses slot 0. */
320 quotearg_n_style (1, c_quoting_style
,
322 /* Width of the next token, including the two quotes, the coma
324 int strsize
= strlen (cp
) + 2;
326 if (j
+ strsize
> 75)
328 obstack_sgrow (&format_obstack
, "\n ");
332 obstack_sgrow (&format_obstack
, cp
);
333 obstack_sgrow (&format_obstack
, ", ");
336 /* Add a NULL entry to list of tokens (well, 0, as NULL might not be
338 obstack_sgrow (&format_obstack
, "0");
340 /* Finish table and store. */
341 obstack_1grow (&format_obstack
, 0);
342 muscle_insert ("tname", obstack_finish (&format_obstack
));
345 /* Output YYTOKNUM. */
348 int *values
= XCALLOC (int, ntokens
);
349 for (i
= 0; i
< ntokens
; ++i
)
350 values
[i
] = symbols
[i
]->user_token_number
;
351 muscle_insert_int_table ("toknum", values
,
352 values
[0], 1, ntokens
);
358 /*-------------------------------------------------------------.
359 | Prepare the muscles related to the rules: rhs, prhs, r1, r2, |
360 | rline, dprec, merger |
361 `-------------------------------------------------------------*/
368 item_number_t
*rhs
= XMALLOC (item_number_t
, nritems
);
369 unsigned int *prhs
= XMALLOC (unsigned int, nrules
);
370 unsigned int *rline
= XMALLOC (unsigned int, nrules
);
371 symbol_number_t
*r1
= XMALLOC (symbol_number_t
, nrules
);
372 unsigned int *r2
= XMALLOC (unsigned int, nrules
);
373 short *dprec
= XMALLOC (short, nrules
);
374 short *merger
= XMALLOC (short, nrules
);
376 for (r
= 0; r
< nrules
; ++r
)
378 item_number_t
*rhsp
= NULL
;
379 /* Index of rule R in RHS. */
381 /* RHS of the rule R. */
382 for (rhsp
= rules
[r
].rhs
; *rhsp
>= 0; ++rhsp
)
384 /* LHS of the rule R. */
385 r1
[r
] = rules
[r
].lhs
->number
;
386 /* Length of rule R's RHS. */
388 /* Separator in RHS. */
390 /* Line where rule was defined. */
391 rline
[r
] = rules
[r
].location
.first_line
;
392 /* Dynamic precedence (GLR) */
393 dprec
[r
] = rules
[r
].dprec
;
394 /* Merger-function index (GLR) */
395 merger
[r
] = rules
[r
].merger
;
397 assert (i
== nritems
);
399 muscle_insert_item_number_table ("rhs", rhs
, ritem
[0], 1, nritems
);
400 muscle_insert_unsigned_int_table ("prhs", prhs
, 0, 0, nrules
);
401 muscle_insert_unsigned_int_table ("rline", rline
, 0, 0, nrules
);
402 muscle_insert_symbol_number_table ("r1", r1
, 0, 0, nrules
);
403 muscle_insert_unsigned_int_table ("r2", r2
, 0, 0, nrules
);
404 muscle_insert_short_table ("dprec", dprec
, 0, 0, nrules
);
405 muscle_insert_short_table ("merger", merger
, 0, 0, nrules
);
416 /*--------------------------------------------.
417 | Prepare the muscles related to the states. |
418 `--------------------------------------------*/
421 prepare_states (void)
424 symbol_number_t
*values
=
425 (symbol_number_t
*) alloca (sizeof (symbol_number_t
) * nstates
);
426 for (i
= 0; i
< nstates
; ++i
)
427 values
[i
] = states
[i
]->accessing_symbol
;
428 muscle_insert_symbol_number_table ("stos", values
,
433 /*-------------------------------------------------------------------.
434 | For GLR parsers, for each conflicted token in STATE, as indicated |
435 | by non-zero entries in CONFLROW, create a list of possible |
436 | reductions that are alternatives to the shift or reduction |
437 | currently recorded for that token in STATE. Store the alternative |
438 | reductions followed by a 0 in CONFLICT_LIST, updating |
439 | CONFLICT_LIST_CNT, and storing an index to the start of the list |
440 | back into CONFLROW. |
441 `-------------------------------------------------------------------*/
444 conflict_row (state_t
*state
)
451 for (j
= 0; j
< ntokens
; j
+= 1)
454 conflrow
[j
] = conflict_list_cnt
;
456 /* Find all reductions for token J, and record all that do not
458 for (i
= 0; i
< state
->nlookaheads
; i
+= 1)
459 if (bitset_test (state
->lookaheads
[i
], j
)
461 != rule_number_as_item_number (state
->lookaheads_rule
[i
]->number
)))
463 assert (conflict_list_free
> 0);
464 conflict_list
[conflict_list_cnt
]
465 = state
->lookaheads_rule
[i
]->number
+ 1;
466 conflict_list_cnt
+= 1;
467 conflict_list_free
-= 1;
470 /* Leave a 0 at the end. */
471 assert (conflict_list_free
> 0);
472 conflict_list_cnt
+= 1;
473 conflict_list_free
-= 1;
478 /*------------------------------------------------------------------.
479 | Decide what to do for each type of token if seen as the lookahead |
480 | token in specified state. The value returned is used as the |
481 | default action (yydefact) for the state. In addition, ACTROW is |
482 | filled with what to do for each kind of token, index by symbol |
483 | number, with zero meaning do the default action. The value |
484 | ACTION_MIN, a very negative number, means this situation is an |
485 | error. The parser recognizes this value specially. |
487 | This is where conflicts are resolved. The loop over lookahead |
488 | rules considered lower-numbered rules last, and the last rule |
489 | considered that likes a token gets to handle it. |
491 | For GLR parsers, also sets CONFLROW[SYM] to an index into |
492 | CONFLICT_LIST iff there is an unresolved conflict (s/r or r/r) |
493 | with symbol SYM. The default reduction is not used for a symbol |
494 | that has any such conflicts. |
495 `------------------------------------------------------------------*/
498 action_row (state_t
*state
)
501 rule_t
*default_rule
= NULL
;
502 reductions_t
*redp
= state
->reductions
;
503 transitions_t
*transitions
= state
->transitions
;
504 errs_t
*errp
= state
->errs
;
505 /* Set to nonzero to inhibit having any default reduction. */
509 for (i
= 0; i
< ntokens
; i
++)
510 actrow
[i
] = conflrow
[i
] = 0;
515 bitset_iterator biter
;
516 /* loop over all the rules available here which require
518 for (i
= state
->nlookaheads
- 1; i
>= 0; --i
)
519 /* and find each token which the rule finds acceptable
521 BITSET_FOR_EACH (biter
, state
->lookaheads
[i
], j
, 0)
523 /* and record this rule as the rule to use if that
526 conflicted
= conflrow
[j
] = 1;
527 actrow
[j
] = rule_number_as_item_number (state
->lookaheads_rule
[i
]->number
);
531 /* Now see which tokens are allowed for shifts in this state. For
532 them, record the shift as the thing to do. So shift is preferred
534 FOR_EACH_SHIFT (transitions
, i
)
536 symbol_number_t symbol
= TRANSITION_SYMBOL (transitions
, i
);
537 state_t
*shift_state
= transitions
->states
[i
];
539 if (actrow
[symbol
] != 0)
540 conflicted
= conflrow
[symbol
] = 1;
541 actrow
[symbol
] = state_number_as_int (shift_state
->number
);
543 /* Do not use any default reduction if there is a shift for
545 if (symbol
== errtoken
->number
)
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
++)
553 symbol_t
*symbol
= errp
->symbols
[i
];
554 actrow
[symbol
->number
] = ACTION_MIN
;
557 /* Now find the most common reduction and make it the default action
560 if (redp
->num
>= 1 && !nodefault
)
562 if (state
->consistent
)
563 default_rule
= redp
->rules
[0];
567 for (i
= 0; i
< state
->nlookaheads
; i
++)
570 rule_t
*rule
= state
->lookaheads_rule
[i
];
573 for (j
= 0; j
< ntokens
; j
++)
574 if (actrow
[j
] == rule_number_as_item_number (rule
->number
))
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". */
593 for (j
= 0; j
< ntokens
; j
++)
594 if (actrow
[j
] == rule_number_as_item_number (default_rule
->number
)
595 && ! (glr_parser
&& conflrow
[j
]))
601 /* Find the rules which are reduced. */
604 for (i
= 0; i
< ntokens
; i
++)
605 if (actrow
[i
] < 0 && actrow
[i
] != ACTION_MIN
)
606 rules
[item_number_as_rule_number (actrow
[i
])].useful
= TRUE
;
608 default_rule
->useful
= TRUE
;
611 /* If have no default rule, the default is an error.
612 So replace any action which says "error" with "use default". */
615 for (i
= 0; i
< ntokens
; i
++)
616 if (actrow
[i
] == ACTION_MIN
)
620 conflict_row (state
);
626 /*--------------------------------------------.
627 | Set FROMS, TOS, TALLY and WIDTH for STATE. |
628 `--------------------------------------------*/
631 save_row (state_number_t state
)
638 unsigned int *sp3
= NULL
;
640 /* Number of non default actions in STATE. */
642 for (i
= 0; i
< ntokens
; i
++)
649 /* Allocate non defaulted actions. */
650 froms
[state
] = sp1
= sp
= XCALLOC (base_t
, count
);
651 tos
[state
] = sp2
= XCALLOC (base_t
, count
);
653 conflict_tos
[state
] = sp3
= XCALLOC (unsigned int, count
);
655 conflict_tos
[state
] = NULL
;
657 /* Store non defaulted actions. */
658 for (i
= 0; i
< ntokens
; i
++)
664 *sp3
++ = conflrow
[i
];
667 tally
[state
] = count
;
668 width
[state
] = sp1
[-1] - sp
[0] + 1;
672 /*------------------------------------------------------------------.
673 | Figure out the actions for the specified state, indexed by |
674 | lookahead token type. |
676 | The YYDEFACT table is output now. The detailed info is saved for |
677 | putting into YYTABLE later. |
678 `------------------------------------------------------------------*/
685 int nconflict
= conflicts_total_count ();
687 rule_number_t
*yydefact
= XCALLOC (rule_number_t
, nstates
);
689 actrow
= XCALLOC (action_t
, ntokens
);
690 conflrow
= XCALLOC (unsigned int, ntokens
);
692 /* Now that the parser was computed, we can find which rules are
693 really reduced, and which are not because of SR or RR conflicts.
696 for (r
= 0; r
< nrules
; ++r
)
697 rules
[r
].useful
= FALSE
;
701 conflict_list
= XCALLOC (unsigned int, 1 + 2 * nconflict
);
702 conflict_list_free
= 2 * nconflict
;
703 conflict_list_cnt
= 1;
706 conflict_list_free
= conflict_list_cnt
= 0;
708 for (i
= 0; i
< nstates
; ++i
)
710 rule_t
*default_rule
= action_row (states
[i
]);
711 yydefact
[i
] = default_rule
? default_rule
->number
+ 1 : 0;
715 muscle_insert_rule_number_table ("defact", yydefact
,
716 yydefact
[0], 1, nstates
);
719 for (r
= 0; r
< nrules
; ++r
)
720 if (!rules
[r
].useful
)
722 LOCATION_PRINT (stderr
, rules
[r
].location
);
723 fprintf (stderr
, ": %s: %s: ",
724 _("warning"), _("rule never reduced because of conflicts"));
725 rule_print (&rules
[r
], stderr
);
734 /*-----------------------------.
735 | Output the actions to OOUT. |
736 `-----------------------------*/
739 actions_output (FILE *out
)
743 fputs ("m4_define([b4_actions], \n[[", out
);
744 for (r
= 0; r
< nrules
; ++r
)
747 fprintf (out
, " case %d:\n", r
+ 1);
750 fprintf (out
, muscle_find ("linef"),
751 rules
[r
].action_location
.first_line
,
752 quotearg_style (c_quoting_style
,
753 muscle_find ("filename")));
754 fprintf (out
, " %s\n break;\n\n",
757 fputs ("]])\n\n", out
);
760 /*--------------------------------------.
761 | Output the merge functions to OUT. |
762 `--------------------------------------*/
765 merger_output (FILE *out
)
770 fputs ("m4_define([b4_mergers], \n[[", out
);
771 for (n
= 1, p
= merge_functions
; p
!= NULL
; n
+= 1, p
= p
->next
)
773 if (p
->type
[0] == '\0')
774 fprintf (out
, " case %d: yyval = %s (*yy0, *yy1); break;\n",
777 fprintf (out
, " case %d: yyval.%s = %s (*yy0, *yy1); break;\n",
778 n
, p
->type
, p
->name
);
780 fputs ("]])\n\n", out
);
783 /*---------------------------------------.
784 | Output the tokens definition to OOUT. |
785 `---------------------------------------*/
788 token_definitions_output (FILE *out
)
793 fputs ("m4_define([b4_tokens], \n[", out
);
794 for (i
= 0; i
< ntokens
; ++i
)
796 symbol_t
*symbol
= symbols
[i
];
797 int number
= symbol
->user_token_number
;
799 /* At this stage, if there are literal aliases, they are part of
800 SYMBOLS, so we should not find symbols which are the aliases
802 assert (number
!= USER_NUMBER_ALIAS
);
804 /* Skip error token. */
805 if (symbol
== errtoken
)
808 /* If this string has an alias, then it is necessarily the alias
809 which is to be output. */
811 symbol
= symbol
->alias
;
813 /* Don't output literal chars or strings (when defined only as a
814 string). Note that must be done after the alias resolution:
815 think about `%token 'f' "f"'. */
816 if (symbol
->tag
[0] == '\'' || symbol
->tag
[0] == '\"')
819 /* Don't #define nonliteral tokens whose names contain periods
820 or '$' (as does the default value of the EOF token). */
821 if (strchr (symbol
->tag
, '.') || strchr (symbol
->tag
, '$'))
824 fprintf (out
, "%s[[[%s]], [%d]]",
825 first
? "" : ",\n", symbol
->tag
, number
);
829 fputs ("])\n\n", out
);
833 /*----------------------------------------.
834 | Output the symbol destructors to OOUT. |
835 `----------------------------------------*/
838 symbol_destructors_output (FILE *out
)
843 fputs ("m4_define([b4_symbol_destructors], \n[", out
);
844 for (i
= 0; i
< nsyms
; ++i
)
845 if (symbols
[i
]->destructor
)
847 symbol_t
*symbol
= symbols
[i
];
850 Symbol-name, Symbol-number,
851 destructor, typename. */
852 fprintf (out
, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
854 infile
, symbol
->destructor_location
.first_line
,
862 fputs ("])\n\n", out
);
866 /*-------------------------------------.
867 | Output the symbol printers to OOUT. |
868 `-------------------------------------*/
871 symbol_printers_output (FILE *out
)
876 fputs ("m4_define([b4_symbol_printers], \n[", out
);
877 for (i
= 0; i
< nsyms
; ++i
)
878 if (symbols
[i
]->destructor
)
880 symbol_t
*symbol
= symbols
[i
];
883 Symbol-name, Symbol-number,
884 destructor, typename. */
885 fprintf (out
, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
887 infile
, symbol
->printer_location
.first_line
,
895 fputs ("])\n\n", out
);
899 /*------------------------------------------------------------------.
900 | Compute FROMS[VECTOR], TOS[VECTOR], TALLY[VECTOR], WIDTH[VECTOR], |
901 | i.e., the information related to non defaulted GOTO on the nterm |
904 | DEFAULT_STATE is the principal destination on SYMBOL, i.e., the |
905 | default GOTO destination on SYMBOL. |
906 `------------------------------------------------------------------*/
909 save_column (symbol_number_t symbol
, state_number_t default_state
)
916 vector_number_t symno
= symbol_number_to_vector_number (symbol
);
918 goto_number_t begin
= goto_map
[symbol
];
919 goto_number_t end
= goto_map
[symbol
+ 1];
921 /* Number of non default GOTO. */
923 for (i
= begin
; i
< end
; i
++)
924 if (to_state
[i
] != default_state
)
930 /* Allocate room for non defaulted gotos. */
931 froms
[symno
] = sp1
= sp
= XCALLOC (base_t
, count
);
932 tos
[symno
] = sp2
= XCALLOC (base_t
, count
);
934 /* Store the state numbers of the non defaulted gotos. */
935 for (i
= begin
; i
< end
; i
++)
936 if (to_state
[i
] != default_state
)
938 *sp1
++ = from_state
[i
];
939 *sp2
++ = to_state
[i
];
942 tally
[symno
] = count
;
943 width
[symno
] = sp1
[-1] - sp
[0] + 1;
947 /*----------------------------------------------------------------.
948 | Return `the' most common destination GOTO on SYMBOL (a nterm). |
949 `----------------------------------------------------------------*/
951 static state_number_t
952 default_goto (symbol_number_t symbol
, short state_count
[])
956 goto_number_t m
= goto_map
[symbol
];
957 goto_number_t n
= goto_map
[symbol
+ 1];
958 state_number_t default_state
= (state_number_t
) -1;
962 return (state_number_t
) -1;
964 for (s
= 0; s
< nstates
; s
++)
967 for (i
= m
; i
< n
; i
++)
968 state_count
[to_state
[i
]]++;
970 for (s
= 0; s
< nstates
; s
++)
971 if (state_count
[s
] > max
)
973 max
= state_count
[s
];
977 return default_state
;
981 /*-------------------------------------------------------------------.
982 | Figure out what to do after reducing with each rule, depending on |
983 | the saved state from before the beginning of parsing the data that |
984 | matched this rule. |
986 | The YYDEFGOTO table is output now. The detailed info is saved for |
987 | putting into YYTABLE later. |
988 `-------------------------------------------------------------------*/
994 state_number_t
*yydefgoto
= XMALLOC (state_number_t
, nvars
);
996 /* For a given nterm I, STATE_COUNT[S] is the number of times there
997 is a GOTO to S on I. */
998 short *state_count
= XCALLOC (short, nstates
);
999 for (i
= ntokens
; i
< nsyms
; ++i
)
1001 state_number_t default_state
= default_goto (i
, state_count
);
1002 save_column (i
, default_state
);
1003 yydefgoto
[i
- ntokens
] = default_state
;
1006 muscle_insert_state_number_table ("defgoto", yydefgoto
,
1007 yydefgoto
[0], 1, nsyms
- ntokens
);
1008 XFREE (state_count
);
1013 /*------------------------------------------------------------------.
1014 | Compute ORDER, a reordering of vectors, in order to decide how to |
1015 | pack the actions and gotos information into yytable. |
1016 `------------------------------------------------------------------*/
1025 for (i
= 0; i
< nvectors
; i
++)
1031 int j
= nentries
- 1;
1033 while (j
>= 0 && (width
[order
[j
]] < w
))
1036 while (j
>= 0 && (width
[order
[j
]] == w
) && (tally
[order
[j
]] < t
))
1039 for (k
= nentries
- 1; k
> j
; k
--)
1040 order
[k
+ 1] = order
[k
];
1048 /* If VECTOR is a state which actions (reflected by FROMS, TOS, TALLY
1049 and WIDTH of VECTOR) are common to a previous state, return this
1052 In any other case, return -1. */
1054 static state_number_t
1055 matching_state (vector_number_t vector
)
1057 vector_number_t i
= order
[vector
];
1062 /* If VECTOR is a nterm, return -1. */
1063 if (i
>= (int) nstates
)
1069 for (prev
= vector
- 1; prev
>= 0; prev
--)
1071 vector_number_t j
= order
[prev
];
1075 /* Given how ORDER was computed, if the WIDTH or TALLY is
1076 different, there cannot be a matching state. */
1077 if (width
[j
] != w
|| tally
[j
] != t
)
1080 for (k
= 0; match
&& k
< t
; k
++)
1081 if (tos
[j
][k
] != tos
[i
][k
] || froms
[j
][k
] != froms
[i
][k
])
1093 pack_vector (vector_number_t vector
)
1095 vector_number_t i
= order
[vector
];
1099 base_t
*from
= froms
[i
];
1100 base_t
*to
= tos
[i
];
1101 unsigned int *conflict_to
= conflict_tos
[i
];
1105 for (j
= lowzero
- from
[0]; j
< (int) table_size
; j
++)
1110 for (k
= 0; ok
&& k
< t
; k
++)
1112 loc
= j
+ state_number_as_int (from
[k
]);
1113 if (loc
> (int) table_size
)
1116 if (table
[loc
] != 0)
1120 for (k
= 0; ok
&& k
< vector
; k
++)
1126 for (k
= 0; k
< t
; k
++)
1130 if (glr_parser
&& conflict_to
!= NULL
)
1131 conflict_table
[loc
] = conflict_to
[k
];
1132 check
[loc
] = from
[k
];
1135 while (table
[lowzero
] != 0)
1141 if (j
< BASE_MIN
|| BASE_MAX
< j
)
1142 fatal ("base_t too small to hold %d\n", j
);
1146 #define pack_vector_succeeded 0
1147 assert (pack_vector_succeeded
);
1152 /*-------------------------------------------------------------.
1153 | Remap the negative infinite in TAB from NINF to the greatest |
1154 | possible smallest value. Return it. |
1156 | In most case this allows us to use shorts instead of ints in |
1158 `-------------------------------------------------------------*/
1161 table_ninf_remap (base_t tab
[], size_t size
, base_t ninf
)
1166 for (i
= 0; i
< size
; i
++)
1167 if (tab
[i
] < res
&& tab
[i
] != ninf
)
1172 for (i
= 0; i
< size
; i
++)
1184 base
= XCALLOC (base_t
, nvectors
);
1185 pos
= XCALLOC (base_t
, nentries
);
1186 table
= XCALLOC (base_t
, table_size
);
1188 conflict_table
= XCALLOC (unsigned int, table_size
);
1189 check
= XCALLOC (base_t
, table_size
);
1194 for (i
= 0; i
< nvectors
; i
++)
1197 for (i
= 0; i
< (int) table_size
; i
++)
1200 for (i
= 0; i
< nentries
; i
++)
1202 state_number_t state
= matching_state (i
);
1206 /* A new set of state actions, or a nonterminal. */
1207 place
= pack_vector (i
);
1209 /* Action of I were already coded for STATE. */
1210 place
= base
[state
];
1213 base
[order
[i
]] = place
;
1216 /* Use the greatest possible negative infinites. */
1217 base_ninf
= table_ninf_remap (base
, nvectors
, BASE_MIN
);
1218 table_ninf
= table_ninf_remap (table
, high
+ 1, ACTION_MIN
);
1220 for (i
= 0; i
< nvectors
; i
++)
1224 XFREE (conflict_tos
[i
]);
1229 free (conflict_tos
);
1234 /* the following functions output yytable, yycheck, yyconflp, yyconfl,
1235 and the vectors whose elements index the portion starts. */
1241 muscle_insert_base_table ("pact", base
,
1242 base
[0], 1, nstates
);
1243 MUSCLE_INSERT_INT ("pact_ninf", base_ninf
);
1246 muscle_insert_base_table ("pgoto", base
,
1247 base
[nstates
], nstates
+ 1, nvectors
);
1255 muscle_insert_base_table ("table", table
,
1256 table
[0], 1, high
+ 1);
1257 MUSCLE_INSERT_INT ("table_ninf", table_ninf
);
1263 output_conflicts (void)
1265 /* GLR parsing slightly modifies yytable and yycheck
1266 (and thus yypact) so that in states with unresolved conflicts,
1267 the default reduction is not used in the conflicted entries, so
1268 that there is a place to put a conflict pointer. This means that
1269 yyconflp and yyconfl are nonsense for a non-GLR parser, so we
1270 avoid accidents by not writing them out in that case. */
1274 muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table
,
1275 conflict_table
[0], 1, high
+1);
1276 muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list
,
1277 conflict_list
[0], 1, conflict_list_cnt
);
1279 XFREE (conflict_table
);
1280 XFREE (conflict_list
);
1287 muscle_insert_base_table ("check", check
,
1288 check
[0], 1, high
+ 1);
1292 /*-----------------------------------------------------------------.
1293 | Compute and output yydefact, yydefgoto, yypact, yypgoto, yytable |
1295 `-----------------------------------------------------------------*/
1298 prepare_actions (void)
1300 /* That's a poor way to make sure the sizes are properly corelated,
1301 in particular the signedness is not taking into account, but it's
1303 assert (sizeof (nvectors
) >= sizeof (nstates
));
1304 assert (sizeof (nvectors
) >= sizeof (nvars
));
1306 nvectors
= state_number_as_int (nstates
) + nvars
;
1308 froms
= XCALLOC (base_t
*, nvectors
);
1309 tos
= XCALLOC (base_t
*, nvectors
);
1310 conflict_tos
= XCALLOC (unsigned int *, nvectors
);
1311 tally
= XCALLOC (short, nvectors
);
1312 width
= XCALLOC (base_t
, nvectors
);
1319 XFREE (goto_map
+ ntokens
);
1323 order
= XCALLOC (vector_number_t
, nvectors
);
1333 output_conflicts ();
1339 /*---------------------------.
1340 | Call the skeleton parser. |
1341 `---------------------------*/
1344 output_skeleton (void)
1346 /* Store the definition of all the muscles. */
1347 const char *tempdir
= getenv ("TMPDIR");
1348 char *tempfile
= NULL
;
1352 if (tempdir
== NULL
)
1353 tempdir
= DEFAULT_TMPDIR
;
1354 tempfile
= xmalloc (strlen (tempdir
) + 11);
1355 sprintf (tempfile
, "%s/bsnXXXXXX", tempdir
);
1356 fd
= mkstemp (tempfile
);
1358 error (EXIT_FAILURE
, errno
, "%s", tempfile
);
1360 out
= fdopen (fd
, "w");
1362 error (EXIT_FAILURE
, errno
, "%s", tempfile
);
1364 /* There are no comments, especially not `#': we do want M4 expansion
1365 after `#': think of CPP macros! */
1366 fputs ("m4_changecom()\n", out
);
1367 fputs ("m4_init()\n", out
);
1369 actions_output (out
);
1370 merger_output (out
);
1371 token_definitions_output (out
);
1372 symbol_destructors_output (out
);
1373 symbol_printers_output (out
);
1375 muscles_m4_output (out
);
1377 fputs ("m4_wrap([m4_divert_pop(0)])\n", out
);
1378 fputs ("m4_divert_push(0)dnl\n", out
);
1381 m4_invoke (tempfile
);
1383 /* If `debugging', keep this file alive. */
1394 MUSCLE_INSERT_INT ("locations_flag", locations_flag
);
1395 MUSCLE_INSERT_INT ("defines_flag", defines_flag
);
1396 MUSCLE_INSERT_INT ("error_verbose", error_verbose
);
1397 MUSCLE_INSERT_INT ("pure", pure_parser
);
1398 MUSCLE_INSERT_INT ("debug", debug_flag
);
1400 /* FIXME: This is wrong: the muscles should decide whether they hold
1401 a copy or not, but the situation is too obscure currently. */
1402 MUSCLE_INSERT_STRING ("prefix", spec_name_prefix
? spec_name_prefix
: "yy");
1403 MUSCLE_INSERT_STRING ("output_infix", output_infix
? output_infix
: "");
1404 MUSCLE_INSERT_STRING ("output_prefix", short_base_name
);
1405 MUSCLE_INSERT_STRING ("output_parser_name", parser_file_name
);
1406 MUSCLE_INSERT_STRING ("output_header_name", spec_defines_file
);
1409 MUSCLE_INSERT_INT ("tokens_number", ntokens
);
1410 MUSCLE_INSERT_INT ("nterms_number", nvars
);
1411 MUSCLE_INSERT_INT ("undef_token_number", undeftoken
->number
);
1412 MUSCLE_INSERT_INT ("user_token_number_max", max_user_token_number
);
1415 MUSCLE_INSERT_INT ("rules_number", nrules
);
1418 MUSCLE_INSERT_INT ("last", high
);
1419 MUSCLE_INSERT_INT ("final_state_number", final_state
->number
);
1420 MUSCLE_INSERT_INT ("states_number", nstates
);
1423 obstack_1grow (&pre_prologue_obstack
, 0);
1424 obstack_1grow (&post_prologue_obstack
, 0);
1425 muscle_insert ("pre_prologue", obstack_finish (&pre_prologue_obstack
));
1426 muscle_insert ("post_prologue", obstack_finish (&post_prologue_obstack
));
1428 /* Find the right skeleton file. */
1434 skeleton
= "yacc.c";
1437 /* Parse the skeleton file and output the needed parsers. */
1438 muscle_insert ("skeleton", skeleton
);
1442 /*----------------------------------------------------------.
1443 | Output the parsing tables and the parser code to ftable. |
1444 `----------------------------------------------------------*/
1449 obstack_init (&format_obstack
);
1458 /* Process the selected skeleton file. */
1461 obstack_free (&format_obstack
, NULL
);
1462 obstack_free (&pre_prologue_obstack
, NULL
);
1463 obstack_free (&post_prologue_obstack
, NULL
);