]> git.saurik.com Git - bison.git/commitdiff
In verbose parse error message, don't report `error' as an
authorAkim Demaille <akim@epita.fr>
Tue, 30 Jul 2002 11:56:44 +0000 (11:56 +0000)
committerAkim Demaille <akim@epita.fr>
Tue, 30 Jul 2002 11:56:44 +0000 (11:56 +0000)
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.

ChangeLog
NEWS
TODO
data/glr.c
data/lalr1.cc
data/yacc.c
tests/actions.at
tests/calc.at

index d1772b89d96468295957ee53f2b1fc16b9c05a6b..983f44e3e1fe7fc44a4d6e2c3834e970ebaeb19e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2002-07-30  Akim Demaille  <akim@epita.fr>
+
+       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.
+
 2002-07-30  Akim Demaille  <akim@epita.fr>
 
        Normalize conflict related messages.
 2002-07-30  Akim Demaille  <akim@epita.fr>
 
        Normalize conflict related messages.
diff --git a/NEWS b/NEWS
index 6123e57a797e8b411be059b3133bfec82ac05142..c589d2f252df959fde689d48a865c3c6f8730fc0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -30,6 +30,13 @@ Changes in version 1.49b:
   user specified that one of her tokens is numbered 256, then error
   will be mapped onto another number.
 
   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
 * 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 @@ Changes in version 1.49b:
 * 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
 * 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
   For instance
      %token YYEOF 0
   or
diff --git a/TODO b/TODO
index 56038fc633fe45fe039748ce7fffda704db774a4..49775d1857d1a2757688a4254c2357f994d1c1e9 100644 (file)
--- a/TODO
+++ b/TODO
@@ -16,30 +16,6 @@ Some are really funky.  For instance
 
 is really weird.  Revisit them all.
 
 
 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
 
 * read_pipe.c
 This is not portable to DOS for instance.  Implement a more portable
index 660a22433fe5806ddcc32933e4299f9a748d3130..c2fab0b8d3e71e3628d9b1e763eee419c9bc8d44 100644 (file)
@@ -1512,7 +1512,7 @@ yyreportParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp)
          yyprefix = ", expecting ";
          for (yyx = yyn < 0 ? -yyn : 0; yyx < yytname_size && yycount <= 5;
               yyx += 1)
          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);
              yysize += strlen (yytokenName (yyx)) + strlen (yyprefix),
                yycount += 1, yyprefix = " or ";
          yymsg = yyp = (char*) malloc (yysize);
index 8527c5e96589226fd9ea91e69ee1304982a8777b..3ea4c58dda601b0085a508979d6d332b3e6b069c 100644 (file)
@@ -500,13 +500,13 @@ yy::b4_name::parse ()
          {
            int count = 0;
            for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
          {
            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)
                ++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]];
                    {
                      message += (!count++) ? ", expecting " : " or ";
                      message += name_[[x]];
index d2d06a10c3e9e1b902dd48ab64b35cddbabecc6e..5b5da3c5a3ffa4ae718a8366addb97ee04f9f9ea 100644 (file)
@@ -667,7 +667,7 @@ b4_c_function([yyreport_parse_error],
         YYCHECK.  */
       for (yyx = yyn < 0 ? -yyn : 0;
           yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
         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]);
          yysize += yystrlen (yytname[yyx]) + 15, yycount++;
       yysize += yystrlen ("parse error, unexpected ") + 1;
       yysize += yystrlen (yytname[yytype]);
@@ -683,7 +683,7 @@ b4_c_function([yyreport_parse_error],
              for (yyx = yyn < 0 ? -yyn : 0;
                   yyx < (int) (sizeof (yytname) / sizeof (char *));
                   yyx++)
              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);
                  {
                    const char *yyq = ! yycount ? ", expecting " : " or ";
                    yyp = yystpcpy (yyp, yyq);
index 92412eebd2520435d63e4956950fcb93e812cf6a..ff23091820f244c8ea97dbdffe30f98e5bbf6294 100644 (file)
@@ -327,7 +327,7 @@ thing(10): 'x'(10)
 sending: ';' (value = 11, line 110)
 line(10): thing(10) ';'
 sending: 'y' (value = 12, line 120)
 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)
 sending: EOF
 Freeing nterm line (10 from 100)
 Freeing nterm line (7 from 70)
index 161ba9c2b405ffd5d6215838c616c3d756a15b59..8875f9cd1ad407071551dd455d19b5353bc50695 100644 (file)
@@ -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],
 # 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
 
 AT_CLEANUP
 ])# AT_CHECK_CALC