Files
bison/src/tables.h
Joel E. Denny d5eb0826af More fixes related to last two patches.
* data/c.m4 (b4_table_value_equals): Comment that YYID must be
defined.
* data/glr.c, data/lalr1.cc, data/lalr1.java, data/yacc.c: Fix
yytable comments: zero indicates syntax error not default
action.
* data/glr.c (yyis_pact_ninf): Rename to...
(yypact_value_is_default): ... this.
(yyisDefaultedState): Update for rename.
(yyis_table_ninf): Rename to...
(yytable_value_is_error): ... this, and check for value zero
besides just YYTABLE_NINF.
(yygetLRActions): Check for default value from yypact.  It
appears that this check is always performed before this function
is invoked, and so adding the check here is probably redundant.
However, the code may evolve after this subtlety is forgotten.
Also, update for rename to yytable_value_is_error.  Because that
macro now checks for zero, a different but equivalent branch of
the if-then-else here is evaluated.
(yyreportSyntaxError): Update for rename to
yytable_value_is_error.  The zero condition was mishandled
before.
(yyrecoverSyntaxError): Update for renames.  No behavioral
changes.
* data/lalr1.cc, data/lalr1.java (yy_pact_value_is_default_):
New function.
(yy_table_value_is_error_): New function.
(parse): Use new functions where possible.  No behavioral
changes.
(yysyntax_error_, yysyntax_error): Use yy_table_value_is_error_.
The zero condition was mishandled before.
* data/yacc.c (yyis_pact_ninf): Rename to...
(yypact_value_is_default): ... this.
(yyis_table_ninf): Rename to...
(yytable_value_is_error): ... this, and check for value zero
besides just YYTABLE_NINF.
(yysyntax_error): Update for rename to yytable_value_is_error.
The zero condition was mishandled before.
(yyparse): Update for renames.  No behavioral changes.
* src/tables.h: Improve comments about yypact, yytable, etc.
more.  Most importantly, say yytable value of zero means syntax
error not default action.
(cherry picked from commit f2b30bdf37)

Conflicts:

	data/bison.m4
	data/lalr1.cc
	data/lalr1.java
	data/yacc.c
	src/parse-gram.c
	src/parse-gram.h
2009-08-25 20:34:28 -04:00

131 lines
4.6 KiB
C

/* Prepare the LALR and GLR parser tables.
Copyright (C) 2002, 2004, 2009 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
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 3 of the License, or
(at your option) any later version.
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 this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef TABLES_H_
# define TABLES_H_
# include "state.h"
/* The parser tables consist of these tables.
YYTRANSLATE = vector mapping yylex's token numbers into bison's
token numbers.
YYTNAME = vector of string-names indexed by bison token number.
YYTOKNUM = vector of yylex token numbers corresponding to entries
in YYTNAME.
YYRLINE = vector of line-numbers of all rules. For yydebug
printouts.
YYRHS = vector of items of all rules. This is exactly what RITEMS
contains. For yydebug and for semantic parser.
YYPRHS[R] = index in YYRHS of first item for rule R.
YYR1[R] = symbol number of symbol that rule R derives.
YYR2[R] = number of symbols composing right hand side of rule R.
YYSTOS[S] = the symbol number of the symbol that leads to state S.
YYFINAL = the state number of the termination state.
YYTABLE = a vector filled with portions for different uses, found
via YYPACT and YYPGOTO.
YYLAST ( = high) the number of the last element of YYTABLE, i.e.,
sizeof (YYTABLE) - 1.
YYCHECK = a vector indexed in parallel with YYTABLE. It indicates,
in a roundabout way, the bounds of the portion you are trying to
examine.
Suppose that the portion of YYTABLE starts at index P and the index
to be examined within the portion is I. Then if YYCHECK[P+I] != I,
I is outside the bounds of what is actually allocated, and the
default (from YYDEFACT or YYDEFGOTO) should be used. Otherwise,
YYTABLE[P+I] should be used.
YYDEFACT[S] = default reduction number in state s. Performed when
YYTABLE doesn't specify something else to do. Zero means the default
is an error.
YYDEFGOTO[I] = default state to go to after a reduction of a rule
that generates variable NTOKENS + I, except when YYTABLE specifies
something else to do.
YYPACT[S] = index in YYTABLE of the portion describing state S.
The lookahead token's number, I, is used to index that portion of
YYTABLE to find out what action to perform.
If YYPACT[S] == YYPACT_NINF, if YYPACT[S] + I is outside the bounds
of YYTABLE (from 0 to YYLAST), or I is outside the bounds for portion
S (that is, YYCHECK[YYPACT[S] + I] != I), then the default action
(that is, YYDEFACT[S]) should be used instead of YYTABLE. Otherwise,
the value YYTABLE[YYPACT[S] + I] should be used even if
YYPACT[S] < 0.
If the value in YYTABLE is positive, we shift the token and go to
that state.
If the value is negative, it is minus a rule number to reduce by.
If the value is zero or YYTABLE_NINF, it's a syntax error.
YYPGOTO[I] = the index in YYTABLE of the portion describing what to
do after reducing a rule that derives variable I + NTOKENS. This
portion is indexed by the parser state number, S, as of before the
text for this nonterminal was read.
If YYPGOTO[I] + S is outside the bounds of YYTABLE (from 0 to YYLAST)
or if S is outside the bounds of the portion for I (that is,
YYCHECK[YYPGOTO[I] + S] != S), then the default state (that is,
YYDEFGOTO[I]) should be used instead of YYTABLE. Otherwise,
YYTABLE[YYPGOTO[I] + S] is the state to go to even if YYPGOTO[I] < 0.
*/
extern int nvectors;
typedef int base_number;
extern base_number *base;
/* A distinguished value of BASE, negative infinite. During the
computation equals to BASE_MINIMUM, later mapped to BASE_NINF to
keep parser tables small. */
extern base_number base_ninf;
extern unsigned int *conflict_table;
extern unsigned int *conflict_list;
extern int conflict_list_cnt;
extern base_number *table;
extern base_number *check;
/* The value used in TABLE to denote explicit syntax errors
(%nonassoc), a negative infinite. */
extern base_number table_ninf;
extern state_number *yydefgoto;
extern rule_number *yydefact;
extern int high;
void tables_generate (void);
void tables_free (void);
#endif /* !TABLES_H_ */