* data/c.m4 (b4_error_verbose_if): New.

* data/lalr1.cc: Use it.
(YYERROR_VERBOSE_IF): Remove.
(yyn_, yylen_, yystate_, yynerrs_, yyerrstatus_): Remove as
parser members, replaced by...
(yyn, yylen, yystate, yynerss, yyerrstatus): these parser::parse
local variables.
(yysyntax_error_): Takes the state number as argument.
(yyreduce_print_): Use the argument yyrule, not the former
attribute yyn_.
This commit is contained in:
Akim Demaille
2005-09-29 06:50:57 +00:00
parent 8a6f72f3d7
commit d4fb5e3cb9
5 changed files with 96 additions and 88 deletions

View File

@@ -1,3 +1,16 @@
2005-09-29 Akim <akim@epita.fr>
* data/c.m4 (b4_error_verbose_if): New.
* data/lalr1.cc: Use it.
(YYERROR_VERBOSE_IF): Remove.
(yyn_, yylen_, yystate_, yynerrs_, yyerrstatus_): Remove as
parser members, replaced by...
(yyn, yylen, yystate, yynerss, yyerrstatus): these parser::parse
local variables.
(yysyntax_error_): Takes the state number as argument.
(yyreduce_print_): Use the argument yyrule, not the former
attribute yyn_.
2005-09-26 Paul Eggert <eggert@cs.ucla.edu> 2005-09-26 Paul Eggert <eggert@cs.ucla.edu>
* bootstrap (gnulib_modules): Add verify. * bootstrap (gnulib_modules): Add verify.

View File

@@ -1,4 +1,4 @@
m4_divert(-1) m4_divert(-1) -*- Autoconf -*-
# C++ skeleton for Bison # C++ skeleton for Bison

View File

