1 /* Output the generated parsing program for Bison. 
   3    Copyright (C) 1984, 1986, 1989, 1992, 2000-2006, 2009-2012 Free 
   4    Software Foundation, Inc. 
   6    This file is part of Bison, the GNU Compiler Compiler. 
   8    This program is free software: you can redistribute it and/or modify 
   9    it under the terms of the GNU General Public License as published by 
  10    the Free Software Foundation, either version 3 of the License, or 
  11    (at your option) any later version. 
  13    This program is distributed in the hope that it will be useful, 
  14    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  16    GNU General Public License for more details. 
  18    You should have received a copy of the GNU General Public License 
  19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ 
  27 #include "conflicts.h" 
  32 #include "muscle-tab.h" 
  37 /* Several tables are indexed both by state and nonterminal numbers. 
  38    We call such an index a `vector'; i.e., a vector is either a state 
  39    or a nonterminal number. 
  41    Of course vector_number_t ought to be wide enough to contain 
  42    state_number and symbol_number.  */ 
  43 typedef int vector_number
; 
  45 #if 0 /* Not currently used.  */ 
  46 static inline vector_number
 
  47 state_number_to_vector_number (state_number s
) 
  53 static inline vector_number
 
  54 symbol_number_to_vector_number (symbol_number sym
) 
  56   return state_number_as_int (nstates
) + sym 
- ntokens
; 
  62 /* FROMS and TOS are indexed by vector_number. 
  64    If VECTOR is a nonterminal, (FROMS[VECTOR], TOS[VECTOR]) form an 
  65    array of state numbers of the non defaulted GOTO on VECTOR. 
  67    If VECTOR is a state, TOS[VECTOR] is the array of actions to do on 
  68    the (array of) symbols FROMS[VECTOR]. 
  70    In both cases, TALLY[VECTOR] is the size of the arrays 
  71    FROMS[VECTOR], TOS[VECTOR]; and WIDTH[VECTOR] = 
  72    (FROMS[VECTOR][SIZE] - FROMS[VECTOR][0] + 1) where SIZE = 
  75    FROMS therefore contains symbol_number and action_number, 
  76    TOS state_number and action_number, 
  78    WIDTH differences of FROMS. 
  80    Let base_number be the type of FROMS, TOS, and WIDTH.  */ 
  81 #define BASE_MAXIMUM INT_MAX 
  82 #define BASE_MINIMUM INT_MIN 
  84 static base_number 
**froms
; 
  85 static base_number 
**tos
; 
  86 static unsigned int **conflict_tos
; 
  88 static base_number 
*width
; 
  91 /* For a given state, N = ACTROW[SYMBOL]: 
  93    If N = 0, stands for `run the default action'. 
  94    If N = MIN, stands for `raise a syntax error'. 
  95    If N > 0, stands for `shift SYMBOL and go to n'. 
  96    If N < 0, stands for `reduce -N'.  */ 
  97 typedef int action_number
; 
  98 #define ACTION_NUMBER_MINIMUM INT_MIN 
 100 static action_number 
*actrow
; 
 102 /* FROMS and TOS are reordered to be compressed.  ORDER[VECTOR] is the 
 103    new vector number of VECTOR.  We skip `empty' vectors (i.e., 
 104    TALLY[VECTOR] = 0), and call these `entries'.  */ 
 105 static vector_number 
*order
; 
 108 base_number 
*base 
= NULL
; 
 109 /* A distinguished value of BASE, negative infinite.  During the 
 110    computation equals to BASE_MINIMUM, later mapped to BASE_NINF to 
 111    keep parser tables small.  */ 
 112 base_number base_ninf 
= 0; 
 113 static base_number 
*pos 
= NULL
; 
 115 static unsigned int *conflrow
; 
 116 unsigned int *conflict_table
; 
 117 unsigned int *conflict_list
; 
 118 int conflict_list_cnt
; 
 119 static int conflict_list_free
; 
 121 /* TABLE_SIZE is the allocated size of both TABLE and CHECK.  We start 
 122    with more or less the original hard-coded value (which was 
 124 static int table_size 
= 32768; 
 127 /* The value used in TABLE to denote explicit syntax errors 
 128    (%nonassoc), a negative infinite.  First defaults to ACTION_NUMBER_MINIMUM, 
 129    but in order to keep small tables, renumbered as TABLE_ERROR, which 
 130    is the smallest (non error) value minus 1.  */ 
 131 base_number table_ninf 
