添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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.