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.  Marked ones needed only 
  24    for the semantic parser.  Double marked are output only if switches 
  27    YYTRANSLATE = vector mapping yylex's token numbers into bison's 
  30    ++ YYTNAME = vector of string-names indexed by bison token number. 
  32    ++ YYTOKNUM = vector of yylex token numbers corresponding to 
  35    YYRLINE = vector of line-numbers of all rules.  For yydebug 
  38    YYRHS = vector of items of all rules.  This is exactly what RITEMS 
  39    contains.  For yydebug and for semantic parser. 
  41    YYPRHS[R] = index in YYRHS of first item for rule R. 
  43    YYR1[R] = symbol number of symbol that rule R derives. 
  45    YYR2[R] = number of symbols composing right hand side of rule R. 
  47    + YYSTOS[S] = the symbol number of the symbol that leads to state 
  50    YYDEFACT[S] = default rule to reduce with in state s, when YYTABLE 
  51    doesn't specify something else to do.  Zero means the default is an 
  54    YYDEFGOTO[I] = default state to go to after a reduction of a rule 
  55    that generates variable NTOKENS + I, except when YYTABLE specifies 
  58    YYPACT[S] = index in YYTABLE of the portion describing state S. 
  59    The lookahead token's type is used to index that portion to find 
  62    If the value in YYTABLE is positive, we shift the token and go to 
  65    If the value is negative, it is minus a rule number to reduce by. 
  67    If the value is zero, the default action from YYDEFACT[S] is used. 
  69    YYPGOTO[I] = the index in YYTABLE of the portion describing what to 
  70    do after reducing a rule that derives variable I + NTOKENS.  This 
  71    portion is indexed by the parser state number, S, as of before the 
  72    text for this nonterminal was read.  The value from YYTABLE is the 
  73    state to go to if the corresponding value in YYCHECK is S. 
  75    YYTABLE = a vector filled with portions for different uses, found 
  76    via YYPACT and YYPGOTO. 
  78    YYCHECK = a vector indexed in parallel with YYTABLE.  It indicates, 
  79    in a roundabout way, the bounds of the portion you are trying to 
  82    Suppose that the portion of yytable starts at index P and the index 
  83    to be examined within the portion is I.  Then if YYCHECK[P+I] != I, 
  84    I is outside the bounds of what is actually allocated, and the 
  85    default (from YYDEFACT or YYDEFGOTO) should be used.  Otherwise, 
  86    YYTABLE[P+I] should be used. 
  88    YYFINAL = the state number of the termination state.  YYFLAG = most 
  89    negative short int.  Used to flag ??  */ 
 104 #include "conflicts.h" 
 105 #include "muscle_tab.h" 
 107 /* From lib/readpipe.h.  */ 
 108 FILE *readpipe 
PARAMS ((const char *, ...)); 
 110 /* From src/scan-skel.l. */ 
 111 int skel_lex 
PARAMS ((void)); 
 112 extern FILE *skel_in
; 
 116 static short **froms 
= NULL
; 
 117 static short **tos 
= NULL
; 
 118 static unsigned int **conflict_tos 
= NULL
; 
 119 static short *tally 
= NULL
; 
 120 static short *width 
= NULL
; 
 121 static short *actrow 
= NULL
; 
 122 static short *conflrow 
= NULL
; 
 123 static short *state_count 
= NULL
; 
 124 static short *order 
= NULL
; 
 125 static short *base 
= NULL
; 
 126 static short *pos 
= NULL
; 
 128 static unsigned int *conflict_table 
= NULL
; 
 129 static unsigned int *conflict_list 
= NULL
; 
 130 static int conflict_list_cnt
; 
 131 static int conflict_list_free
; 
 133 /* TABLE_SIZE is the allocated size of both TABLE and CHECK. 
 134    We start with the original hard-coded value: SHRT_MAX 
 135    (yes, not USHRT_MAX). */ 
 136 static size_t table_size 
= SHRT_MAX
; 
 137 static short *table 
= NULL
; 
 138 static short *check 
= NULL
; 
 142 static struct obstack format_obstack
; 
 144 int error_verbose 
= 0; 
 147 /*----------------------------------------------------------------. 
 148 | If TABLE (and CHECK) appear to be small to be addressed at      | 
 149 | DESIRED, grow them.  Note that TABLE[DESIRED] is to be used, so | 
 150 | the desired size is at least DESIRED + 1.                       | 
 151 `----------------------------------------------------------------*/ 
 154 table_grow (size_t desired
) 
 156   size_t old_size 
= table_size
; 
 158   while (table_size 
<= desired
) 
 162     fprintf (stderr
, "growing table and check from: %d to %d\n", 
 163              old_size
, table_size
); 
 165   table 
= XREALLOC (table
, short, table_size
); 
 166   check 