= 0; 
 135 state_number 
*yydefgoto
; 
 136 rule_number 
*yydefact
; 
 138 /*-------------------------------------------------------------------. 
 139 | If TABLE, CONFLICT_TABLE, and CHECK are too small to be addressed  | 
 140 | at DESIRED, grow them.  TABLE[DESIRED] can be used, so the desired | 
 141 | size is at least DESIRED + 1.                                      | 
 142 `-------------------------------------------------------------------*/ 
 145 table_grow (int desired
) 
 147   int old_size 
= table_size
; 
 149   while (table_size 
<= desired
) 
 152   if (trace_flag 
& trace_resource
) 
 153     fprintf (stderr
, "growing table and check from: %d to %d\n", 
 154              old_size
, table_size
); 
 156   table 
= xnrealloc (table
, table_size
, sizeof *table
); 
 157   conflict_table 
= xnrealloc (conflict_table
, table_size
, 
 158                               sizeof *conflict_table
); 
 159   check 
= xnrealloc (check
, table_size
, sizeof *check
); 
 161   for (/* Nothing. */; old_size 
< table_size
; ++old_size
) 
 164       conflict_table
[old_size
] = 0; 
 165       check
[old_size
] = -1; 
 172 /*-------------------------------------------------------------------. 
 173 | For GLR parsers, for each conflicted token in S, as indicated      | 
 174 | by non-zero entries in CONFLROW, create a list of possible         | 
 175 | reductions that are alternatives to the shift or reduction         | 
 176 | currently recorded for that token in S.  Store the alternative     | 
 177 | reductions followed by a 0 in CONFLICT_LIST, updating              | 
 178 | CONFLICT_LIST_CNT, and storing an index to the start of the list   | 
 179 | back into CONFLROW.                                                | 
 180 `-------------------------------------------------------------------*/ 
 183 conflict_row (state 
*s
) 
 186   reductions 
*reds 
= s
->reductions
; 
 188   if (!nondeterministic_parser
) 
 191   for (j 
= 0; j 
< ntokens
; j 
+= 1) 
 194         conflrow
[j
] = conflict_list_cnt
; 
 196         /* Find all reductions for token J, and record all that do not 
 198         for (i 
= 0; i 
< reds
->num
; i 
+= 1) 
 199           if (bitset_test (reds
->lookahead_tokens
[i
], j
) 
 201                   != rule_number_as_item_number (reds
->rules
[i
]->number
))) 
 203               aver (0 < conflict_list_free
); 
 204               conflict_list
[conflict_list_cnt
] = reds
->rules
[i
]->number 
+ 1; 
 205               conflict_list_cnt 
+= 1; 
 206               conflict_list_free 
-= 1; 
 209         /* Leave a 0 at the end.  */ 
 210         aver (0 < conflict_list_free
); 
 211         conflict_list
[conflict_list_cnt
] = 0; 
 212         conflict_list_cnt 
+= 1; 
 213         conflict_list_free 
-= 1; 
 218 /*------------------------------------------------------------------. 
 219 | Decide what to do for each type of token if seen as the           | 
 220 | lookahead in specified state.  The value returned is used as the  | 
 221 | default action (yydefact) for the state.  In addition, ACTROW is  | 
 222 | filled with what to do for each kind of token, index by symbol    | 
 223 | number, with zero meaning do the default action.  The value       | 
 224 | ACTION_NUMBER_MINIMUM, a very negative number, means this         | 
 225 | situation is an error.  The parser recognizes this value          | 
 228 | This is where conflicts are resolved.  The loop over lookahead    | 
 229 | rules considered lower-numbered rules last, and the last rule     | 
 230 | considered that likes a token gets to handle it.                  | 
 232 | For GLR parsers, also sets CONFLROW[SYM] to an index into         | 
 233 | CONFLICT_LIST iff there is an unresolved conflict (s/r or r/r)    | 
 234 | with symbol SYM. The default reduction is not used for a symbol   | 
 235 | that has any such conflicts.                                      | 
 236 `------------------------------------------------------------------*/ 
 239 action_row (state 
*s
) 
 242   rule 