@@ -138,6 +138,15 @@ m4_define([b4_int_type_for],
## ------------------ ## ## ------------------ ##
# b4_error_verbose_if(IF-TRUE, IF-FALSE)
# --------------------------------------
# Expand IF-TRUE, if errors are verbose, IF-FALSE otherwise.
m4_define([b4_error_verbose_if],
[m4_if(b4_error_verbose, [1],
[$1],
[$2])])
# b4_location_if(IF-TRUE, IF-FALSE) # b4_location_if(IF-TRUE, IF-FALSE)
# --------------------------------- # ---------------------------------
# Expand IF-TRUE, if locations are used, IF-FALSE otherwise. # Expand IF-TRUE, if locations are used, IF-FALSE otherwise.

View File

@@ -69,12 +69,6 @@ b4_syncline([@oline@], [@ofile@])[
# define YYERROR_VERBOSE ]b4_error_verbose[ # define YYERROR_VERBOSE ]b4_error_verbose[
#endif #endif
#if YYERROR_VERBOSE
# define YYERROR_VERBOSE_IF(x) x
#else
# define YYERROR_VERBOSE_IF(x) /* empty */
#endif
/* Enabling the token table. */ /* Enabling the token table. */
#ifndef YYTOKEN_TABLE #ifndef YYTOKEN_TABLE
# define YYTOKEN_TABLE ]b4_token_table[ # define YYTOKEN_TABLE ]b4_token_table[
@@ -162,8 +156,10 @@ namespace yy
virtual void error (const location_type& loc, const std::string& msg); virtual void error (const location_type& loc, const std::string& msg);
/// Generate an error message. /// Generate an error message.
/// \param tok the look-ahead token. /// \param state the state where the error occurred.
virtual std::string yysyntax_error_ (YYERROR_VERBOSE_IF (int tok)); /// \param tok the look-ahead token.
virtual std::string yysyntax_error_ (int yystate]dnl
b4_error_verbose_if([, int tok])[);
#if YYDEBUG #if YYDEBUG
/// \brief Report a symbol on the debug stream. /// \brief Report a symbol on the debug stream.
@@ -281,15 +277,6 @@ namespace yy
static const unsigned int yyuser_token_number_max_; static const unsigned int yyuser_token_number_max_;
static const token_number_type yyundef_token_; static const token_number_type yyundef_token_;
/* State. */
int yyn_;
int yylen_;
int yystate_;
/* Error handling. */
int yynerrs_;
int yyerrstatus_;
/* Debugging. */ /* Debugging. */
int yydebug_; int yydebug_;
std::ostream* yycdebug_; std::ostream* yycdebug_;
@@ -492,8 +479,17 @@ int
yy::]b4_parser_class_name[::parse () yy::]b4_parser_class_name[::parse ()
{ {
/// Look-ahead and look-ahead in internal form. /// Look-ahead and look-ahead in internal form.
int yychar; int yychar = yyempty_;
int yytoken; int yytoken = 0;
/* State. */
int yyn;
int yylen;
int yystate = 0;
/* Error handling. */
int yynerrs_ = 0;
int yyerrstatus_ = 0;
/// Semantic value of the look-ahead. /// Semantic value of the look-ahead.
semantic_type yylval; semantic_type yylval;
@@ -511,13 +507,6 @@ yy::]b4_parser_class_name[::parse ()
YYCDEBUG << "Starting parse" << std::endl; YYCDEBUG << "Starting parse" << std::endl;
yynerrs_ = 0;
yyerrstatus_ = 0;
/* Start. */
yystate_ = 0;
yychar = yyempty_;
]m4_ifdef([b4_initial_action], [ ]m4_ifdef([b4_initial_action], [
m4_pushdef([b4_at_dollar], [yylloc])dnl m4_pushdef([b4_at_dollar], [yylloc])dnl
m4_pushdef([b4_dollar_dollar], [yylval])dnl m4_pushdef([b4_dollar_dollar], [yylval])dnl
@@ -540,16 +529,16 @@ b4_syncline([@oline@], [@ofile@])])dnl
/* New state. */ /* New state. */
yynewstate: yynewstate:
yystate_stack_.push (yystate_); yystate_stack_.push (yystate);
YYCDEBUG << "Entering state " << yystate_ << std::endl; YYCDEBUG << "Entering state " << yystate << std::endl;
goto yybackup; goto yybackup;
/* Backup. */ /* Backup. */
yybackup: yybackup:
/* Try to take a decision without look-ahead. */ /* Try to take a decision without look-ahead. */
yyn_ = yypact_[yystate_]; yyn = yypact_[yystate];
if (yyn_ == yypact_ninf_) if (yyn == yypact_ninf_)
goto yydefault; goto yydefault;
/* Read a look-ahead token. */ /* Read a look-ahead token. */
@@ -575,29 +564,24 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
} }
/* If the proper action on seeing token ILOOKA_ is to reduce or to /* If the proper action on seeing token YYTOKEN is to reduce or to
detect an error, take that action. */ detect an error, take that action. */
yyn_ += yytoken; yyn += yytoken;
if (yyn_ < 0 || yylast_ < yyn_ || yycheck_[yyn_] != yytoken) if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
goto yydefault; goto yydefault;
/* Reduce or error. */ /* Reduce or error. */
yyn_ = yytable_[yyn_]; yyn = yytable_[yyn];
if (yyn_ < 0) if (yyn <= 0)
{ {
if (yyn_ == yytable_ninf_) if (yyn == 0 || yyn == yytable_ninf_)
goto yyerrlab; goto yyerrlab;
else yyn = -yyn;
{ goto yyreduce;
yyn_ = -yyn_;
goto yyreduce;
}
} }
else if (yyn_ == 0)
goto yyerrlab;
/* Accept? */ /* Accept? */
if (yyn_ == yyfinal_) if (yyn == yyfinal_)
goto yyacceptlab; goto yyacceptlab;
/* Shift the look-ahead token. */ /* Shift the look-ahead token. */
@@ -615,15 +599,15 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
if (yyerrstatus_) if (yyerrstatus_)
--yyerrstatus_; --yyerrstatus_;
yystate_ = yyn_; yystate = yyn;
goto yynewstate; goto yynewstate;
/*-----------------------------------------------------------. /*-----------------------------------------------------------.
| yydefault -- do the default action for the current state. | | yydefault -- do the default action for the current state. |
`-----------------------------------------------------------*/ `-----------------------------------------------------------*/
yydefault: yydefault:
yyn_ = yydefact_[yystate_]; yyn = yydefact_[yystate];
if (yyn_ == 0) if (yyn == 0)
goto yyerrlab; goto yyerrlab;
goto yyreduce; goto yyreduce;
@@ -631,24 +615,24 @@ yydefault:
| yyreduce -- Do a reduction. | | yyreduce -- Do a reduction. |
`-----------------------------*/ `-----------------------------*/
yyreduce: yyreduce:
yylen_ = yyr2_[yyn_]; yylen = yyr2_[yyn];
/* If LEN_ is nonzero, implement the default value of the action: /* If LEN_ is nonzero, implement the default value of the action:
`$$ = $1'. Otherwise, use the top of the stack. `$$ = $1'. Otherwise, use the top of the stack.
Otherwise, the following line sets YYVAL to garbage. Otherwise, the following line sets YYVAL to garbage.
This behavior is undocumented and Bison This behavior is undocumented and Bison
users should not rely upon it. */ users should not rely upon it. */
if (yylen_) if (yylen)
yyval = yysemantic_stack_[yylen_ - 1]; yyval = yysemantic_stack_[yylen - 1];
else else
yyval = yysemantic_stack_[0]; yyval = yysemantic_stack_[0];
{ {
slice<location_type, location_stack_type> slice (yylocation_stack_, yylen_); slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
YYLLOC_DEFAULT (yyloc, slice, yylen_); YYLLOC_DEFAULT (yyloc, slice, yylen);
} }
YY_REDUCE_PRINT (yyn_); YY_REDUCE_PRINT (yyn);
switch (yyn_) switch (yyn)
{ {
]b4_actions[ ]b4_actions[
default: break; default: break;
@@ -657,7 +641,7 @@ yyreduce:
]/* Line __line__ of lalr1.cc. */ ]/* Line __line__ of lalr1.cc. */
b4_syncline([@oline@], [@ofile@])[ b4_syncline([@oline@], [@ofile@])[
yypop_ (yylen_); yypop_ (yylen);
YY_STACK_PRINT (); YY_STACK_PRINT ();
@@ -665,13 +649,13 @@ b4_syncline([@oline@], [@ofile@])[
yylocation_stack_.push (yyloc); yylocation_stack_.push (yyloc);
/* Shift the result of the reduction. */ /* Shift the result of the reduction. */
yyn_ = yyr1_[yyn_]; yyn = yyr1_[yyn];
yystate_ = yypgoto_[yyn_ - yyntokens_] + yystate_stack_[0]; yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
if (0 <= yystate_ && yystate_ <= yylast_ if (0 <= yystate && yystate <= yylast_
&& yycheck_[yystate_] == yystate_stack_[0]) && yycheck_[yystate] == yystate_stack_[0])
yystate_ = yytable_[yystate_]; yystate = yytable_[yystate];
else else
yystate_ = yydefgoto_[yyn_ - yyntokens_]; yystate = yydefgoto_[yyn - yyntokens_];
goto yynewstate; goto yynewstate;
/*------------------------------------. /*------------------------------------.
@@ -682,7 +666,8 @@ yyerrlab:
if (!yyerrstatus_) if (!yyerrstatus_)
{ {
++yynerrs_; ++yynerrs_;
error (yylloc, yysyntax_error_ (YYERROR_VERBOSE_IF (yytoken))); error (yylloc, yysyntax_error_ (yystate]dnl
b4_error_verbose_if([, yytoken])[));
} }
yyerror_range[0] = yylloc; yyerror_range[0] = yylloc;
@@ -720,9 +705,9 @@ yyerrorlab:
if (false) if (false)
goto yyerrorlab; goto yyerrorlab;
yyerror_range[0] = yylocation_stack_[yylen_ - 1]; yyerror_range[0] = yylocation_stack_[yylen - 1];
yypop_ (yylen_); yypop_ (yylen);
yystate_ = yystate_stack_[0]; yystate = yystate_stack_[0];
goto yyerrlab1; goto yyerrlab1;
/*-------------------------------------------------------------. /*-------------------------------------------------------------.
@@ -733,14 +718,14 @@ yyerrlab1:
for (;;) for (;;)
{ {
yyn_ = yypact_[yystate_]; yyn = yypact_[yystate];
if (yyn_ != yypact_ninf_) if (yyn != yypact_ninf_)
{ {
yyn_ += yyterror_; yyn += yyterror_;
if (0 <= yyn_ && yyn_ <= yylast_ && yycheck_[yyn_] == yyterror_) if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
{ {
yyn_ = yytable_[yyn_]; yyn = yytable_[yyn];
if (0 < yyn_) if (0 < yyn)
break; break;
} }
} }
@@ -751,14 +736,14 @@ yyerrlab1:
yyerror_range[0] = yylocation_stack_[0]; yyerror_range[0] = yylocation_stack_[0];
yydestruct_ ("Error: popping", yydestruct_ ("Error: popping",
yystos_[yystate_], yystos_[yystate],
&yysemantic_stack_[0], &yylocation_stack_[0]); &yysemantic_stack_[0], &yylocation_stack_[0]);
yypop_ (); yypop_ ();
yystate_ = yystate_stack_[0]; yystate = yystate_stack_[0];
YY_STACK_PRINT (); YY_STACK_PRINT ();
} }
if (yyn_ == yyfinal_) if (yyn == yyfinal_)
goto yyacceptlab; goto yyacceptlab;
yyerror_range[1] = yylloc; yyerror_range[1] = yylloc;
@@ -769,10 +754,10 @@ yyerrlab1:
yylocation_stack_.push (yyloc); yylocation_stack_.push (yyloc);
/* Shift the error token. */ /* Shift the error token. */
YY_SYMBOL_PRINT ("Shifting", yystos_[yyn_], YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
&yysemantic_stack_[0], &yylocation_stack_[0]); &yysemantic_stack_[0], &yylocation_stack_[0]);
yystate_ = yyn_; yystate = yyn;
goto yynewstate; goto yynewstate;
/* Accept. */ /* Accept. */
@@ -803,23 +788,24 @@ yyreturn:
// Generate an error message. // Generate an error message.
std::string std::string
yy::]b4_parser_class_name[::yysyntax_error_ (YYERROR_VERBOSE_IF (int tok)) yy::]b4_parser_class_name[::
yysyntax_error_ (int yystate]b4_error_verbose_if([, int tok])[)
{ {
std::string res; std::string res;
#if YYERROR_VERBOSE #if YYERROR_VERBOSE
yyn_ = yypact_[yystate_]; int yyn = yypact_[yystate];
if (yypact_ninf_ < yyn_ && yyn_ < yylast_) if (yypact_ninf_ < yyn && yyn < yylast_)
{ {
/* Start YYX at -YYN if negative to avoid negative indexes in /* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */ YYCHECK. */
int yyxbegin = yyn_ < 0 ? -yyn_ : 0; int yyxbegin = yyn < 0 ? -yyn : 0;
/* Stay within bounds of both yycheck and yytname. */ /* Stay within bounds of both yycheck and yytname. */
int yychecklim = yylast_ - yyn_; int yychecklim = yylast_ - yyn;
int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
int count = 0; int count = 0;
for (int x = yyxbegin; x < yyxend; ++x) for (int x = yyxbegin; x < yyxend; ++x)
if (yycheck_[x + yyn_] == x && x != yyterror_) if (yycheck_[x + yyn] == x && x != yyterror_)
++count; ++count;
// FIXME: This method of building the message is not compatible // FIXME: This method of building the message is not compatible
@@ -836,7 +822,7 @@ yy::]b4_parser_class_name[::yysyntax_error_ (YYERROR_VERBOSE_IF (int tok))
{ {
count = 0; count = 0;
for (int x = yyxbegin; x < yyxend; ++x) for (int x = yyxbegin; x < yyxend; ++x)
if (yycheck_[x + yyn_] == x && x != yyterror_) if (yycheck_[x + yyn] == x && x != yyterror_)
{ {
res += (!count++) ? ", expecting " : " or "; res += (!count++) ? ", expecting " : " or ";
res += yytnamerr_ (yytname_[x]); res += yytnamerr_ (yytname_[x]);
@@ -981,12 +967,12 @@ yy::]b4_parser_class_name[::yyreduce_print_ (int yyrule)
{ {
unsigned int yylno = yyrline_[yyrule]; unsigned int yylno = yyrline_[yyrule];
/* Print the symbols being reduced, and their result. */ /* Print the symbols being reduced, and their result. */
*yycdebug_ << "Reducing stack by rule " << yyn_ - 1 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
<< " (line " << yylno << "), "; << " (line " << yylno << "), ";
for (]b4_int_type_for([b4_prhs])[ i = yyprhs_[yyn_]; for (]b4_int_type_for([b4_prhs])[ i = yyprhs_[yyrule];
0 <= yyrhs_[i]; ++i) 0 <= yyrhs_[i]; ++i)
*yycdebug_ << yytname_[yyrhs_[i]] << ' '; *yycdebug_ << yytname_[yyrhs_[i]] << ' ';
*yycdebug_ << "-> " << yytname_[yyr1_[yyn_]] << std::endl; *yycdebug_ << "-> " << yytname_[yyr1_[yyrule]] << std::endl;
} }
#endif // YYDEBUG #endif // YYDEBUG

View File

@@ -1,4 +1,4 @@
m4_divert(-1) -*- C -*- m4_divert(-1) -*- C -*-
# Yacc compatible skeleton for Bison # Yacc compatible skeleton for Bison