= XREALLOC (check
, short, table_size
); 
 168     conflict_table 
= XREALLOC (conflict_table
, unsigned int, table_size
); 
 170   for (/* Nothing. */; old_size 
< table_size
; ++old_size
) 
 173       check
[old_size
] = -1; 
 178 /*-------------------------------------------------------------------. 
 179 | Create a function NAME which associates to the muscle NAME the     | 
 180 | result of formatting the FIRST and then TABLE_DATA[BEGIN..END[ (of | 
 181 | TYPE), and to the muscle NAME_max, the max value of the            | 
 183 `-------------------------------------------------------------------*/ 
 186 #define GENERATE_MUSCLE_INSERT_TABLE(Name, Type)                        \ 
 189 Name (const char *name,                                                 \ 
 199   obstack_fgrow1 (&format_obstack, "%6d", first);                       \ 
 200   for (i = begin; i < end; ++i)                                         \ 
 202       obstack_1grow (&format_obstack, ',');                             \ 
 205           obstack_sgrow (&format_obstack, "\n  ");                      \ 
 210       obstack_fgrow1 (&format_obstack, "%6d", table_data[i]);           \ 
 211       if (table_data[i] > max)                                          \ 
 212         max = table_data[i];                                            \ 
 214   obstack_1grow (&format_obstack, 0);                                   \ 
 215   muscle_insert (name, obstack_finish (&format_obstack));               \ 
 217   /* Build `NAME_max' in the obstack. */                                \ 
 218   obstack_fgrow1 (&format_obstack, "%s_max", name);                     \ 
 219   obstack_1grow (&format_obstack, 0);                                   \ 
 220   MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack),             \ 
 224 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_unsigned_int_table
, unsigned int) 
 225 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_short_table
, short) 
 226 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_symbol_number_table
, symbol_number_t
) 
 227 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_item_number_table
, item_number_t
) 
 228 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_state_number_table
