X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/14462c2b1b55540d78ce1f1dc4fe67fcd1c701ac..4654b0c0a8a355e7a8fcdf51b1a5eb6c485126f1:/src/lalr.c?ds=sidebyside diff --git a/src/lalr.c b/src/lalr.c index af6ac9ef..a214dc57 100644 --- a/src/lalr.c +++ b/src/lalr.c @@ -5,20 +5,18 @@ 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 . */ /* Compute how to make the finite state machine deterministic; find @@ -264,7 +262,7 @@ build_relations (void) while (!done) { done = true; - /* Each rhs ends in an item number, and there is a + /* Each rhs ends in a rule number, and there is a sentinel before the first rhs, so it is safe to decrement RP here. */ rp--; @@ -340,7 +338,6 @@ compute_lookahead_tokens (void) static int state_lookahead_tokens_count (state *s) { - int k; int n_lookahead_tokens = 0; reductions *rp = s->reductions; transitions *sp = s->transitions; @@ -348,21 +345,17 @@ state_lookahead_tokens_count (state *s) /* We need a lookahead either to distinguish different reductions (i.e., there are two or more), or to distinguish a reduction from a shift. Otherwise, it is straightforward, - and the state is `consistent'. */ + and the state is `consistent'. There is no need to check that + transition 0 hasn't been disabled before checking if it is a + shift since transitions are only disabled during conflict + resolution, and that hasn't happened yet. */ + aver (sp->num == 0 || !TRANSITION_IS_DISABLED (sp, 0)); if (rp->num > 1 - || (rp->num == 1 && sp->num && - !TRANSITION_IS_DISABLED (sp, 0) && TRANSITION_IS_SHIFT (sp, 0))) + || (rp->num == 1 && sp->num && TRANSITION_IS_SHIFT (sp, 0))) n_lookahead_tokens += rp->num; else s->consistent = 1; - for (k = 0; k < sp->num; k++) - if (!TRANSITION_IS_DISABLED (sp, k) && TRANSITION_IS_ERROR (sp, k)) - { - s->consistent = 0; - break; - } - return n_lookahead_tokens; }