bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

07-error-in-parse-errors.patch


From: Akim Demaille
Subject: 07-error-in-parse-errors.patch
Date: Tue, 30 Jul 2002 14:15:23 +0200

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        In verbose parse error message, don't report `error' as an
        expected token.
        * tests/actions.at (Printers and Destructors): Adjust.
        * tests/calc.at (Calculator $1): Adjust.
        * data/yacc.c, data/glr.c, data/lalr1.c: When making the verbose
        error message, do not report the parser accepts the error token in
        that state.

Index: NEWS
--- NEWS Tue, 30 Jul 2002 12:36:46 +0200 akim
+++ NEWS Tue, 30 Jul 2002 13:23:28 +0200 akim
@@ -30,6 +30,13 @@
   user specified that one of her tokens is numbered 256, then error
   will be mapped onto another number.

+* Verbose error messages
+  They no longer report `..., expecting error or...' for state where
+  error recovery is possible.
+
+* End token
+  Defaults to `$end' instead of `$'.
+
 * Error recovery now conforms to documentation and to POSIX
   When a Bison-generated parser encounters a syntax error, it now pops
   the stack until it finds a state that allows shifting the error
@@ -84,7 +91,7 @@
 * Token end-of-file
   The token end of file may be specified by the user, in which case,
   the user symbol is used in the reports, the graphs, and the verbose
-  error messages instead of `$', which remains being the defaults.
+  error messages instead of `$end', which remains being the defaults.
   For instance
      %token YYEOF 0
   or
Index: TODO
--- TODO Sun, 28 Jul 2002 16:59:35 +0200 akim
+++ TODO Tue, 30 Jul 2002 13:20:19 +0200 akim
@@ -16,30 +16,6 @@

 is really weird.  Revisit them all.

-* Stupid error messages
-An example shows it easily:
-
-src/bison/tests % ./testsuite -k calc,location,error-verbose -l
-GNU Bison 1.49a test suite test groups:
-
- NUM: FILENAME:LINE      TEST-GROUP-NAME
-      KEYWORDS
-
-  51: calc.at:440        Calculator --locations --yyerror-verbose
-  52: calc.at:442        Calculator --defines --locations --name-prefix=calc 
--verbose --yacc --yyerror-verbose
-  54: calc.at:445        Calculator --debug --defines --locations 
--name-prefix=calc --verbose --yacc --yyerror-verbose
-src/bison/tests % ./testsuite 51 -d
-## --------------------------- ##
-## GNU Bison 1.49a test suite. ##
-## --------------------------- ##
- 51: calc.at:440       ok
-## ---------------------------- ##
-## All 1 tests were successful. ##
-## ---------------------------- ##
-src/bison/tests % cd ./testsuite.dir/51
-tests/testsuite.dir/51 % echo "()" | ./calc
-1.2-1.3: parse error, unexpected ')', expecting error or "number" or '-' or '('
-

 * read_pipe.c
 This is not portable to DOS for instance.  Implement a more portable
Index: data/yacc.c
--- data/yacc.c Fri, 26 Jul 2002 08:26:57 +0200 akim
+++ data/yacc.c Tue, 30 Jul 2002 13:17:46 +0200 akim
@@ -667,7 +667,7 @@ m4_define([b4_symbol_actions],
         YYCHECK.  */
       for (yyx = yyn < 0 ? -yyn : 0;
           yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
-       if (yycheck[yyx + yyn] == yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
          yysize += yystrlen (yytname[yyx]) + 15, yycount++;
       yysize += yystrlen ("parse error, unexpected ") + 1;
       yysize += yystrlen (yytname[yytype]);
@@ -683,7 +683,7 @@ m4_define([b4_symbol_actions],
              for (yyx = yyn < 0 ? -yyn : 0;
                   yyx < (int) (sizeof (yytname) / sizeof (char *));
                   yyx++)
-               if (yycheck[yyx + yyn] == yyx)
+               if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
                  {
                    const char *yyq = ! yycount ? ", expecting " : " or ";
                    yyp = yystpcpy (yyp, yyq);
Index: data/lalr1.cc
--- data/lalr1.cc Thu, 25 Jul 2002 19:34:04 +0200 akim
+++ data/lalr1.cc Tue, 30 Jul 2002 13:18:59 +0200 akim
@@ -500,13 +500,13 @@ yy::b4_name::parse ()
          {
            int count = 0;
            for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
-             if (check_[[x + n_]] == 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)
+                 if (check_[[x + n_]] == x && x != terror_)
                    {
                      message += (!count++) ? ", expecting " : " or ";
                      message += name_[[x]];
Index: data/glr.c
--- data/glr.c Thu, 25 Jul 2002 19:34:04 +0200 akim
+++ data/glr.c Tue, 30 Jul 2002 13:19:45 +0200 akim
@@ -1512,7 +1512,7 @@ m4_define_default([b4_header_guard],
          yyprefix = ", expecting ";
          for (yyx = yyn < 0 ? -yyn : 0; yyx < yytname_size && yycount <= 5;
               yyx += 1)
-           if (yycheck[yyx + yyn] == yyx)
+           if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
              yysize += strlen (yytokenName (yyx)) + strlen (yyprefix),
                yycount += 1, yyprefix = " or ";
          yymsg = yyp = (char*) malloc (yysize);
Index: tests/actions.at
--- tests/actions.at Sun, 28 Jul 2002 16:59:35 +0200 akim
+++ tests/actions.at Tue, 30 Jul 2002 13:20:46 +0200 akim
@@ -327,7 +327,7 @@ sending: 'x' (value = 10, line 100)
 sending: ';' (value = 11, line 110)
 line(10): thing(10) ';'
 sending: 'y' (value = 12, line 120)
-120: parse error, unexpected $undefined, expecting $end or error or 'x'
+120: parse error, unexpected $undefined, expecting $end or 'x'
 sending: EOF
 Freeing nterm line (10 from 100)
 Freeing nterm line (7 from 70)
Index: tests/calc.at
--- tests/calc.at Sun, 28 Jul 2002 16:59:35 +0200 akim
+++ tests/calc.at Tue, 30 Jul 2002 13:23:54 +0200 akim
@@ -419,7 +419,7 @@ calc: error: 0 != 1])
 # Add a studid example demonstrating that Bison can further improve the
 # error message.  FIXME: Fix this ridiculous message.
 _AT_CHECK_CALC_ERROR([$1], [()], [21],
-[1.2-1.3: parse error, unexpected ')', expecting error or "number" or '-' or 
'('])
+[1.2-1.3: parse error, unexpected ')', expecting "number" or '-' or '('])

 AT_CLEANUP
 ])# AT_CHECK_CALC



reply via email to

[Prev in Thread] Current Thread [Next in Thread]