mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* data/lalr1.cc (yylex_): Remove, inline its code.
(yyreport_syntax_error_): Remove, replaced by... (yysyntax_error_): this which returns a string and leaves to the caller the call to the users' error function. (yylooka_, yyilooka_, yylval, yylloc, yyerror_range_, yyval, yyloc): Move from members of the parser object... (yylooka, yyilooka, yylval, yylloc, yyerror_range, yyval, yyloc): to local variables of the parse function.
This commit is contained in:
11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
|||||||
|
2005-09-16 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* data/lalr1.cc (yylex_): Remove, inline its code.
|
||||||
|
(yyreport_syntax_error_): Remove, replaced by...
|
||||||
|
(yysyntax_error_): this which returns a string and leaves to the
|
||||||
|
caller the call to the users' error function.
|
||||||
|
(yylooka_, yyilooka_, yylval, yylloc, yyerror_range_, yyval, yyloc):
|
||||||
|
Move from members of the parser object...
|
||||||
|
(yylooka, yyilooka, yylval, yylloc, yyerror_range, yyval, yyloc):
|
||||||
|
to local variables of the parse function.
|
||||||
|
|
||||||
2005-09-16 Akim Demaille <akim@epita.fr>
|
2005-09-16 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* doc/bison.texinfo (Calc++ Parser): Don't promote defining YYEOF
|
* doc/bison.texinfo (Calc++ Parser): Don't promote defining YYEOF
|
||||||
|
|||||||
194
data/lalr1.cc
194
data/lalr1.cc
@@ -257,17 +257,14 @@ namespace yy
|
|||||||
void set_debug_level (debug_level_type l);
|
void set_debug_level (debug_level_type l);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/// Call the scanner.
|
|
||||||
virtual void yylex_ ();
|
|
||||||
|
|
||||||
/// Report a syntax error.
|
/// Report a syntax error.
|
||||||
/// \param loc where the syntax error is found.
|
/// \param loc where the syntax error is found.
|
||||||
/// \param msg a description of the syntax error.
|
/// \param msg a description of the syntax error.
|
||||||
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, and invoke error.
|
/// Generate an error message.
|
||||||
virtual void yyreport_syntax_error_ ();
|
/// \param tok the look-ahead token.
|
||||||
|
virtual std::string yysyntax_error_ (int tok);
|
||||||
|
|
||||||
#if YYDEBUG
|
#if YYDEBUG
|
||||||
/// \brief Report a symbol on the debug stream.
|
/// \brief Report a symbol on the debug stream.
|
||||||
@@ -398,21 +395,6 @@ namespace yy
|
|||||||
int yydebug_;
|
int yydebug_;
|
||||||
std::ostream* yycdebug_;
|
std::ostream* yycdebug_;
|
||||||
|
|
||||||
/* Look-ahead and look-ahead in internal form. */
|
|
||||||
int yylooka_;
|
|
||||||
int yyilooka_;
|
|
||||||
|
|
||||||
/// Semantic value of the look-ahead.
|
|
||||||
semantic_type yylval;
|
|
||||||
/// Location of the look-ahead.
|
|
||||||
location_type yylloc;
|
|
||||||
/// The locations where the error started and ended.
|
|
||||||
location yyerror_range_[2];
|
|
||||||
|
|
||||||
/// $$.
|
|
||||||
semantic_type yyval;
|
|
||||||
/// @@$.
|
|
||||||
location_type yyloc;
|
|
||||||
]b4_parse_param_vars[
|
]b4_parse_param_vars[
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -610,6 +592,22 @@ yy::]b4_parser_class_name[::set_debug_level (debug_level_type l)
|
|||||||
int
|
int
|
||||||
yy::]b4_parser_class_name[::parse ()
|
yy::]b4_parser_class_name[::parse ()
|
||||||
{
|
{
|
||||||
|
/* Look-ahead and look-ahead in internal form. */
|
||||||
|
int yylooka;
|
||||||
|
int yyilooka;
|
||||||
|
|
||||||
|
/// Semantic value of the look-ahead.
|
||||||
|
semantic_type yylval;
|
||||||
|
/// Location of the look-ahead.
|
||||||
|
location_type yylloc;
|
||||||
|
/// The locations where the error started and ended.
|
||||||
|
location yyerror_range[2];
|
||||||
|
|
||||||
|
/// $$.
|
||||||
|
semantic_type yyval;
|
||||||
|
/// @@$.
|
||||||
|
location_type yyloc;
|
||||||
|
|
||||||
int yyresult_;
|
int yyresult_;
|
||||||
|
|
||||||
YYCDEBUG << "Starting parse" << std::endl;
|
YYCDEBUG << "Starting parse" << std::endl;
|
||||||
@@ -619,7 +617,7 @@ yy::]b4_parser_class_name[::parse ()
|
|||||||
|
|
||||||
/* Start. */
|
/* Start. */
|
||||||
yystate_ = 0;
|
yystate_ = 0;
|
||||||
yylooka_ = yyempty_;
|
yylooka = 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
|
||||||
@@ -656,25 +654,32 @@ yybackup:
|
|||||||
goto yydefault;
|
goto yydefault;
|
||||||
|
|
||||||
/* Read a look-ahead token. */
|
/* Read a look-ahead token. */
|
||||||
if (yylooka_ == yyempty_)
|
if (yylooka == yyempty_)
|
||||||
yylex_ ();
|
{
|
||||||
|
YYCDEBUG << "Reading a token: ";
|
||||||
|
yylooka = ]b4_c_function_call([yylex], [int],
|
||||||
|
[[YYSTYPE*], [&yylval]][]dnl
|
||||||
|
b4_location_if([, [[location*], [&yylloc]]])dnl
|
||||||
|
m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Convert token to internal form. */
|
/* Convert token to internal form. */
|
||||||
if (yylooka_ <= yyeof_)
|
if (yylooka <= yyeof_)
|
||||||
{
|
{
|
||||||
yylooka_ = yyilooka_ = yyeof_;
|
yylooka = yyilooka = yyeof_;
|
||||||
YYCDEBUG << "Now at end of input." << std::endl;
|
YYCDEBUG << "Now at end of input." << std::endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
yyilooka_ = yytranslate_ (yylooka_);
|
yyilooka = yytranslate_ (yylooka);
|
||||||
YY_SYMBOL_PRINT ("Next token is", yyilooka_, &yylval, &yylloc);
|
YY_SYMBOL_PRINT ("Next token is", yyilooka, &yylval, &yylloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the proper action on seeing token ILOOKA_ is to reduce or to
|
/* If the proper action on seeing token ILOOKA_ is to reduce or to
|
||||||
detect an error, take that action. */
|
detect an error, take that action. */
|
||||||
yyn_ += yyilooka_;
|
yyn_ += yyilooka;
|
||||||
if (yyn_ < 0 || yylast_ < yyn_ || yycheck_[yyn_] != yyilooka_)
|
if (yyn_ < 0 || yylast_ < yyn_ || yycheck_[yyn_] != yyilooka)
|
||||||
goto yydefault;
|
goto yydefault;
|
||||||
|
|
||||||
/* Reduce or error. */
|
/* Reduce or error. */
|
||||||
@@ -697,11 +702,11 @@ yybackup:
|
|||||||
goto yyacceptlab;
|
goto yyacceptlab;
|
||||||
|
|
||||||
/* Shift the look-ahead token. */
|
/* Shift the look-ahead token. */
|
||||||
YY_SYMBOL_PRINT ("Shifting", yyilooka_, &yylval, &yylloc);
|
YY_SYMBOL_PRINT ("Shifting", yyilooka, &yylval, &yylloc);
|
||||||
|
|
||||||
/* Discard the token being shifted unless it is eof. */
|
/* Discard the token being shifted unless it is eof. */
|
||||||
if (yylooka_ != yyeof_)
|
if (yylooka != yyeof_)
|
||||||
yylooka_ = yyempty_;
|
yylooka = yyempty_;
|
||||||
|
|
||||||
yysemantic_stack_.push (yylval);
|
yysemantic_stack_.push (yylval);
|
||||||
yylocation_stack_.push (yylloc);
|
yylocation_stack_.push (yylloc);
|
||||||
@@ -775,24 +780,28 @@ b4_syncline([@oline@], [@ofile@])[
|
|||||||
`------------------------------------*/
|
`------------------------------------*/
|
||||||
yyerrlab:
|
yyerrlab:
|
||||||
/* If not already recovering from an error, report this error. */
|
/* If not already recovering from an error, report this error. */
|
||||||
yyreport_syntax_error_ ();
|
if (!yyerrstatus_)
|
||||||
|
{
|
||||||
|
++yynerrs_;
|
||||||
|
error (yylloc, yysyntax_error_ (yyilooka));
|
||||||
|
}
|
||||||
|
|
||||||
yyerror_range_[0] = yylloc;
|
yyerror_range[0] = yylloc;
|
||||||
if (yyerrstatus_ == 3)
|
if (yyerrstatus_ == 3)
|
||||||
{
|
{
|
||||||
/* If just tried and failed to reuse look-ahead token after an
|
/* If just tried and failed to reuse look-ahead token after an
|
||||||
error, discard it. */
|
error, discard it. */
|
||||||
|
|
||||||
if (yylooka_ <= yyeof_)
|
if (yylooka <= yyeof_)
|
||||||
{
|
{
|
||||||
/* Return failure if at end of input. */
|
/* Return failure if at end of input. */
|
||||||
if (yylooka_ == yyeof_)
|
if (yylooka == yyeof_)
|
||||||
YYABORT;
|
YYABORT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
yydestruct_ ("Error: discarding", yyilooka_, &yylval, &yylloc);
|
yydestruct_ ("Error: discarding", yyilooka, &yylval, &yylloc);
|
||||||
yylooka_ = yyempty_;
|
yylooka = yyempty_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -812,7 +821,7 @@ 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;
|
||||||
@@ -841,7 +850,7 @@ yyerrlab1:
|
|||||||
if (yystate_stack_.height () == 1)
|
if (yystate_stack_.height () == 1)
|
||||||
YYABORT;
|
YYABORT;
|
||||||
|
|
||||||
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]);
|
||||||
@@ -853,10 +862,10 @@ yyerrlab1:
|
|||||||
if (yyn_ == yyfinal_)
|
if (yyn_ == yyfinal_)
|
||||||
goto yyacceptlab;
|
goto yyacceptlab;
|
||||||
|
|
||||||
yyerror_range_[1] = yylloc;
|
yyerror_range[1] = yylloc;
|
||||||
// Using YYLLOC is tempting, but would change the location of
|
// Using YYLLOC is tempting, but would change the location of
|
||||||
// the look-ahead. YYLOC is available though.
|
// the look-ahead. YYLOC is available though.
|
||||||
YYLLOC_DEFAULT (yyloc, yyerror_range_ - 1, 2);
|
YYLLOC_DEFAULT (yyloc, yyerror_range - 1, 2);
|
||||||
yysemantic_stack_.push (yylval);
|
yysemantic_stack_.push (yylval);
|
||||||
yylocation_stack_.push (yyloc);
|
yylocation_stack_.push (yyloc);
|
||||||
|
|
||||||
@@ -878,8 +887,8 @@ yyabortlab:
|
|||||||
goto yyreturn;
|
goto yyreturn;
|
||||||
|
|
||||||
yyreturn:
|
yyreturn:
|
||||||
if (yylooka_ != yyeof_ && yylooka_ != yyempty_)
|
if (yylooka != yyeof_ && yylooka != yyempty_)
|
||||||
yydestruct_ ("Cleanup: discarding lookahead", yyilooka_, &yylval, &yylloc);
|
yydestruct_ ("Cleanup: discarding lookahead", yyilooka, &yylval, &yylloc);
|
||||||
|
|
||||||
while (yystate_stack_.height () != 1)
|
while (yystate_stack_.height () != 1)
|
||||||
{
|
{
|
||||||
@@ -893,67 +902,52 @@ yyreturn:
|
|||||||
return yyresult_;
|
return yyresult_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
// Generate an error message.
|
||||||
yy::]b4_parser_class_name[::yylex_ ()
|
std::string
|
||||||
|
yy::]b4_parser_class_name[::yysyntax_error_ (int tok)
|
||||||
{
|
{
|
||||||
YYCDEBUG << "Reading a token: ";
|
std::string res;
|
||||||
yylooka_ = ]b4_c_function_call([yylex], [int],
|
|
||||||
[[YYSTYPE*], [&yylval]][]dnl
|
|
||||||
b4_location_if([, [[location*], [&yylloc]]])dnl
|
|
||||||
m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate an error message, and invoke error.
|
|
||||||
void
|
|
||||||
yy::]b4_parser_class_name[::yyreport_syntax_error_ ()
|
|
||||||
{
|
|
||||||
/* If not already recovering from an error, report this error. */
|
|
||||||
if (!yyerrstatus_)
|
|
||||||
{
|
|
||||||
++yynerrs_;
|
|
||||||
std::string message;
|
|
||||||
#if YYERROR_VERBOSE
|
#if YYERROR_VERBOSE
|
||||||
yyn_ = yypact_[yystate_];
|
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)
|
||||||
|
if (yycheck_[x + yyn_] == x && x != yyterror_)
|
||||||
|
++count;
|
||||||
|
|
||||||
|
// FIXME: This method of building the message is not compatible
|
||||||
|
// with internationalization. It should work like yacc.c does it.
|
||||||
|
// That is, first build a string that looks like this:
|
||||||
|
// "syntax error, unexpected %s or %s or %s"
|
||||||
|
// Then, invoke YY_ on this string.
|
||||||
|
// Finally, use the string as a format to output
|
||||||
|
// yytname_[tok], etc.
|
||||||
|
// Until this gets fixed, this message appears in English only.
|
||||||
|
res = "syntax error, unexpected ";
|
||||||
|
res += yytnamerr_ (yytname_[tok]);
|
||||||
|
if (count < 5)
|
||||||
|
{
|
||||||
|
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;
|
{
|
||||||
|
res += (!count++) ? ", expecting " : " or ";
|
||||||
// FIXME: This method of building the message is not compatible
|
res += yytnamerr_ (yytname_[x]);
|
||||||
// with internationalization. It should work like yacc.c does it.
|
}
|
||||||
// That is, first build a string that looks like this:
|
}
|
||||||
// "syntax error, unexpected %s or %s or %s"
|
|
||||||
// Then, invoke YY_ on this string.
|
|
||||||
// Finally, use the string as a format to output
|
|
||||||
// yytname_[yyilooka_], etc.
|
|
||||||
// Until this gets fixed, this message appears in English only.
|
|
||||||
message = "syntax error, unexpected ";
|
|
||||||
message += yytnamerr_ (yytname_[yyilooka_]);
|
|
||||||
if (count < 5)
|
|
||||||
{
|
|
||||||
count = 0;
|
|
||||||
for (int x = yyxbegin; x < yyxend; ++x)
|
|
||||||
if (yycheck_[x + yyn_] == x && x != yyterror_)
|
|
||||||
{
|
|
||||||
message += (!count++) ? ", expecting " : " or ";
|
|
||||||
message += yytnamerr_ (yytname_[x]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
message = YY_("syntax error");
|
|
||||||
error (yylloc, message);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
res = YY_("syntax error");
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user