projects
/
bison.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
variant: fix G++ 4.4 warnings
[bison.git]
/
src
/
LR0.c
diff --git
a/src/LR0.c
b/src/LR0.c
index 6e3a4460174b9e631a712dcec83598ec65bbfe6e..f6a9537e4cfa47ade6659d88229e949b4fca5a24 100644
(file)
--- a/
src/LR0.c
+++ b/
src/LR0.c
@@
-1,24
+1,22
@@
-/* Generate the
nondeterministic finite state machine
for Bison.
+/* Generate the
LR(0) parser states
for Bison.
- Copyright (C) 1984, 1986, 1989, 2000
, 2001, 2002, 2004, 2005, 2006, 2007
- F
ree Software F
oundation, Inc.
+ Copyright (C) 1984, 1986, 1989, 2000
-2002, 2004-2013 Free Software
+ Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
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
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
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 <http://www.gnu.org/licenses/>. */
/* See comments in state.h for the data structures that represent it.
/* See comments in state.h for the data structures that represent it.
@@
-28,14
+26,12
@@
#include "system.h"
#include <bitset.h>
#include "system.h"
#include <bitset.h>
-#include <quotearg.h>
#include "LR0.h"
#include "closure.h"
#include "complain.h"
#include "getargs.h"
#include "gram.h"
#include "LR0.h"
#include "closure.h"
#include "complain.h"
#include "getargs.h"
#include "gram.h"
-#include "gram.h"
#include "lalr.h"
#include "reader.h"
#include "reduce.h"
#include "lalr.h"
#include "reader.h"
#include "reduce.h"
@@
-65,7
+61,7
@@
state_list_append (symbol_number sym, size_t core_size, item_number *core)
if (trace_flag & trace_automaton)
fprintf (stderr, "state_list_append (state = %d, symbol = %d (%s))\n",
if (trace_flag & trace_automaton)
fprintf (stderr, "state_list_append (state = %d, symbol = %d (%s))\n",
- nstates, sym, symbols[sym]->tag);
+
nstates, sym, symbols[sym]->tag);
node->next = NULL;
node->state = s;
node->next = NULL;
node->state = s;
@@
-103,13
+99,13
@@
allocate_itemsets (void)
symbols. */
size_t count = 0;
size_t *symbol_count = xcalloc (nsyms + nuseless_nonterminals,
symbols. */
size_t count = 0;
size_t *symbol_count = xcalloc (nsyms + nuseless_nonterminals,
- sizeof *symbol_count);
+
sizeof *symbol_count);
for (r = 0; r < nrules; ++r)
for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
{
for (r = 0; r < nrules; ++r)
for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
{
- count++;
- symbol_count[*rhsp]++;
+
count++;
+
symbol_count[*rhsp]++;
}
/* See comments before new_itemsets. All the vectors of items
}
/* See comments before new_itemsets. All the vectors of items
@@
-170,9
+166,9
@@
free_storage (void)
| points to a vector of item numbers activated if that symbol is |
| shifted, and kernel_size[symbol] is their numbers. |
| |
| points to a vector of item numbers activated if that symbol is |
| shifted, and kernel_size[symbol] is their numbers. |
| |
-| itemset is sorted on item
number from ritem, which is sorted
|
-|
on rule number. Compute each kernel_base[symbol] with the
|
-| s
ame sort.
|
+| itemset is sorted on item
index in ritem, which is sorted on
|
+|
rule number. Compute each kernel_base[symbol] with the same
|
+| s
ort.
|
`---------------------------------------------------------------*/
static void
`---------------------------------------------------------------*/
static void
@@
-190,15
+186,15
@@
new_itemsets (state *s)
for (i = 0; i < nitemset; ++i)
if (item_number_is_symbol_number (ritem[itemset[i]]))
{
for (i = 0; i < nitemset; ++i)
if (item_number_is_symbol_number (ritem[itemset[i]]))
{
- symbol_number sym = item_number_as_symbol_number (ritem[itemset[i]]);
- if (!kernel_size[sym])
- {
- shift_symbol[nshifts] = sym;
- nshifts++;
- }
-
- kernel_base[sym][kernel_size[sym]] = itemset[i] + 1;
- kernel_size[sym]++;
+
symbol_number sym = item_number_as_symbol_number (ritem[itemset[i]]);
+
if (!kernel_size[sym])
+
{
+
shift_symbol[nshifts] = sym;
+
nshifts++;
+
}
+
+
kernel_base[sym][kernel_size[sym]] = itemset[i] + 1;
+
kernel_size[sym]++;
}
}
}
}
@@
-217,7
+213,7
@@
get_state (symbol_number sym, size_t core_size, item_number *core)
if (trace_flag & trace_automaton)
fprintf (stderr, "Entering get_state, symbol = %d (%s)\n",
if (trace_flag & trace_automaton)
fprintf (stderr, "Entering get_state, symbol = %d (%s)\n",
- sym, symbols[sym]->tag);
+
sym, symbols[sym]->tag);
s = state_hash_lookup (core_size, core);
if (!s)
s = state_hash_lookup (core_size, core);
if (!s)
@@
-231,7
+227,7
@@
get_state (symbol_number sym, size_t core_size, item_number *core)
/*---------------------------------------------------------------.
| Use the information computed by new_itemsets to find the state |
/*---------------------------------------------------------------.
| Use the information computed by new_itemsets to find the state |
-| numbers reached by each shift transition from S. |
+| numbers reached by each shift transition from S.
|
| |
| SHIFTSET is set up as a vector of those states. |
`---------------------------------------------------------------*/
| |
| SHIFTSET is set up as a vector of those states. |
`---------------------------------------------------------------*/
@@
-251,7
+247,7
@@
append_states (state *s)
symbol_number sym = shift_symbol[i];
int j;
for (j = i; 0 < j && sym < shift_symbol[j - 1]; j--)
symbol_number sym = shift_symbol[i];
int j;
for (j = i; 0 < j && sym < shift_symbol[j - 1]; j--)
- shift_symbol[j] = shift_symbol[j - 1];
+
shift_symbol[j] = shift_symbol[j - 1];
shift_symbol[j] = sym;
}
shift_symbol[j] = sym;
}
@@
-280,16
+276,16
@@
save_reductions (state *s)
{
item_number item = ritem[itemset[i]];
if (item_number_is_rule_number (item))
{
item_number item = ritem[itemset[i]];
if (item_number_is_rule_number (item))
- {
- rule_number r = item_number_as_rule_number (item);
- redset[count++] = &rules[r];
- if (r == 0)
- {
- /* This is "reduce 0", i.e., accept. */
- aver (!final_state);
- final_state = s;
- }
- }
+
{
+
rule_number r = item_number_as_rule_number (item);
+
redset[count++] = &rules[r];
+
if (r == 0)
+
{
+
/* This is "reduce 0", i.e., accept. */
+
aver (!final_state);
+
final_state = s;
+
}
+
}
}
/* Make a reductions structure and copy the data into it. */
}
/* Make a reductions structure and copy the data into it. */
@@
-311,14
+307,14
@@
set_states (void)
state_list *this = first_state;
/* Pessimization, but simplification of the code: make sure all
state_list *this = first_state;
/* Pessimization, but simplification of the code: make sure all
- the states have valid transitions and reductions members,
- even if reduced to 0. It is too soon for errs, which are
- computed later, but set_conflicts. */
+
the states have valid transitions and reductions members,
+
even if reduced to 0. It is too soon for errs, which are
+
computed later, but set_conflicts. */
state *s = this->state;
if (!s->transitions)
state *s = this->state;
if (!s->transitions)
- state_transitions_set (s, 0, 0);
+
state_transitions_set (s, 0, 0);
if (!s->reductions)
if (!s->reductions)
- state_reductions_set (s, 0, 0);
+
state_reductions_set (s, 0, 0);
states[s->number] = s;
states[s->number] = s;
@@
-331,8
+327,8
@@
set_states (void)
/*-------------------------------------------------------------------.
/*-------------------------------------------------------------------.
-| Compute the
nondeterministic finite state machine (see state.h for
|
-|
details) from the grammar.
|
+| Compute the
LR(0) parser states (see state.h for details) from the
|
+|
grammar.
|
`-------------------------------------------------------------------*/
void
`-------------------------------------------------------------------*/
void
@@
-352,9
+348,9
@@
generate_states (void)
{
state *s = list->state;
if (trace_flag & trace_automaton)
{
state *s = list->state;
if (trace_flag & trace_automaton)
- fprintf (stderr, "Processing state %d (reached by %s)\n",
- s->number,
- symbols[s->accessing_symbol]->tag);
+
fprintf (stderr, "Processing state %d (reached by %s)\n",
+
s->number,
+
symbols[s->accessing_symbol]->tag);
/* Set up itemset for the transitions out of this state. itemset gets a
vector of all the items that could be accepted next. */
closure (s->items, s->nitems);
/* Set up itemset for the transitions out of this state. itemset gets a
vector of all the items that could be accepted next. */
closure (s->items, s->nitems);
@@
-366,7
+362,7
@@
generate_states (void)
append_states (s);
/* Create the shifts structures for the shifts to those states,
append_states (s);
/* Create the shifts structures for the shifts to those states,
- now that the state numbers transitioning to are known. */
+
now that the state numbers transitioning to are known. */
state_transitions_set (s, nshifts, shiftset);
}
state_transitions_set (s, nshifts, shiftset);
}