*default_reduction 
= NULL
; 
 243   reductions 
*reds 
= s
->reductions
; 
 244   transitions 
*trans 
= s
->transitions
; 
 245   errs 
*errp 
= s
->errs
; 
 246   /* Set to nonzero to inhibit having any default reduction.  */ 
 247   bool nodefault 
= false; 
 248   bool conflicted 
= false; 
 250   for (i 
= 0; i 
< ntokens
; i
++) 
 251     actrow
[i
] = conflrow
[i
] = 0; 
 253   if (reds
->lookahead_tokens
) 
 256       bitset_iterator biter
; 
 257       /* loop over all the rules available here which require 
 258          lookahead (in reverse order to give precedence to the first 
 260       for (i 
= reds
->num 
- 1; i 
>= 0; --i
) 
 261         /* and find each token which the rule finds acceptable 
 263         BITSET_FOR_EACH (biter
, reds
->lookahead_tokens
[i
], j
, 0) 
 265           /* and record this rule as the rule to use if that 
 272           actrow
[j
] = rule_number_as_item_number (reds
->rules
[i
]->number
); 
 276   /* Now see which tokens are allowed for shifts in this state.  For 
 277      them, record the shift as the thing to do.  So shift is preferred 
 279   FOR_EACH_SHIFT (trans
, i
) 
 281       symbol_number sym 
= TRANSITION_SYMBOL (trans
, i
); 
 282       state 
*shift_state 
= trans
->states
[i
]; 
 284       if (actrow
[sym
] != 0) 
 289       actrow
[sym
] = state_number_as_int (shift_state
->number
); 
 291       /* Do not use any default reduction if there is a shift for 
 293       if (sym 
== errtoken
->number
) 
 297   /* See which tokens are an explicit error in this state (due to 
 298      %nonassoc).  For them, record ACTION_NUMBER_MINIMUM as the 
 300   for (i 
= 0; i 
< errp
->num
; i
++) 
 302       symbol 
*sym 
= errp
->symbols
[i
]; 
 303       actrow
[sym
->number
] = ACTION_NUMBER_MINIMUM
; 
 306   /* Turn off default reductions where requested by the user.  See 
 307      state_lookahead_tokens_count in lalr.c to understand when states are 
 308      labeled as consistent.  */ 
 310     char *default_reductions 
= 
 311       muscle_percent_define_get ("lr.default-reduction"); 
 312     if (STRNEQ (default_reductions
, "most") && !s
->consistent
) 
 314     free (default_reductions
); 
 317   /* Now find the most common reduction and make it the default action 
 320   if (reds
->num 
>= 1 && !nodefault
) 
 323         default_reduction 
= reds
->rules
[0]; 
 327           for (i 
= 0; i 
< reds
->num
; i
++) 
 330               rule 
*r 
= reds
->rules
[i
]; 
 333               for (j 
= 0; j 
< ntokens
; j
++) 
 334                 if (actrow
[j
] == rule_number_as_item_number (r
->number
)) 
 340                   default_reduction 
= r
; 
 344           /* GLR parsers need space for conflict lists, so we can't 
 345              default conflicted entries.  For non-conflicted entries 
 346              or as long as we are not building a GLR parser, 
 347              actions that match the default are replaced with zero, 
 348              which means "use the default". */ 
 353               for (j 
= 0; j 
< ntokens
; j
++) 
 355                     == rule_number_as_item_number (default_reduction
->number
) 
 356                     && ! (nondeterministic_parser 
&& conflrow
[j
])) 
 362   /* If have no default reduction, the default is an error. 
 363      So replace any action which says "error" with "use default".  */ 
 365   if (!default_reduction
) 
 366     for (i 
= 0; i 
< ntokens
; i
++) 
 367       if (actrow
[i
] == ACTION_NUMBER_MINIMUM
) 
 373   return default_reduction
; 
 377 /*----------------------------------------. 
 378 | Set FROMS, TOS, TALLY and WIDTH for S.  | 
 379 `----------------------------------------*/ 
 382 save_row (state_number s
) 
 386   /* Number of non default actions in S.  */ 
 388   for (i 
= 0; i 
< ntokens
; i
++) 
 394       /* Allocate non defaulted actions.  */ 
 395       base_number 
