bison-patches
[Top][All Lists]
Advanced

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

`YYERROR;' should not discard lookahead token


From: Paul Eggert
Subject: `YYERROR;' should not discard lookahead token
Date: Sun, 24 Nov 2002 22:45:34 -0800 (PST)

POSIX 1003.1-2001 says that a Yacc-generated parser should not discard
the lookahead token merely because a user action invokes `YYERROR;',
so I installed this patch.  (This patch also removes an obsolete,
unrelated comment.)

2002-11-24  Paul Eggert  <address@hidden>

        * data/yacc.c (yyerrlab1): Move this label down, so that the
        parser does not discard the lookahead token if the user code
        invokes YYERROR.  This change is required for POSIX conformance.

Index: yacc.c
===================================================================
RCS file: /cvsroot/bison/bison/data/yacc.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -p -u -r1.38 -r1.39
--- yacc.c      16 Nov 2002 12:32:27 -0000      1.38
+++ yacc.c      25 Nov 2002 06:42:10 -0000      1.39
@@ -912,8 +912,6 @@ yybackup:
     }
   else
     {
-      /* We have to keep this `#if YYDEBUG', since we use variables
-        which are defined only if `YYDEBUG' is set.  */
       YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
     }
 
@@ -1073,13 +1071,7 @@ yyerrlab:
 #endif /* YYERROR_VERBOSE */
        yyerror (]b4_yyerror_args["syntax error");
     }
-  goto yyerrlab1;
-
 
-/*----------------------------------------------------.
-| yyerrlab1 -- error raised explicitly by an action.  |
-`----------------------------------------------------*/
-yyerrlab1:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
@@ -1107,7 +1099,13 @@ yyerrlab1:
 
   /* Else will try to reuse lookahead token after shifting the error
      token.  */
+  goto yyerrlab1;
+
 
+/*----------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action.  |
+`----------------------------------------------------*/
+yyerrlab1:
   yyerrstatus = 3;     /* Each real token shifted decrements this.  */
 
   for (;;)




reply via email to

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