X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/7ecec4ddf9e1640c7133e0be0788b1d30ece20ec..ab2a9f579366b0d4940b0ec2d3321d139a7f1f3d:/src/reader.c
diff --git a/src/reader.c b/src/reader.c
index 24da9b74..f20d3ca0 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -1,24 +1,22 @@
/* Input parser for Bison
Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000, 2001, 2002, 2003,
- 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
- Bison is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- Bison is distributed in the hope that it will be useful,
+ This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with Bison; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see . */
#include
#include "system.h"
@@ -30,7 +28,7 @@
#include "files.h"
#include "getargs.h"
#include "gram.h"
-#include "muscle_tab.h"
+#include "muscle-tab.h"
#include "reader.h"
#include "symlist.h"
#include "symtab.h"
@@ -444,20 +442,6 @@ packgram (void)
rules = xnmalloc (nrules, sizeof *rules);
- /* Before invoking grammar_rule_check on any rule, make sure all actions have
- already been scanned in order to set `used' flags. Otherwise, checking
- that a midrule's $$ should be set will not always work properly because
- the check must forward-reference the midrule's parent rule. For the same
- reason, all the `used' flags must be set before checking whether to remove
- `$' from any midrule symbol name. */
- while (p)
- {
- code_props_translate_code (&p->action_props);
- if (p)
- p = p->next;
- }
-
- p = grammar;
while (p)
{
int rule_length = 0;
@@ -571,6 +555,31 @@ reader (void)
gram_scanner_initialize ();
gram_parse ();
+ /* Set front-end %define variable defaults. */
+ muscle_percent_define_default ("lr.keep-unreachable-states", "false");
+ {
+ char *lr_type;
+ /* IELR would be a better default, but LALR is historically the
+ default. */
+ muscle_percent_define_default ("lr.type", "LALR");
+ lr_type = muscle_percent_define_get ("lr.type");
+ if (0 != strcmp (lr_type, "canonical LR"))
+ muscle_percent_define_default ("lr.default-reductions", "all");
+ else
+ muscle_percent_define_default ("lr.default-reductions", "accepting");
+ free (lr_type);
+ }
+
+ /* Check front-end %define variables. */
+ {
+ static char const * const values[] = {
+ "lr.type", "LALR", "IELR", "canonical LR", NULL,
+ "lr.default-reductions", "all", "consistent", "accepting", NULL,
+ NULL
+ };
+ muscle_percent_define_check_values (values);
+ }
+
if (! complaint_issued)
check_and_convert_grammar ();
@@ -643,6 +652,23 @@ check_and_convert_grammar (void)
token symbols into FDEFINES if requested. */
symbols_pack ();
+ /* Scan rule actions after invoking symbol_check_alias_consistency (in
+ symbols_pack above) so that token types are set correctly before the rule
+ action type checking.
+
+ Before invoking grammar_rule_check (in packgram below) on any rule, make
+ sure all actions have already been scanned in order to set `used' flags.
+ Otherwise, checking that a midrule's $$ should be set will not always work
+ properly because the check must forward-reference the midrule's parent
+ rule. For the same reason, all the `used' flags must be set before
+ checking whether to remove `$' from any midrule symbol name (also in
+ packgram). */
+ {
+ symbol_list *sym;
+ for (sym = grammar; sym; sym = sym->next)
+ code_props_translate_code (&sym->action_props);
+ }
+
/* Convert the grammar into the format described in gram.h. */
packgram ();