*sp1 
= froms
[s
] = xnmalloc (count
, sizeof *sp1
); 
 396       base_number 
*sp2 
= tos
[s
] = xnmalloc (count
, sizeof *sp2
); 
 397       unsigned int *sp3 
= conflict_tos
[s
] = 
 398         nondeterministic_parser 
? xnmalloc (count
, sizeof *sp3
) : NULL
;; 
 400       /* Store non defaulted actions.  */ 
 401       for (i 
= 0; i 
< ntokens
; i
++) 
 406             if (nondeterministic_parser
) 
 407               *sp3
++ = conflrow
[i
]; 
 411       width
[s
] = sp1
[-1] - froms
[s
][0] + 1; 
 416 /*------------------------------------------------------------------. 
 417 | Figure out the actions for the specified state, indexed by        | 
 418 | lookahead token type.                                             | 
 420 | The YYDEFACT table is output now.  The detailed info is saved for | 
 421 | putting into YYTABLE later.                                       | 
 422 `------------------------------------------------------------------*/ 
 427   int nconflict 
= nondeterministic_parser 
? conflicts_total_count () : 0; 
 429   yydefact 
= xnmalloc (nstates
, sizeof *yydefact
); 
 431   actrow 
= xnmalloc (ntokens
, sizeof *actrow
); 
 432   conflrow 
= xnmalloc (ntokens
, sizeof *conflrow
); 
 434   conflict_list 
= xnmalloc (1 + 2 * nconflict
, sizeof *conflict_list
); 
 435   conflict_list_free 
= 2 * nconflict
; 
 436   conflict_list_cnt 
= 1; 
 438   /* Find the rules which are reduced.  */ 
 439   if (!nondeterministic_parser
) 
 442       for (r 
= 0; r 
< nrules
; ++r
) 
 443         rules
[r
].useful 
= false; 
 448     for (i 
= 0; i 
< nstates
; ++i
) 
 450         rule 
*default_reduction 
= action_row (states
[i
]); 
 451         yydefact
[i
] = default_reduction 
? default_reduction
->number 
+ 1 : 0; 
 454         /* Now that the parser was computed, we can find which rules are 
 455            really reduced, and which are not because of SR or RR 
 457         if (!nondeterministic_parser
) 
 460             for (j 
= 0; j 
< ntokens
; ++j
) 
 461               if (actrow
[j
] < 0 && actrow
[j
] != ACTION_NUMBER_MINIMUM
) 
 462                 rules
[item_number_as_rule_number (actrow
[j
])].useful 
= true; 
 464               rules
[yydefact
[i
] - 1].useful 
= true; 
 473 /*------------------------------------------------------------------. 
 474 | Compute FROMS[VECTOR], TOS[VECTOR], TALLY[VECTOR], WIDTH[VECTOR], | 
 475 | i.e., the information related to non defaulted GOTO on the nterm  | 
 478 | DEFAULT_STATE is the principal destination on SYM, i.e., the      | 
 479 | default GOTO destination on SYM.                                  | 
 480 `------------------------------------------------------------------*/ 
 483 save_column (symbol_number sym
, state_number default_state
) 
 486   goto_number begin 
= goto_map
[sym 
- ntokens
]; 
 487   goto_number end 
= goto_map
[sym 
- ntokens 
+ 1]; 
 489   /* Number of non default GOTO.  */ 
 491   for (i 
= begin
; i 
< end
; i
++) 
 492     if (to_state
[i
] != default_state
) 
 497       /* Allocate room for non defaulted gotos.  */ 
 498       vector_number symno 
= symbol_number_to_vector_number (sym
); 
 499       base_number 
*sp1 
= froms
[symno
] = xnmalloc (count
, sizeof *sp1
); 
 500       base_number 
*sp2 
= tos
[symno
] = xnmalloc (count
, sizeof *sp2
); 
 502       /* Store the state numbers of the non defaulted gotos.  */ 
 503       for (i 
= begin
; i 
< end
; i
++) 
 504         if (to_state
[i
] != default_state
) 
 506             *sp1
