mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
* src/LR0.c (new_state): Display `nstates' as the name of the
newly created state. Adjust to initialize first_state and last_state if needed. Be sure to distinguish the initial from the final state. (new_states): Create the itemset of the initial state, and use new_state. * src/closure.c (closure): Now that the initial state has its items properly set, there is no need for a special case when creating `ruleset'. As a result, now the rule 0, reducing to $axiom, is visible in the outputs. Adjust the test suite. * tests/conflicts.at (Solved SR Conflicts) (Unresolved SR Conflicts): Adjust. * tests/regression.at (Web2c Report, Rule Line Numbers): Idem. * tests/conflicts.at (S/R in initial): New.
This commit is contained in:
20
ChangeLog
20
ChangeLog
@@ -1,3 +1,23 @@
|
|||||||
|
2002-04-07 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* src/LR0.c (new_state): Display `nstates' as the name of the
|
||||||
|
newly created state.
|
||||||
|
Adjust to initialize first_state and last_state if needed.
|
||||||
|
Be sure to distinguish the initial from the final state.
|
||||||
|
(new_states): Create the itemset of the initial state, and use
|
||||||
|
new_state.
|
||||||
|
* src/closure.c (closure): Now that the initial state has its
|
||||||
|
items properly set, there is no need for a special case when
|
||||||
|
creating `ruleset'.
|
||||||
|
|
||||||
|
As a result, now the rule 0, reducing to $axiom, is visible in the
|
||||||
|
outputs. Adjust the test suite.
|
||||||
|
|
||||||
|
* tests/conflicts.at (Solved SR Conflicts)
|
||||||
|
(Unresolved SR Conflicts): Adjust.
|
||||||
|
* tests/regression.at (Web2c Report, Rule Line Numbers): Idem.
|
||||||
|
* tests/conflicts.at (S/R in initial): New.
|
||||||
|
|
||||||
2002-04-07 Akim Demaille <akim@epita.fr>
|
2002-04-07 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/LR0.c (allocate_itemsets): Don't loop over ritem: loop over
|
* src/LR0.c (allocate_itemsets): Don't loop over ritem: loop over
|
||||||
|
|||||||
9
NEWS
9
NEWS
@@ -3,6 +3,15 @@ Bison News
|
|||||||
|
|
||||||
Changes in version 1.49a:
|
Changes in version 1.49a:
|
||||||
|
|
||||||
|
* The initial rule is explicit.
|
||||||
|
Bison used to play hacks with the initial rule, which the user does
|
||||||
|
not write. It is now explicit, and visible in the reports and
|
||||||
|
graphs as rule 0.
|
||||||
|
|
||||||
|
* Useless rules are actually removed.
|
||||||
|
Before, Bison reported the useless rules, but, although not used,
|
||||||
|
included them in the parsers.
|
||||||
|
|
||||||
* False `Token not used' report fixed.
|
* False `Token not used' report fixed.
|
||||||
On a grammar such as
|
On a grammar such as
|
||||||
|
|
||||||
|
|||||||
27
src/LR0.c
27
src/LR0.c
@@ -35,7 +35,7 @@
|
|||||||
#include "lalr.h"
|
#include "lalr.h"
|
||||||
#include "reduce.h"
|
#include "reduce.h"
|
||||||
|
|
||||||
unsigned int nstates;
|
unsigned int nstates = 0;
|
||||||
/* Initialize the final state to -1, otherwise, it might be set to 0
|
/* Initialize the final state to -1, otherwise, it might be set to 0
|
||||||
by default, and since we don't compute the reductions of the final
|
by default, and since we don't compute the reductions of the final
|
||||||
state, we end up not computing the reductions of the initial state,
|
state, we end up not computing the reductions of the initial state,
|
||||||
@@ -190,7 +190,7 @@ new_state (int symbol)
|
|||||||
|
|
||||||
if (trace_flag)
|
if (trace_flag)
|
||||||
fprintf (stderr, "Entering new_state, state = %d, symbol = %d (%s)\n",
|
fprintf (stderr, "Entering new_state, state = %d, symbol = %d (%s)\n",
|
||||||
this_state->number, symbol, symbols[symbol]->tag);
|
nstates, symbol, symbols[symbol]->tag);
|
||||||
|
|
||||||
if (nstates >= MAXSHORT)
|
if (nstates >= MAXSHORT)
|
||||||
fatal (_("too many states (max %d)"), MAXSHORT);
|
fatal (_("too many states (max %d)"), MAXSHORT);
|
||||||
@@ -202,14 +202,19 @@ new_state (int symbol)
|
|||||||
|
|
||||||
shortcpy (p->items, kernel_base[symbol], kernel_size[symbol]);
|
shortcpy (p->items, kernel_base[symbol], kernel_size[symbol]);
|
||||||
|
|
||||||
last_state->next = p;
|
/* If this is the eoftoken, and this is not the initial state, then
|
||||||
last_state = p;
|
this is the final state. */
|
||||||
nstates++;
|
if (symbol == 0 && first_state)
|
||||||
|
|
||||||
/* If this is the eoftoken, then this is the final state. */
|
|
||||||
if (symbol == 0)
|
|
||||||
final_state = p->number;
|
final_state = p->number;
|
||||||
|
|
||||||
|
if (!first_state)
|
||||||
|
first_state = p;
|
||||||
|
if (last_state)
|
||||||
|
last_state->next = p;
|
||||||
|
last_state = p;
|
||||||
|
|
||||||
|
nstates++;
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,8 +322,10 @@ append_states (void)
|
|||||||
static void
|
static void
|
||||||
new_states (void)
|
new_states (void)
|
||||||
{
|
{
|
||||||
first_state = last_state = this_state = STATE_ALLOC (0);
|
/* The 0 at the lhs is the index of the item of this initial rule. */
|
||||||
nstates = 1;
|
kernel_base[0][0] = 0;
|
||||||
|
kernel_size[0] = 1;
|
||||||
|
this_state = new_state (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -244,18 +244,11 @@ closure (short *core, int n)
|
|||||||
if (trace_flag)
|
if (trace_flag)
|
||||||
print_closure ("input", core, n);
|
print_closure ("input", core, n);
|
||||||
|
|
||||||
if (n == 0)
|
bitset_zero (ruleset);
|
||||||
{
|
|
||||||
bitset_copy (ruleset, FDERIVES (start_symbol));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bitset_zero (ruleset);
|
|
||||||
|
|
||||||
for (c = 0; c < n; ++c)
|
for (c = 0; c < n; ++c)
|
||||||
if (ISVAR (ritem[core[c]]))
|
if (ISVAR (ritem[core[c]]))
|
||||||
bitset_or (ruleset, ruleset, FDERIVES (ritem[core[c]]));
|
bitset_or (ruleset, ruleset, FDERIVES (ritem[core[c]]));
|
||||||
}
|
|
||||||
|
|
||||||
nitemset = 0;
|
nitemset = 0;
|
||||||
c = 0;
|
c = 0;
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ TESTSUITE_AT = \
|
|||||||
TESTSUITE = $(srcdir)/testsuite
|
TESTSUITE = $(srcdir)/testsuite
|
||||||
|
|
||||||
AUTOTEST = $(AUTOM4TE) --language=autotest
|
AUTOTEST = $(AUTOM4TE) --language=autotest
|
||||||
$(srcdir)/$(TESTSUITE): package.m4 $(TESTSUITE_AT)
|
$(TESTSUITE): package.m4 $(TESTSUITE_AT)
|
||||||
$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
|
$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
|
||||||
mv $@.tmp $@
|
mv $@.tmp $@
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Exercising Bison on conflicts. -*- Autotest -*-
|
# Exercising Bison on conflicts. -*- Autotest -*-
|
||||||
# Copyright 2002 Free Software Foundation, Inc.
|
# Copyright (C) 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This program 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
|
||||||
@@ -19,6 +19,28 @@
|
|||||||
AT_BANNER([[Conflicts.]])
|
AT_BANNER([[Conflicts.]])
|
||||||
|
|
||||||
|
|
||||||
|
## ---------------- ##
|
||||||
|
## S/R in initial. ##
|
||||||
|
## ---------------- ##
|
||||||
|
|
||||||
|
# I once hacked Bison in such a way that it lost its reductions on the
|
||||||
|
# initial state (because it was confusing it with the last state). It
|
||||||
|
# took me a while to strip down my failures to this simple case. So
|
||||||
|
# make sure it finds the s/r conflict below.
|
||||||
|
|
||||||
|
AT_SETUP([S/R in initial])
|
||||||
|
|
||||||
|
AT_DATA([[input.y]],
|
||||||
|
[[%expect 1
|
||||||
|
%%
|
||||||
|
exp: e 'e';
|
||||||
|
e: 'e' | /* Nothing. */;
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_CHECK([bison input.y -o input.c])
|
||||||
|
|
||||||
|
AT_CLEANUP
|
||||||
|
|
||||||
## ------------------- ##
|
## ------------------- ##
|
||||||
## %nonassoc and eof. ##
|
## %nonassoc and eof. ##
|
||||||
## ------------------- ##
|
## ------------------- ##
|
||||||
@@ -143,6 +165,8 @@ exp (6)
|
|||||||
|
|
||||||
state 0
|
state 0
|
||||||
|
|
||||||
|
$axiom -> . exp $ (rule 0)
|
||||||
|
|
||||||
NUM shift, and go to state 1
|
NUM shift, and go to state 1
|
||||||
|
|
||||||
exp go to state 2
|
exp go to state 2
|
||||||
@@ -247,6 +271,8 @@ exp (6)
|
|||||||
|
|
||||||
state 0
|
state 0
|
||||||
|
|
||||||
|
$axiom -> . exp $ (rule 0)
|
||||||
|
|
||||||
NUM shift, and go to state 1
|
NUM shift, and go to state 1
|
||||||
|
|
||||||
exp go to state 2
|
exp go to state 2
|
||||||
|
|||||||
@@ -139,6 +139,8 @@ expr (7)
|
|||||||
|
|
||||||
state 0
|
state 0
|
||||||
|
|
||||||
|
$axiom -> . expr $ (rule 0)
|
||||||
|
|
||||||
'a' shift, and go to state 1
|
'a' shift, and go to state 1
|
||||||
|
|
||||||
$default reduce using rule 3 (@2)
|
$default reduce using rule 3 (@2)
|
||||||
@@ -348,6 +350,7 @@ CONST_DEC (10)
|
|||||||
@1 (11)
|
@1 (11)
|
||||||
on left: 4, on right: 5
|
on left: 4, on right: 5
|
||||||
state 0
|
state 0
|
||||||
|
$axiom -> . CONST_DEC_PART $ (rule 0)
|
||||||
$default reduce using rule 4 (@1)
|
$default reduce using rule 4 (@1)
|
||||||
CONST_DEC_PART go to state 1
|
CONST_DEC_PART go to state 1
|
||||||
CONST_DEC_LIST go to state 2
|
CONST_DEC_LIST go to state 2
|
||||||
|
|||||||
Reference in New Issue
Block a user