On syntax errors, report the token on which we choked.

* bison.s1 (yyparse): In the label yyerrlab, when YYERROR_VERBOSE,
add yychar in msg.
This commit is contained in:
Akim Demaille
2000-03-17 13:17:09 +00:00
parent 7b306f528a
commit 75bbe78d87
4 changed files with 32 additions and 17 deletions

View File

@@ -1,3 +1,10 @@
2000-03-17 Akim Demaille <akim@epita.fr>
On syntax errors, report the token on which we choked.
* bison.s1 (yyparse): In the label yyerrlab, when YYERROR_VERBOSE,
add yychar in msg.
2000-03-17 Akim Demaille <akim@epita.fr>
* reader.c (copy_at): New function.

View File

@@ -1,6 +1,6 @@
#! /bin/sh
aclocal && \
aclocal -I m4 && \
gettextize && \
autoconf && \
autoheader && \

View File

@@ -635,10 +635,14 @@ yyerrlab: /* here on detecting error */
x < (sizeof(yytname) / sizeof(char *)); x++)
if (yycheck[x + yyn] == x)
size += strlen(yytname[x]) + 15, count++;
msg = (char *) malloc(size + 15);
size += strlen ("parse error, unexpected `") + 1;
size += strlen (yytname[YYTRANSLATE (yychar)]);
msg = (char *) malloc (size);
if (msg != 0)
{
strcpy(msg, "parse error");
strcpy (msg, "parse error, unexpected `");
strcat (msg, yytname[YYTRANSLATE (yychar)]);
strcat (msg, "'");
if (count < 5)
{
@@ -647,21 +651,21 @@ yyerrlab: /* here on detecting error */
x < (sizeof(yytname) / sizeof(char *)); x++)
if (yycheck[x + yyn] == x)
{
strcat(msg, count == 0 ? ", expecting `" : " or `");
strcat(msg, yytname[x]);
strcat(msg, "'");
strcat (msg, count == 0 ? ", expecting `" : " or `");
strcat (msg, yytname[x]);
strcat (msg, "'");
count++;
}
}
yyerror(msg);
free(msg);
yyerror (msg);
free (msg);
}
else
yyerror ("parse error; also virtual memory exceeded");
}
else
#endif /* YYERROR_VERBOSE */
yyerror("parse error");
yyerror ("parse error");
}
goto yyerrlab1;

View File

@@ -635,10 +635,14 @@ yyerrlab: /* here on detecting error */
x < (sizeof(yytname) / sizeof(char *)); x++)
if (yycheck[x + yyn] == x)
size += strlen(yytname[x]) + 15, count++;
msg = (char *) malloc(size + 15);
size += strlen ("parse error, unexpected `") + 1;
size += strlen (yytname[YYTRANSLATE (yychar)]);
msg = (char *) malloc (size);
if (msg != 0)
{
strcpy(msg, "parse error");
strcpy (msg, "parse error, unexpected `");
strcat (msg, yytname[YYTRANSLATE (yychar)]);
strcat (msg, "'");
if (count < 5)
{
@@ -647,21 +651,21 @@ yyerrlab: /* here on detecting error */
x < (sizeof(yytname) / sizeof(char *)); x++)
if (yycheck[x + yyn] == x)
{
strcat(msg, count == 0 ? ", expecting `" : " or `");
strcat(msg, yytname[x]);
strcat(msg, "'");
strcat (msg, count == 0 ? ", expecting `" : " or `");
strcat (msg, yytname[x]);
strcat (msg, "'");
count++;
}
}
yyerror(msg);
free(msg);
yyerror (msg);
free (msg);
}
else
yyerror ("parse error; also virtual memory exceeded");
}
else
#endif /* YYERROR_VERBOSE */
yyerror("parse error");
yyerror ("parse error");
}
goto yyerrlab1;