++ = from_state
[i
]; 
 507             *sp2
++ = to_state
[i
]; 
 510       tally
[symno
] = count
; 
 511       width
[symno
] = sp1
[-1] - froms
[symno
][0] + 1; 
 516 /*-------------------------------------------------------------. 
 517 | Return `the' most common destination GOTO on SYM (a nterm).  | 
 518 `-------------------------------------------------------------*/ 
 521 default_goto (symbol_number sym
, size_t state_count
[]) 
 525   goto_number m 
= goto_map
[sym 
- ntokens
]; 
 526   goto_number n 
= goto_map
[sym 
- ntokens 
+ 1]; 
 527   state_number default_state 
= -1; 
 533   for (s 
= 0; s 
< nstates
; s
++) 
 536   for (i 
= m
; i 
< n
; i
++) 
 537     state_count
[to_state
[i
]]++; 
 539   for (s 
= 0; s 
< nstates
; s
++) 
 540     if (state_count
[s
] > max
) 
 542         max 
= state_count
[s
]; 
 546   return default_state
; 
 550 /*-------------------------------------------------------------------. 
 551 | Figure out what to do after reducing with each rule, depending on  | 
 552 | the saved state from before the beginning of parsing the data that | 
 553 | matched this rule.                                                 | 
 555 | The YYDEFGOTO table is output now.  The detailed info is saved for | 
 556 | putting into YYTABLE later.                                        | 
 557 `-------------------------------------------------------------------*/ 
 563   size_t *state_count 
= xnmalloc (nstates
, sizeof *state_count
); 
 564   yydefgoto 
= xnmalloc (nvars
, sizeof *yydefgoto
); 
 566   /* For a given nterm I, STATE_COUNT[S] is the number of times there 
 567      is a GOTO to S on I.  */ 
 568   for (i 
= ntokens
; i 
< nsyms
; ++i
) 
 570       state_number default_state 
= default_goto (i
, state_count
); 
 571       save_column (i
, default_state
); 
 572       yydefgoto
[i 
- ntokens
] = default_state
; 
 578 /*------------------------------------------------------------------. 
 579 | Compute ORDER, a reordering of vectors, in order to decide how to | 
 580 | pack the actions and gotos information into yytable.              | 
 581 `------------------------------------------------------------------*/ 
 590   for (i 
= 0; i 
< nvectors
; i
++) 
 596         int j 
= nentries 
- 1; 
 598         while (0 <= j 
&& width
[order
[j
]] < w
) 
 601         while (0 <= j 
&& width
[order
[j
]] == w 
&& tally
[order
[j
]] < t
) 
 604         for (k 
= nentries 
- 1; k 
> j
; k
--) 
 605           order
[k 
+ 1] = order
[k
]; 
 613 /* If VECTOR is a state whose actions (reflected by FROMS, TOS, TALLY 
 614    and WIDTH of VECTOR) are common to a previous state, return this 
 617    In any other case, return -1.  */ 
 620 matching_state (vector_number vector
) 
 622   vector_number i 
= order
[vector
]; 
 623   /* If VECTOR is a nterm, return -1.  */ 
 630       /* If VECTOR has GLR conflicts, return -1 */ 
 631       if (conflict_tos
[i
] != NULL
) 
 634           for (j 
= 0; j 
< t
; j 
+= 1) 
 635             if (conflict_tos
[i
][j
] != 0) 
 639       for (prev 
= vector 
- 1; 0 <= prev
; prev
--) 
 641           vector_number j 
= order
[prev
]; 
 642           /* Given how ORDER was computed, if the WIDTH or TALLY is 
 643              different, there cannot be a matching state.  */ 
 644           if (width
[j
] != w 
|| tally
[j
] != t
) 
 650               for (k 
= 0; match 
&& k 
< t
; k
++) 
 651                 if (tos
[j
][k
] != tos
[i
][k
] 
 652                     || froms
[j
][k
] != froms
[i
][k
] 
 653                     || (conflict_tos
[j
] != NULL 
&& conflict_tos
[j
][k
] != 0)) 
 665 pack_vector (vector_number vector
) 
 668   vector_number i 
= order
[vector
]; 
 670   base_number 
*from 
= froms
[i
]; 
 671   base_number 
