DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(bison.info) Simple Error Recovery

Info Catalog (bison.info) Infix Calc (bison.info) Examples (bison.info) Multi-function Calc
 
 Simple Error Recovery
 =====================
 
    Up to this point, this manual has not addressed the issue of "error
 recovery"--how to continue parsing after the parser detects a syntax
 error.  All we have handled is error reporting with `yyerror'.  Recall
 that by default `yyparse' returns after calling `yyerror'.  This means
 that an erroneous input line causes the calculator program to exit.
 Now we show how to rectify this deficiency.
 
    The Bison language itself includes the reserved word `error', which
 may be included in the grammar rules.  In the example below it has been
 added to one of the alternatives for `line':
 
      line:     '\n'
              | exp '\n'   { printf ("\t%.10g\n", $1); }
              | error '\n' { yyerrok;                  }
      ;
 
    This addition to the grammar allows for simple error recovery in the
 event of a parse error.  If an expression that cannot be evaluated is
 read, the error will be recognized by the third rule for `line', and
 parsing will continue.  (The `yyerror' function is still called upon to
 print its message as well.)  The action executes the statement
 `yyerrok', a macro defined automatically by Bison; its meaning is that
 error recovery is complete ( Error Recovery.).  Note the
 difference between `yyerrok' and `yyerror'; neither one is a misprint.
 
    This form of error recovery deals with syntax errors.  There are
 other kinds of errors; for example, division by zero, which raises an
 exception signal that is normally fatal.  A real calculator program
 must handle this signal and use `longjmp' to return to `main' and
 resume parsing input lines; it would also have to discard the rest of
 the current line of input.  We won't discuss this issue further because
 it is not specific to Bison programs.
 
Info Catalog (bison.info) Infix Calc (bison.info) Examples (bison.info) Multi-function Calc
automatically generated byinfo2html