[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
FYI: lalr1.cc: report_syntax_error_
From: |
Akim Demaille |
Subject: |
FYI: lalr1.cc: report_syntax_error_ |
Date: |
Tue, 26 Aug 2003 09:09:00 +0200 |
from Akim Demaille <address@hidden>
* data/lalr1.cc (Parser::report_syntax_error_): New, extracted from
(Parser::parse): here.
Adjust: nerrs and errstatus is now replaced by...
(Parser::nerrs_, Parser::errstatus_): New.
Index: data/lalr1.cc
===================================================================
RCS file: /cvsroot/bison/bison/data/lalr1.cc,v
retrieving revision 1.40
diff -u -u -r1.40 lalr1.cc
--- data/lalr1.cc 25 Aug 2003 09:54:57 -0000 1.40
+++ data/lalr1.cc 26 Aug 2003 05:18:13 -0000
@@ -234,6 +234,7 @@
virtual void lex_ ();
virtual void error_ ();
virtual void print_ ();
+ virtual void report_syntax_error_ ();
/* Stacks. */
StateStack state_stack_;
@@ -288,6 +289,10 @@
int len_;
int state_;
+ /* Error handling. */
+ int nerrs_;
+ int errstatus_;
+
/* Debugging. */
int debug_;
std::ostream &cdebug_;
@@ -348,8 +353,8 @@
int
yy::]b4_parser_class_name[::parse ()
{
- int nerrs = 0;
- int errstatus = 0;
+ nerrs_ = 0;
+ errstatus_ = 0;
/* Initialize the stacks. The initial state will be pushed in
yynewstate, since the latter expects the semantical and the
@@ -449,8 +454,8 @@
/* Count tokens shifted since error; after three, turn off error
status. */
- if (errstatus)
- --errstatus;
+ if (errstatus_)
+ --errstatus_;
state_ = n_;
goto yynewstate;
@@ -523,46 +528,9 @@
`------------------------------------*/
yyerrlab:
/* If not already recovering from an error, report this error. */
- if (!errstatus)
- {
- ++nerrs;
+ report_syntax_error_ ();
-#if YYERROR_VERBOSE
- n_ = pact_[state_];
- if (pact_ninf_ < n_ && n_ < last_)
- {
- message = "syntax error, unexpected ";
- message += name_[ilooka_];
- {
- int count = 0;
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int xbegin = n_ < 0 ? -n_ : 0;
- /* Stay within bounds of both yycheck and yytname. */
- int checklim = last_ - n_;
- int xend = checklim < ntokens_ ? checklim : ntokens_;
- for (int x = xbegin; x < xend; ++x)
- if (check_[x + n_] == x && x != terror_)
- ++count;
- if (count < 5)
- {
- count = 0;
- for (int x1 = xbegin; x1 < xend; ++x1)
- if (check_[x1 + n_] == x1 && x1 != terror_)
- {
- message += (!count++) ? ", expecting " : " or ";
- message += name_[x1];
- }
- }
- }
- }
- else
-#endif
- message = "syntax error";
- error_ ();
- }
-
- if (errstatus == 3)
+ if (errstatus_ == 3)
{
/* If just tried and failed to reuse lookahead token after an
error, discard it. */
@@ -615,7 +583,7 @@
| yyerrlab1 -- common code for both syntax error and YYERROR. |
`-------------------------------------------------------------*/
yyerrlab1:
- errstatus = 3; /* Each real token shifted decrements this. */
+ errstatus_ = 3; /* Each real token shifted decrements this. */
for (;;)
{
@@ -692,6 +660,45 @@
#else
looka_ = yylex (&value);
#endif
+}
+
+/** Generate an error message, and invoke yyerror. */
+void
+yy::]b4_parser_class_name[::report_syntax_error_ ()
+{
+ /* If not already recovering from an error, report this error. */
+ if (!errstatus_)
+ {
+ ++nerrs_;
+
+#if YYERROR_VERBOSE
+ n_ = pact_[state_];
+ if (pact_ninf_ < n_ && n_ < last_)
+ {
+ message = "syntax error, unexpected ";
+ message += name_[ilooka_];
+ {
+ int count = 0;
+ for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
+ if (check_[x + n_] == x && x != terror_)
+ ++count;
+ if (count < 5)
+ {
+ count = 0;
+ for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
+ if (check_[x + n_] == x && x != terror_)
+ {
+ message += (!count++) ? ", expecting " : " or ";
+ message += name_[x];
+ }
+ }
+ }
+ }
+ else
+#endif
+ message = "syntax error";
+ error_ ();
+ }
}
Date: Tue, 26 Aug 2003 09:09:00 +0200
Message-ID: <address@hidden>
User-Agent: Gnus/5.1002 (Gnus v5.10.2) Emacs/21.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- FYI: lalr1.cc: report_syntax_error_,
Akim Demaille <=