[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FYI] skeleton-c++-error-reporting.patch
From: |
Robert Anisko |
Subject: |
[FYI] skeleton-c++-error-reporting.patch |
Date: |
Thu, 7 Feb 2002 12:43:39 +0100 (CET) |
Index: ChangeLog
===================================================================
RCS file: /cvsroot/bison/bison/ChangeLog,v
retrieving revision 1.537
diff -u -r1.537 ChangeLog
--- ChangeLog 6 Feb 2002 15:17:57 -0000 1.537
+++ ChangeLog 7 Feb 2002 11:32:52 -0000
@@ -1,3 +1,9 @@
+2002-02-07 Robert Anisko <address@hidden>
+
+ * data/bison.c++ (yy::b4_name::error_): New method, replaces yyerror in
+ C++ parsers.
+ (yy::b4_name::parse): Build verbose error messages, and use error_.
+
2002-02-06 Robert Anisko <address@hidden>
* data/bison.c++: Fix m4 quoting in comments.
Index: data/bison.c++
===================================================================
RCS file: /cvsroot/bison/bison/data/bison.c++,v
retrieving revision 1.4
diff -u -r1.4 bison.c++
--- data/bison.c++ 6 Feb 2002 15:17:57 -0000 1.4
+++ data/bison.c++ 7 Feb 2002 11:32:52 -0000
@@ -80,11 +80,13 @@
private:
+ virtual void error_ ();
+
/* Call to lexical analyser. */
- virtual
- void
- lex ()
- {
+ virtual
+ void
+ lex ()
+ {
looka = yylex (&value, &location);
}
@@ -124,11 +126,14 @@
int len;
int debug_;
int state;
-
+
/* Lookahead. */
int looka;
int ilooka;
-
+
+ /* Message. */
+ std::string message;
+
/* @$ and $$. */
SemanticType value;
LocationType location;
@@ -169,6 +174,9 @@
int
yy::b4_name::parse ()
{
+ int nerrs = 0;
+ int errstatus = 0;
+
/* Initialize stack. */
state_stack = StateStack (0);
semantic_stack = SemanticStack (1);
@@ -333,7 +341,39 @@
/* Report and recover from errors. This is very incomplete. */
yyerrlab:
- std::cerr << "Parse error." << std::endl; // FIXME: Need something like
yyerror?
+ /* If not already recovering from an error, report this error. */
+ if (!errstatus)
+ {
+ ++nerrs;
+
+ // FIXME: Should be #if YYERROR_VERBOSE from here...
+ n = pact_[[state]];
+ if (n > b4_flag && n < b4_last)
+ {
+ message = "parse error, unexpected ";
+ message += name_[[ilooka]];
+ {
+ int count = 0;
+ for (int x = (n < 0 ? -n : 0); x < b4_ntokens + b4_nnts; ++x)
+ if (check_[[x + n]] == x)
+ ++count;
+ if (count < 5)
+ {
+ count = 0;
+ for (int x = (n < 0 ? -n : 0); x < b4_ntokens + b4_nnts; ++x)
+ if (check_[[x + n]] == x)
+ {
+ message += (!count++) ? ", expecting " : " or ";
+ message += name_[[x]];
+ }
+ }
+ }
+ }
+ else
+ // FIXME: to there...
+ message = "parse error";
+ }
+ error_ ();
return 1;
/* Accept. */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [FYI] skeleton-c++-error-reporting.patch,
Robert Anisko <=