, state_number_t
) 
 231 /*-----------------------------------------------------------------. 
 232 | Prepare the muscles related to the tokens: translate, tname, and | 
 234 `-----------------------------------------------------------------*/ 
 237 prepare_tokens (void) 
 239   muscle_insert_symbol_number_table ("translate", 
 241                                     0, 1, max_user_token_number 
+ 1); 
 246     for (i 
= 0; i 
< nsyms
; i
++) 
 248         /* Be sure not to use twice the same QUOTEARG slot: 
 249            SYMBOL_TAG_GET uses slot 0.  */ 
 251           quotearg_n_style (1, c_quoting_style
, 
 253         /* Width of the next token, including the two quotes, the coma 
 255         int strsize 
= strlen (cp
) + 2; 
 257         if (j 
+ strsize 
> 75) 
 259             obstack_sgrow (&format_obstack
, "\n  "); 
 263         obstack_sgrow (&format_obstack
, cp
); 
 264         obstack_sgrow (&format_obstack
, ", "); 
 267     /* Add a NULL entry to list of tokens (well, 0, as NULL might not be 
 269     obstack_sgrow (&format_obstack
, "0"); 
 271     /* Finish table and store. */ 
 272     obstack_1grow (&format_obstack
, 0); 
 273     muscle_insert ("tname", obstack_finish (&format_obstack
)); 
 276     /* Output YYTOKNUM. */ 
 279     short *values 
= XCALLOC (short, ntokens 
+ 1); 
 280     for (i 
= 0; i 
< ntokens 
+ 1; ++i
) 
 281       values
[i
] = symbols
[i
]->user_token_number
; 
 282     muscle_insert_short_table ("toknum", values
, 
 289 /*-------------------------------------------------------------. 
 290 | Prepare the muscles related to the rules: rhs, prhs, r1, r2, | 
 291 | rline, dprec, merger                                         | 
 292 `-------------------------------------------------------------*/ 
 299   item_number_t 
*rhs 
= XMALLOC (item_number_t
, nritems
); 
 300   unsigned int *prhs 
= XMALLOC (unsigned int, nrules 
+ 1); 
 301   unsigned int *rline 
= XMALLOC (unsigned int, nrules 
+ 1); 
 302   symbol_number_t 
*r1 
= XMALLOC (symbol_number_t
, nrules 
+ 1); 
 303   unsigned int *r2 
= XMALLOC (unsigned int, nrules 
+ 1); 
 304   short *dprec 
= XMALLOC (short, nrules 
+ 1); 
 305   short *merger 
= XMALLOC (short, nrules 
+ 1); 
 307   for (r 
= 1; r 
< nrules 
+ 1; ++r
) 
 309       item_number_t 
*rhsp 
= NULL
; 
 310       /* Index of rule R in RHS. */ 
 312       /* RHS of the rule R. */ 
 313       for (rhsp 
= rules
[r
].rhs
; *rhsp 
>= 0; ++rhsp
) 
 315       /* LHS of the rule R. */ 
 316       r1
[r
] = rules
[r
].lhs
->number
; 
 317       /* Length of rule R's RHS. */ 
 319       /* Separator in RHS. */ 
 321       /* Line where rule was defined. */ 
 322       rline
[r
] = rules
[r
].location
.first_line
; 
 323       /* Dynamic precedence (GLR) */ 
 324       dprec
[r
] = rules
[r
].dprec
; 
 325       /* Merger-function index (GLR) */ 
 326       merger
[r
] = rules
[r
].merger
; 
 328   assert (i 
== nritems
); 
 330   muscle_insert_item_number_table ("rhs", rhs
, ritem
[0], 1, nritems
); 
 331   muscle_insert_unsigned_int_table ("prhs", prhs
, 0, 1, nrules 
+ 1); 
 332   muscle_insert_unsigned_int_table ("rline", rline
, 0, 1, nrules 
+ 1); 
 333   muscle_insert_symbol_number_table ("r1", r1
, 0, 1, nrules 
+ 1); 
 334   muscle_insert_unsigned_int_table ("r2", r2
, 0, 1, nrules 
+ 1); 
 335   muscle_insert_short_table ("dprec", dprec
, 0, 1, nrules 
+ 1); 
 336   muscle_insert_short_table ("merger", merger
, 0, 1, nrules 
+ 1); 
 347 /*--------------------------------------------. 
 348 | Prepare the muscles related to the states.  | 
 349 `--------------------------------------------*/ 
 352 prepare_states (void) 
 355   symbol_number_t 
*values 
= 
 356     (symbol_number_t 
*) alloca (sizeof (symbol_number_t
) * nstates
); 
 357   for (i 
= 0; i 
< nstates
; ++i
) 
 358     values
[i
] = states
[i
]->accessing_symbol
; 
 359   muscle_insert_symbol_number_table ("stos", values
, 
 364 /*-------------------------------------------------------------------. 
 365 | For GLR parsers, for each conflicted token in STATE, as indicated  | 
 366 | by non-zero entries in conflrow, create a list of possible         | 
 367 | reductions that are alternatives to the shift or reduction         | 
 368 | currently recorded for that token in STATE.  Store the alternative | 
 369 | reductions followed by a 0 in conflict_list, updating              | 
 370 | conflict_list_cnt, and storing an index to the start of the list   | 
 371 | back into conflrow.                                                | 
 372 `-------------------------------------------------------------------*/ 
 375 conflict_row (state_t 
*state
) 
 382   for (j 
= 0; j 
< ntokens
; j 
+= 1) 
 385         conflrow
[j
] = conflict_list_cnt
; 
 387         /* find all reductions for token j, and record all that do 
 388          * not match actrow[j] */ 
 389         for (i 
= 0; i 
< state
->nlookaheads
; i 
+= 1) 
 390           if (bitset_test (state
->lookaheads
[i
], j
) 
 391               && actrow
[j
] != -state
->lookaheads_rule
[i
]->number
) 
 393               assert (conflict_list_free 
> 0); 
 394               conflict_list
[conflict_list_cnt
] 
 395                 = state
->lookaheads_rule
[i
]->number
; 
 396               conflict_list_cnt 
+= 1; 
 397               conflict_list_free 
-= 1; 
 400         /* Leave a 0 at the end */ 
 401         assert (conflict_list_free 
> 0); 
 402         conflict_list_cnt 
+= 1; 
 403         conflict_list_free 
-= 1; 
 408 /*------------------------------------------------------------------. 
 409 | Decide what to do for each type of token if seen as the lookahead | 
 410 | token in specified state.  The value returned is used as the      | 
 411 | default action (yydefact) for the state.  In addition, actrow is  | 
 412 | filled with what to do for each kind of token, index by symbol    | 
 413 | number, with zero meaning do the default action.  The value       | 
 414 | SHRT_MIN, a very negative number, means this situation is an      | 
 415 | error.  The parser recognizes this value specially.               | 
 417 | This is where conflicts are resolved.  The loop over lookahead    | 
 418 | rules considered lower-numbered rules last, and the last rule     | 
 419 | considered that likes a token gets to handle it.                  | 
 421 | For GLR parsers, also sets conflrow[SYM] to an index into         | 
 422 | conflict_list iff there is an unresolved conflict (s/r or r/r)    | 
 423 | with symbol SYM. The default reduction is not used for a symbol   | 
 424 | that has any such conflicts.                                      | 
 425 `------------------------------------------------------------------*/ 
 428 action_row (state_t 
*state
) 
 431   rule_number_t default_rule 
= 0; 
 432   reductions_t 
*redp 
= state
->reductions
; 
 433   transitions_t 
*transitions 
= state
->shifts
; 
 434   errs_t 
*errp 
= state
->errs
; 
 435   /* set nonzero to inhibit having any default reduction */ 
 439   for (i 
= 0; i 
< ntokens
; i
++) 
 440     actrow
[i
] = conflrow
[i
] = 0; 
 445       bitset_iterator biter
; 
 446       /* loop over all the rules available here which require 
 448       for (i 
= state
->nlookaheads 
- 1; i 
>= 0; --i
) 
 449         /* and find each token which the rule finds acceptable 
 451         BITSET_FOR_EACH (biter
, state
->lookaheads
[i
], j
, 0) 
 453           /* and record this rule as the rule to use if that 
 456             conflicted 
= conflrow
[j
] = 1; 
 457           actrow
[j
] = -state
->lookaheads_rule
[i
]->number
; 
 461   /* Now see which tokens are allowed for shifts in this state.  For 
 462      them, record the shift as the thing to do.  So shift is preferred 
 464   for (i 
= 0; i 
< transitions
->num 
&& TRANSITION_IS_SHIFT (transitions
, i
); i
++) 
 465     if (!TRANSITION_IS_DISABLED (transitions
, i
)) 
 467         symbol_number_t symbol 
= TRANSITION_SYMBOL (transitions
, i
); 
 468         state_number_t shift_state 
= transitions
->states
[i
]; 
 470         if (actrow
[symbol
] != 0) 
 471           conflicted 
= conflrow
[symbol
] = 1; 
 472         actrow
[symbol
] = state_number_as_int (shift_state
); 
 474         /* Do not use any default reduction if there is a shift for 
 476         if (symbol 
== errtoken
->number
) 
 480   /* See which tokens are an explicit error in this state (due to 
 481      %nonassoc).  For them, record SHRT_MIN as the action.  */ 
 482   for (i 
= 0; i 
< errp
->num
; i
++) 
 484       symbol_number_t symbol 
= errp
->symbols
[i
]; 
 485       actrow
[symbol
] = SHRT_MIN
; 
 488   /* Now find the most common reduction and make it the default action 
 491   if (redp
->num 
>= 1 && !nodefault
) 
 493       if (state
->consistent
) 
 494         default_rule 
= redp
->rules
[0]; 
 498           for (i 
= 0; i 
< state
->nlookaheads
; i
++) 
 501               rule_number_t rule 
= state
->lookaheads_rule
[i
]->number
; 
 504               for (j 
= 0; j 
< ntokens
; j
++) 
 505                 if (actrow
[j
] == -rule
) 
 515           /* GLR parsers need space for conflict lists, so we can't 
 516              default conflicted entries.  For non-conflicted entries 
 517              or as long as we are not building a GLR parser, 
 518              actions that match the default are replaced with zero, 
 519              which means "use the default". */ 
 524               for (j 
= 0; j 
< ntokens
; j
++) 
 525                 if (actrow
[j
] == -default_rule
 
 526                     && ! (glr_parser 
&& conflrow
[j
])) 
 532   /* If have no default rule, the default is an error. 
 533      So replace any action which says "error" with "use default".  */ 
 535   if (default_rule 
== 0) 
 536     for (i 
= 0; i 
< ntokens
; i
++) 
 537       if (actrow
[i
] == SHRT_MIN
) 
 541     conflict_row (state
); 
 548 save_row (state_number_t state
) 
 555   unsigned int *sp3 
= NULL
; 
 558   for (i 
= 0; i 
< ntokens
; i
++) 
 565   froms
[state
] = sp1 
= sp 
= XCALLOC (short, count
); 
 566   tos
[state
] = sp2 
= XCALLOC (short, count
); 
 568     conflict_tos
[state
] = sp3 
= XCALLOC (unsigned int, count
); 
 570     conflict_tos
[state
] = NULL
; 
 572   for (i 
= 0; i 
< ntokens
; i
++) 
 578           *sp3
++ = conflrow
[i
]; 
 581   tally
[state
] = count
; 
 582   width
[state
] = sp1
[-1] - sp
[0] + 1; 
 586 /*------------------------------------------------------------------. 
 587 | Figure out the actions for the specified state, indexed by        | 
 588 | lookahead token type.                                             | 
 590 | The YYDEFACT table is output now.  The detailed info is saved for | 
 591 | putting into YYTABLE later.                                       | 
 592 `------------------------------------------------------------------*/ 
 598   int nconflict 
= conflicts_total_count (); 
 600   short *yydefact 
= XCALLOC (short, nstates
); 
 602   actrow 
= XCALLOC (short, ntokens
); 
 604   conflrow 
= XCALLOC (short, ntokens
); 
 607       conflict_list 
= XCALLOC (unsigned int, 1 + 2 * nconflict
); 
 608       conflict_list_free 
= 2 * nconflict
; 
 609       conflict_list_cnt 
= 1; 
 612     conflict_list_free 
= conflict_list_cnt 
= 0; 
 614   for (i 
= 0; i 
< nstates
; ++i
) 
 616       yydefact
[i
] = action_row (states
[i
]); 
 620   muscle_insert_short_table ("defact", yydefact
, 
 621                              yydefact
[0], 1, nstates
); 
 628 /*-----------------------------. 
 629 | Output the actions to OOUT.  | 
 630 `-----------------------------*/ 
 633 actions_output (FILE *out
) 
 637   fputs ("m4_define([b4_actions], \n[[", out
); 
 638   for (r 
= 1; r 
< nrules 
+ 1; ++r
) 
 641         fprintf (out
, "  case %d:\n", r
); 
 644           fprintf (out
, muscle_find ("linef"), 
 645                    rules
[r
].action_location
.first_line
, 
 646                    quotearg_style (c_quoting_style
, 
 647                                    muscle_find ("filename"))); 
 648         fprintf (out
, "    %s\n    break;\n\n", 
 651   fputs ("]])\n\n", out
); 
 654 /*--------------------------------------. 
 655 | Output the merge functions to OUT.   | 
 656 `--------------------------------------*/ 
 659 merger_output (FILE *out
) 
 664   fputs ("m4_define([b4_mergers], \n[[", out
); 
 665   for (n 
= 1, p 
= merge_functions
; p 
!= NULL
; n 
+= 1, p 
= p
->next
) 
 667       if (p
->type
[0] == '\0') 
 668         fprintf (out
, "  case %d: yyval = %s (*yy0, *yy1); break;\n", 
 671         fprintf (out
, "  case %d: yyval.%s = %s (*yy0, *yy1); break;\n", 
 672                  n
, p
->type
, p
->name
); 
 674   fputs ("]])\n\n", out
); 
 677 /*---------------------------------------. 
 678 | Output the tokens definition to OOUT.  | 
 679 `---------------------------------------*/ 
 682 token_definitions_output (FILE *out
) 
 687   fputs ("m4_define([b4_tokens], \n[", out
); 
 688   for (i 
= 0; i 
< ntokens
; ++i
) 
 690       symbol_t 
*symbol 
= symbols
[i
]; 
 691       int number 
= symbol
->user_token_number
; 
 693       /* At this stage, if there are literal aliases, they are part of 
 694          SYMBOLS, so we should not find symbols which are the aliases 
 696       assert (number 
!= USER_NUMBER_ALIAS
); 
 698       /* Skip error token.  */ 
 699       if (symbol 
== errtoken
) 
 702       /* If this string has an alias, then it is necessarily the alias 
 703          which is to be output.  */ 
 705         symbol 
= symbol
->alias
; 
 707       /* Don't output literal chars or strings (when defined only as a 
 708          string).  Note that must be done after the alias resolution: 
 709          think about `%token 'f' "f"'.  */ 
 710       if (symbol
->tag
[0] == '\'' || symbol
->tag
[0] == '\"') 
 713       /* Don't #define nonliteral tokens whose names contain periods 
 714          or '$' (as does the default value of the EOF token).  */ 
 715       if (strchr (symbol
->tag
, '.') || strchr (symbol
->tag
, '$')) 
 718       fprintf (out
, "%s[[[%s]], [%d]]", 
 719                first 
? "" : ",\n", symbol
->tag
, number
); 
 723   fputs ("])\n\n", out
); 
 727 /*----------------------------------------. 
 728 | Output the symbol destructors to OOUT.  | 
 729 `----------------------------------------*/ 
 732 symbol_destructors_output (FILE *out
) 
 737   fputs ("m4_define([b4_symbol_destructors], \n[", out
); 
 738   for (i 
= 0; i 
< nsyms
; ++i
) 
 739     if (symbols
[i
]->destructor
) 
 741         symbol_t 
*symbol 
= symbols
[i
]; 
 744            Symbol-name, Symbol-number, 
 745            destructor, typename. */ 
 746         fprintf (out
, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]", 
 748                  infile
, symbol
->destructor_location
.first_line
, 
 756   fputs ("])\n\n", out
); 
 760 /*-------------------------------------. 
 761 | Output the symbol printers to OOUT.  | 
 762 `-------------------------------------*/ 
 765 symbol_printers_output (FILE *out
) 
 770   fputs ("m4_define([b4_symbol_printers], \n[", out
); 
 771   for (i 
= 0; i 
< nsyms
; ++i
) 
 772     if (symbols
[i
]->destructor
) 
 774         symbol_t 
*symbol 
= symbols
[i
]; 
 777            Symbol-name, Symbol-number, 
 778            destructor, typename. */ 
 779         fprintf (out
, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]", 
 781                  infile
, symbol
->printer_location
.first_line
, 
 789   fputs ("])\n\n", out
); 
 794 save_column (symbol_number_t symbol
, state_number_t default_state
) 
 801   int symno 
= symbol 
- ntokens 
+ state_number_as_int (nstates
); 
 803   int begin 
= goto_map
[symbol
]; 
 804   int end 
= goto_map
[symbol 
+ 1]; 
 807   for (i 
= begin
; i 
< end
; i
++) 
 808     if (to_state
[i
] != default_state
) 
 814   froms
[symno
] = sp1 
= sp 
= XCALLOC (short, count
); 
 815   tos
[symno
] = sp2 
= XCALLOC (short, count
); 
 817   for (i 
= begin
; i 
< end
; i
++) 
 818     if (to_state
[i
] != default_state
) 
 820         *sp1
++ = from_state
[i
]; 
 821         *sp2
++ = to_state
[i
]; 
 824   tally
[symno
] = count
; 
 825   width
[symno
] = sp1
[-1] - sp
[0] + 1; 
 829 static state_number_t
 
 830 default_goto (symbol_number_t symbol
) 
 834   int m 
= goto_map
[symbol
]; 
 835   int n 
= goto_map
[symbol 
+ 1]; 
 836   state_number_t default_state 
= (state_number_t
) -1; 
 840     return (state_number_t
) -1; 
 842   for (s 
= 0; s 
< nstates
; s
++) 
 845   for (i 
= m
; i 
< n
; i
++) 
 846     state_count
[to_state
[i
]]++; 
 848   for (s 
= 0; s 
< nstates
; s
++) 
 849     if (state_count
[s
] > max
) 
 851         max 
= state_count
[s
]; 
 855   return default_state
; 
 859 /*-------------------------------------------------------------------. 
 860 | Figure out what to do after reducing with each rule, depending on  | 
 861 | the saved state from before the beginning of parsing the data that | 
 862 | matched this rule.                                                 | 
 864 | The YYDEFGOTO table is output now.  The detailed info is saved for | 
 865 | putting into YYTABLE later.                                        | 
 866 `-------------------------------------------------------------------*/ 
 872   state_number_t 
*yydefgoto 
= XMALLOC (state_number_t
, nsyms 
- ntokens
); 
 874   state_count 
= XCALLOC (short, nstates
); 
 875   for (i 
= ntokens
; i 
< nsyms
; ++i
) 
 877       state_number_t default_state 
= default_goto (i
); 
 878       save_column (i
, default_state
); 
 879       yydefgoto
[i 
- ntokens
] = default_state
; 
 882   muscle_insert_state_number_table ("defgoto", yydefgoto
, 
 883                                     yydefgoto
[0], 1, nsyms 
- ntokens
); 
 889 /* The next few functions decide how to pack the actions and gotos 
 890    information into yytable. */ 
 897   order 
= XCALLOC (short, nvectors
); 
 900   for (i 
= 0; i 
< nvectors
; i
++) 
 906         int j 
= nentries 
- 1; 
 908         while (j 
>= 0 && (width
[order
[j
]] < w
)) 
 911         while (j 
>= 0 && (width
[order
[j
]] == w
) && (tally
[order
[j
]] < t
)) 
 914         for (k 
= nentries 
- 1; k 
> j
; k
--) 
 915           order
[k 
+ 1] = order
[k
]; 
 924 matching_state (int vector
) 
 926   int i 
= order
[vector
]; 
 931   if (i 
>= (int) nstates
) 
 937   for (prev 
= vector 
- 1; prev 
>= 0; prev
--) 
 943       if (width
[j
] != w 
|| tally
[j
] != t
) 
 946       for (k 
= 0; match 
&& k 
< t
; k
++) 
 947         if (tos
[j
][k
] != tos
[i
][k
] || froms
[j
][k
] != froms
[i
][k
]) 
 959 pack_vector (int vector
) 
 961   int i 
= order
[vector
]; 
 965   short *from 
= froms
[i
]; 
 967   unsigned int *conflict_to 
= conflict_tos
[i
]; 
 971   for (j 
= lowzero 
- from
[0]; j 
< (int) table_size
; j
++) 
 976       for (k 
= 0; ok 
&& k 
< t
; k
++) 
 978           loc 
= j 
+ state_number_as_int (from
[k
]); 
 979           if (loc 
> (int) table_size
) 
 986       for (k 
= 0; ok 
&& k 
< vector
; k
++) 
 992           for (k 
= 0; k 
< t
; k
++) 
 994               loc 
= j 
+ state_number_as_int (from
[k
]); 
 995               table
[loc
] = state_number_as_int (to
[k
]); 
 996               if (glr_parser 
&& conflict_to 
!= NULL
) 
 997                 conflict_table
[loc
] = conflict_to
[k
]; 
 998               check
[loc
] = state_number_as_int (from
[k
]); 
1001           while (table
[lowzero
] != 0) 
1010 #define pack_vector_succeeded 0 
1011   assert (pack_vector_succeeded
); 
1023   base 
= XCALLOC (short, nvectors
); 
1024   pos 
= XCALLOC (short, nentries
); 
1025   table 
= XCALLOC (short, table_size
); 
1027     conflict_table 
= XCALLOC (unsigned int, table_size
); 
1028   check 
= XCALLOC (short, table_size
); 
1033   for (i 
= 0; i 
< nvectors
; i
++) 
1036   for (i 
= 0; i 
< (int) table_size
; i
++) 
1039   for (i 
= 0; i 
< nentries
; i
++) 
1041       state 
= matching_state (i
); 
1044         place 
= pack_vector (i
); 
1046         place 
= base
[state
]; 
1049       base
[order
[i
]] = place
; 
1052   for (i 
= 0; i 
< nvectors
; i
++) 
1056       XFREE (conflict_tos
[i
]); 
1061   XFREE (conflict_tos
); 
1065 /* the following functions output yytable, yycheck, yyconflp, yyconfl, 
1066    and the vectors whose elements index the portion starts */ 
1072   muscle_insert_short_table ("pact", base
, 
1073                              base
[0], 1, nstates
); 
1076   muscle_insert_short_table ("pgoto", base
, 
1077                              base
[nstates
], nstates 
+ 1, nvectors
); 
1085   muscle_insert_short_table ("table", table
, 
1086                              table
[0], 1, high 
+ 1); 
1092 output_conflicts (void) 
1094   /* GLR parsing slightly modifies yytable and yycheck 
1095      (and thus yypact) so that in states with unresolved conflicts, 
1096      the default reduction is not used in the conflicted entries, so 
1097      that there is a place to put a conflict pointer.  This means that 
1098      yyconflp and yyconfl are nonsense for a non-GLR parser, so we 
1099      avoid accidents by not writing them out in that case. */ 
1103   muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table
, 
1104                                     conflict_table
[0], 1, high
+1); 
1105   muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list
, 
1106                              conflict_list
[0], 1, conflict_list_cnt
); 
1108   XFREE (conflict_table
); 
1109   XFREE (conflict_list
); 
1116   muscle_insert_short_table ("check", check
, 
1117                              check
[0], 1, high 
+ 1); 
1121 /*-----------------------------------------------------------------. 
1122 | Compute and output yydefact, yydefgoto, yypact, yypgoto, yytable | 
1124 `-----------------------------------------------------------------*/ 
1127 output_actions (void) 
1129   /* That's a poor way to make sure the sizes are properly corelated, 
1130      in particular the signedness is not taking into account, but it's 
1132   assert (sizeof (nvectors
) >= sizeof (nstates
)); 
1133   assert (sizeof (nvectors
) >= sizeof (nvars
)); 
1135   nvectors 
= state_number_as_int (nstates
) + nvars
; 
1137   froms 
= XCALLOC (short *, nvectors
); 
1138   tos 
= XCALLOC (short *, nvectors
); 
1139   conflict_tos 
= XCALLOC (unsigned int *, nvectors
); 
1140   tally 
= XCALLOC (short, nvectors
); 
1141   width 
= XCALLOC (short, nvectors
); 
1148   XFREE (goto_map 
+ ntokens
); 
1157   output_conflicts (); 
1163 /*----------------------. 
1164 | Run our backend, M4.  | 
1165 `----------------------*/ 
1168 m4_invoke (const char *definitions
) 
1170   /* Invoke m4 on the definition of the muscles, and the skeleton. */ 
1171   const char *bison_pkgdatadir 
= getenv ("BISON_PKGDATADIR"); 
1172   const char *m4 
= getenv ("M4"); 
1174   char *full_skeleton
; 
1178   if (!bison_pkgdatadir
) 
1179     bison_pkgdatadir 
= PKGDATADIR
; 
1180   pkg_data_len 
= strlen (bison_pkgdatadir
); 
1181   full_skeleton 
= XMALLOC (char, pkg_data_len 
+ strlen (skeleton
) + 2); 
1182   if (bison_pkgdatadir
[pkg_data_len
-1] == '/') 
1183     sprintf (full_skeleton
, "%s%s", bison_pkgdatadir
, skeleton
); 
1185     sprintf (full_skeleton
, "%s/%s", bison_pkgdatadir
, skeleton
); 
1188              "running: %s -I %s m4sugar/m4sugar.m4 %s %s\n", 
1189              m4
, bison_pkgdatadir
, definitions
, full_skeleton
); 
1190   skel_in 
= readpipe (m4
, 
1191                       "-I", bison_pkgdatadir
, 
1192                       "m4sugar/m4sugar.m4", 
1196   XFREE (full_skeleton
); 
1198     error (EXIT_FAILURE
, errno
, "cannot run m4"); 
1203 /*---------------------------. 
1204 | Call the skeleton parser.  | 
1205 `---------------------------*/ 
1208 output_skeleton (void) 
1210   /* Store the definition of all the muscles. */ 
1211   const char *tempdir 
= getenv ("TMPDIR"); 
1212   char *tempfile 
= NULL
; 
1216   if (tempdir 
== NULL
) 
1217     tempdir 
= DEFAULT_TMPDIR
; 
1218   tempfile 
= xmalloc (strlen (tempdir
) + 11); 
1219   sprintf (tempfile
, "%s/bsnXXXXXX", tempdir
); 
1220   fd 
= mkstemp (tempfile
); 
1222     error (EXIT_FAILURE
, errno
, "%s", tempfile
); 
1224   out 
= fdopen (fd
, "w"); 
1226     error (EXIT_FAILURE
, errno
, "%s", tempfile
); 
1228   /* There are no comments, especially not `#': we do want M4 expansion 
1229      after `#': think of CPP macros!  */ 
1230   fputs ("m4_changecom()\n", out
); 
1231   fputs ("m4_init()\n", out
); 
1233   actions_output (out
); 
1234   merger_output (out
); 
1235   token_definitions_output (out
); 
1236   symbol_destructors_output (out
); 
1237   symbol_printers_output (out
); 
1239   muscles_m4_output (out
); 
1241   fputs ("m4_wrap([m4_divert_pop(0)])\n", out
); 
1242   fputs ("m4_divert_push(0)dnl\n", out
); 
1245   m4_invoke (tempfile
); 
1247   /* If `debugging', keep this file alive. */ 
1257   MUSCLE_INSERT_INT ("last", high
); 
1258   MUSCLE_INSERT_INT ("flag", SHRT_MIN
); 
1259   MUSCLE_INSERT_INT ("pure", pure_parser
); 
1260   MUSCLE_INSERT_INT ("nsym", nsyms
); 
1261   MUSCLE_INSERT_INT ("debug", debug_flag
); 
1262   MUSCLE_INSERT_INT ("final", final_state
->number
); 
1263   MUSCLE_INSERT_INT ("undef_token_number", undeftoken
->number
); 
1264   MUSCLE_INSERT_INT ("user_token_number_max", max_user_token_number
); 
1265   MUSCLE_INSERT_INT ("error_verbose", error_verbose
); 
1266   MUSCLE_INSERT_STRING ("prefix", spec_name_prefix 
? spec_name_prefix 
: "yy"); 
1268   /* FIXME: This is wrong: the muscles should decide whether they hold 
1269      a copy or not, but the situation is too obscure currently.  */ 
1270   MUSCLE_INSERT_STRING ("output_infix", output_infix 
? output_infix 
: ""); 
1271   MUSCLE_INSERT_STRING ("output_prefix", short_base_name
); 
1272   MUSCLE_INSERT_STRING ("output_parser_name", parser_file_name
); 
1273   MUSCLE_INSERT_STRING ("output_header_name", spec_defines_file
); 
1275   MUSCLE_INSERT_INT ("nnts", nvars
); 
1276   MUSCLE_INSERT_INT ("nrules", nrules
); 
1277   MUSCLE_INSERT_INT ("nstates", nstates
); 
1278   MUSCLE_INSERT_INT ("ntokens", ntokens
); 
1280   MUSCLE_INSERT_INT ("locations_flag", locations_flag
); 
1281   MUSCLE_INSERT_INT ("defines_flag", defines_flag
); 
1283   /* Copy definitions in directive.  */ 
1284   obstack_1grow (&pre_prologue_obstack
, 0); 
1285   obstack_1grow (&post_prologue_obstack
, 0); 
1286   muscle_insert ("pre_prologue", obstack_finish (&pre_prologue_obstack
)); 
1287   muscle_insert ("post_prologue", obstack_finish (&post_prologue_obstack
)); 
1289   /* Find the right skeleton file.  */ 
1295         skeleton 
= "yacc.c"; 
1298   /* Parse the skeleton file and output the needed parsers.  */ 
1299   muscle_insert ("skeleton", skeleton
); 
1303 /*----------------------------------------------------------. 
1304 | Output the parsing tables and the parser code to ftable.  | 
1305 `----------------------------------------------------------*/ 
1310   obstack_init (&format_obstack
); 
1319   /* Process the selected skeleton file.  */ 
1322   obstack_free (&format_obstack
, NULL
); 
1323   obstack_free (&pre_prologue_obstack
, NULL
); 
1324   obstack_free (&post_prologue_obstack
, NULL
);