The Error Reporting Function
yyerror
The Bison parser detects a
parse error
or
syntax error
whenever it reads a token which cannot satisfy any syntax rule. An
action in the grammar can also explicitly proclaim an error, using the
macro
YYERROR
(see
Special Features for Use in Actions
).
The Bison parser expects to report the error by calling an error
reporting function named
yyerror
, which you must supply. It is
called by
yyparse
whenever a syntax error is found, and it
receives one argument. For a parse error, the string is normally
"parse error"
.
If you define the macro
YYERROR_VERBOSE
in the Bison declarations
section (see
The Bison Declarations Section
),
then Bison provides a more verbose and specific error message string
instead of just plain
"parse error"
. It doesn't matter what
definition you use for
YYERROR_VERBOSE
, just whether you define
The parser can detect one other kind of error: stack overflow. This
happens when the input contains constructions that are very deeply
nested. It isn't likely you will encounter this, since the Bison
parser extends its stack automatically up to a very large limit. But
if overflow happens,
yyparse
calls
yyerror
in the usual
fashion, except that the argument string is
"parser stack overflow"
.
The following definition suffices in simple programs:
yyerror (char *s)
fprintf (stderr, "%s\n", s);
After
yyerror
returns to
yyparse
, the latter will attempt
error recovery if you have written suitable error recovery grammar rules
(see
Error Recovery
). If recovery is impossible,
yyparse
will
immediately return 1.