On 13 Jun 2009, at 17:55, Nicolai Stange wrote:

i wonder how to report an libc error
(maybe ENOMEM, EIO) that has occured in either yylex or yyparse to the
caller of yyparse.

As for the first error, memory allocation error, your program is
likely unrecoverable, so just write an error message and exit.
There are three reasons why I don't want to do that.
1.) On EIO it could be possible for the program to continue, with some
other file for example.

THat would not work on
  ENOMEM  (* Not enough memory *)

2.) Sometimes later on the parser could be incorporated within a library and to my knowledge a library should not print any text if it's not its
particular intention.

Then you will have to take measures to turn off all other parser/lexer error messages. There is a difference between stdout and stderr, too.

3.) I want to have some general error handling mechanism, independent of
the actual libc error code or what else has happened.

You can use C++ and throw and catch exceptions. When generating a parser error, though, it will try to recover (see Bison manual).

For other errors, I had to write in .l:
  #define YYERRCODE     256
What's the difference in using
%token YYERRCODE
that doesn't rely on bison internals instead?

When the Bison parser sees 256 (or so I remember), it will generate a parser error. When it sees %token YYERRCODE that is just a normal token, you still have to figure out how to generate an error in the parser.

  Hans




_______________________________________________
help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison

Reply via email to