*to 
= tos
[i
]; 
 672   unsigned int *conflict_to 
= conflict_tos
[i
]; 
 676   for (res 
= lowzero 
- from
[0]; ; res
++) 
 679       aver (res 
< table_size
); 
 682         for (k 
= 0; ok 
&& k 
< t
; k
++) 
 684             int loc 
= res 
+ state_number_as_int (from
[k
]); 
 685             if (table_size 
<= loc
) 
 693           for (k 
= 0; k 
< vector
; k
++) 
 702           for (k 
= 0; k 
< t
; k
++) 
 704               loc 
= res 
+ state_number_as_int (from
[k
]); 
 706               if (nondeterministic_parser 
&& conflict_to 
!= NULL
) 
 707                 conflict_table
[loc
] = conflict_to
[k
]; 
 708               check
[loc
] = from
[k
]; 
 711           while (table
[lowzero
] != 0) 
 717           aver (BASE_MINIMUM 
<= res 
&& res 
<= BASE_MAXIMUM
); 
 724 /*-------------------------------------------------------------. 
 725 | Remap the negative infinite in TAB from NINF to the greatest | 
 726 | possible smallest value.  Return it.                         | 
 728 | In most case this allows us to use shorts instead of ints in | 
 730 `-------------------------------------------------------------*/ 
 733 table_ninf_remap (base_number tab
[], int size
, base_number ninf
) 
 738   for (i 
= 0; i 
< size
; i
++) 
 739     if (tab
[i
] < res 
&& tab
[i
] != ninf
) 
 744   for (i 
= 0; i 
< size
; i
++) 
 756   base 
= xnmalloc (nvectors
, sizeof *base
); 
 757   pos 
= xnmalloc (nentries
, sizeof *pos
); 
 758   table 
= xcalloc (table_size
, sizeof *table
); 
 759   conflict_table 
= xcalloc (table_size
, sizeof *conflict_table
); 
 760   check 
= xnmalloc (table_size
, sizeof *check
); 
 765   for (i 
= 0; i 
< nvectors
; i
++) 
 766     base
[i
] = BASE_MINIMUM
; 
 768   for (i 
= 0; i 
< table_size
; i
++) 
 771   for (i 
= 0; i 
< nentries
; i
++) 
 773       state_number s 
= matching_state (i
); 
 777         /* A new set of state actions, or a nonterminal.  */ 
 778         place 
= pack_vector (i
); 
 780         /* Action of I were already coded for S.  */ 
 784       base
[order
[i
]] = place
; 
 787   /* Use the greatest possible negative infinites.  */ 
 788   base_ninf 
= table_ninf_remap (base
, nvectors
, BASE_MINIMUM
); 
 789   table_ninf 
= table_ninf_remap (table
, high 
+ 1, ACTION_NUMBER_MINIMUM
); 
 796 /*-----------------------------------------------------------------. 
 797 | Compute and output yydefact, yydefgoto, yypact, yypgoto, yytable | 
 799 `-----------------------------------------------------------------*/ 
 802 tables_generate (void) 
 806   /* This is a poor way to make sure the sizes are properly 
 807      correlated.  In particular the signedness is not taken into 
 808      account.  But it's not useless.  */ 
 809   verify (sizeof nstates 
<= sizeof nvectors
 
 810           && sizeof nvars 
<= sizeof nvectors
); 
 812   nvectors 
= state_number_as_int (nstates
) + nvars
; 
 814   froms 
= xcalloc (nvectors
, sizeof *froms
); 
 815   tos 
= xcalloc (nvectors
, sizeof *tos
); 
 816   conflict_tos 
= xcalloc (nvectors
, sizeof *conflict_tos
); 
 817   tally 
= xcalloc (nvectors
, sizeof *tally
); 
 818   width 
= xnmalloc (nvectors
, sizeof *width
); 
 827   order 
= xcalloc (nvectors
, sizeof *order
); 
 835   for (i 
= 0; i 
< nvectors
; i
++) 
 839       free (conflict_tos
[i
]); 
 848 /*-------------------------. 
 849 | Free the parser tables.  | 
 850 `-------------------------*/ 
 856   free (conflict_table
); 
 857   free (conflict_list
);