/* Output the generated parsing program for Bison.
Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006 Free Software Foundation, Inc.
+ 2005, 2006, 2009 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
#include "getargs.h"
#include "gram.h"
#include "lalr.h"
+#include "muscle_tab.h"
#include "reader.h"
#include "symtab.h"
#include "tables.h"
base_number *table;
base_number *check;
/* The value used in TABLE to denote explicit syntax errors
- (%nonassoc), a negative infinite. First defaults to ACTION_NUMBER_MININUM,
+ (%nonassoc), a negative infinite. First defaults to ACTION_NUMBER_MINIMUM,
but in order to keep small tables, renumbered as TABLE_ERROR, which
is the smallest (non error) value minus 1. */
base_number table_ninf = 0;
action_row (state *s)
{
int i;
- rule *default_rule = NULL;
+ rule *default_reduction = NULL;
reductions *reds = s->reductions;
transitions *trans = s->transitions;
errs *errp = s->errs;
actrow[sym->number] = ACTION_NUMBER_MINIMUM;
}
+ /* Turn off default reductions where requested by the user. See
+ state_lookahead_tokens_count in lalr.c to understand when states are
+ labeled as consistent. */
+ {
+ char *default_reductions =
+ muscle_percent_define_get ("lr.default-reductions");
+ if (0 != strcmp (default_reductions, "all") && !s->consistent)
+ nodefault = true;
+ free (default_reductions);
+ }
+
/* Now find the most common reduction and make it the default action
for this state. */
if (reds->num >= 1 && !nodefault)
{
if (s->consistent)
- default_rule = reds->rules[0];
+ default_reduction = reds->rules[0];
else
{
int max = 0;
if (count > max)
{
max = count;
- default_rule = r;
+ default_reduction = r;
}
}
{
int j;
for (j = 0; j < ntokens; j++)
- if (actrow[j] == rule_number_as_item_number (default_rule->number)
+ if (actrow[j]
+ == rule_number_as_item_number (default_reduction->number)
&& ! (nondeterministic_parser && conflrow[j]))
actrow[j] = 0;
}
}
}
- /* If have no default rule, the default is an error.
+ /* If have no default reduction, the default is an error.
So replace any action which says "error" with "use default". */
- if (!default_rule)
+ if (!default_reduction)
for (i = 0; i < ntokens; i++)
if (actrow[i] == ACTION_NUMBER_MINIMUM)
actrow[i] = 0;
if (conflicted)
conflict_row (s);
- return default_rule;
+ return default_reduction;
}
for (i = 0; i < nstates; ++i)
{
- rule *default_rule = action_row (states[i]);
- yydefact[i] = default_rule ? default_rule->number + 1 : 0;
+ rule *default_reduction = action_row (states[i]);
+ yydefact[i] = default_reduction ? default_reduction->number + 1 : 0;
save_row (i);
/* Now that the parser was computed, we can find which rules are