-/*-------------------------------------------------------------.
-| Return the default rule of S if it has one, NULL otherwise. |
-`-------------------------------------------------------------*/
-
-static rule *
-state_default_rule (state *s)
-{
- reductions *reds = s->reductions;
- rule *default_rule = NULL;
- int cmax = 0;
- int i;
-
- /* No need for a lookahead. */
- if (s->consistent)
- return reds->rules[0];
-
- /* 1. Each reduction is possibly masked by the lookaheads on which
- we shift (S/R conflicts)... */
- bitset_zero (shiftset);
- {
- transitions *trans = s->transitions;
- FOR_EACH_SHIFT (trans, i)
- {
- /* If this state has a shift for the error token, don't use a
- default rule. */
- if (TRANSITION_IS_ERROR (trans, i))
- return NULL;
- bitset_set (shiftset, TRANSITION_SYMBOL (trans, i));
- }
- }
-
- /* 2. Each reduction is possibly masked by the lookaheads on which
- we raise an error (due to %nonassoc). */
- {
- errs *errp = s->errs;
- for (i = 0; i < errp->num; i++)
- if (errp->symbols[i])
- bitset_set (shiftset, errp->symbols[i]->number);
- }
-
- for (i = 0; i < reds->num; ++i)
- {
- int count = 0;
-
- /* How many non-masked lookaheads are there for this reduction?
- */
- bitset_andn (lookaheadset, reds->lookaheads[i], shiftset);
- count = bitset_count (lookaheadset);
-
- if (count > cmax)
- {
- cmax = count;
- default_rule = reds->rules[i];
- }
-
- /* 3. And finally, each reduction is possibly masked by previous
- reductions (in R/R conflicts, we keep the first reductions).
- */
- bitset_or (shiftset, shiftset, reds->lookaheads[i]);
- }
-
- return default_rule;
-}
-
-
-/*--------------------------------------------------------------------.
-| Report a reduction of RULE on LOOKAHEADS (which can be `default'). |
-| If not ENABLED, the rule is masked by a shift or a reduce (S/R and |
-| R/R conflicts). |
-`--------------------------------------------------------------------*/