mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-10 04:43:03 +00:00
More fixes related to last two patches.
* data/bison.m4 (b4_integral_parser_tables_map): Fix YYTABLE comments: zero indicates syntax error not default action. * data/c.m4 (b4_table_value_equals): Comment that YYID must be defined. * 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.
This commit is contained in:
438
src/parse-gram.c
438
src/parse-gram.c
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
/* A Bison parser, made by GNU Bison 2.4.386-e6c849. */
|
||||
/* A Bison parser, made by GNU Bison 2.4.388-53f03. */
|
||||
|
||||
/* Interface for Bison's Yacc-like parsers in C
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
typedef union YYSTYPE
|
||||
{
|
||||
/* Line 1608 of yacc.c */
|
||||
/* Line 1609 of yacc.c */
|
||||
#line 94 "parse-gram.y"
|
||||
|
||||
symbol *symbol;
|
||||
@@ -171,7 +171,7 @@ typedef union YYSTYPE
|
||||
named_ref *named_ref;
|
||||
|
||||
|
||||
/* Line 1608 of yacc.c */
|
||||
/* Line 1609 of yacc.c */
|
||||
#line 176 "src/parse-gram.h"
|
||||
} YYSTYPE;
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
|
||||
56
src/tables.h
56
src/tables.h
@@ -45,6 +45,24 @@
|
||||
|
||||
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.
|
||||
@@ -58,10 +76,10 @@
|
||||
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 if YYCHECK indicates that I is
|
||||
outside the bounds of the portion for S, then the default action
|
||||
(from YYDEFACT and YYDEFGOTO) should be used instead of YYTABLE.
|
||||
Otherwise, the value YYTABLE[YYPACT[S] + I] should be used even if
|
||||
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
|
||||
@@ -69,33 +87,19 @@
|
||||
|
||||
If the value is negative, it is minus a rule number to reduce by.
|
||||
|
||||
If the value is zero, the default action from YYDEFACT[S] is used.
|
||||
|
||||
If the value is YYTABLE_NINF, it's a syntax error.
|
||||
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. The value from YYTABLE is the
|
||||
state to go to if the corresponding value in YYCHECK is S.
|
||||
text for this nonterminal was read.
|
||||
|
||||
YYTABLE = a vector filled with portions for different uses, found
|
||||
via YYPACT and YYPGOTO.
|
||||
|
||||
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.
|
||||
|
||||
YYFINAL = the state number of the termination state.
|
||||
|
||||
YYLAST ( = high) the number of the last element of YYTABLE, i.e.,
|
||||
sizeof (YYTABLE) - 1. */
|
||||
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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user