Re: Token value in custom error reporting
Akim Demaille <[email protected]>
| Newsgroups | gmane.comp.parsers.bison.general |
|---|---|
| Message-ID | <[email protected]> |
> Le 18 juin 2020 à 19:11, Hans Åberg <[email protected]> a écrit : > > >> On 18 Jun 2020, at 18:56, Akim Demaille <[email protected]> wrote: >> >>> Le 18 juin 2020 à 14:54, Hans Åberg <[email protected]> a écrit : >>> >>> In my C++ parser, the lexer has rule >>> . { return my_parser::token::token_error; } >>> >>> When it is triggers, I get the error: >>> <file>:21.1: error: syntax error, unexpected token error >>> >>> It might be nicer to actually write out this token, though. >> >> I have already explained what I don't think this is a good idea. >> >> https://lists.gnu.org/r/help-bison/2020-06/msg00017.html >> >> I also have explained that scanner errors should be handled >> by the scanner. For instance, in the bistro, you can read: >> >> int >> yylex (const char **line, YYSTYPE *yylval, YYLTYPE *yylloc) >> { >> int c; >> >> [...] >> >> switch (c) >> { >> [...] >> // Stray characters. >> default: >> yyerror (yylloc, "syntax error: invalid character: %c", c); >> return TOK_YYerror; >> } >> } >> >> Cheers! > > Is that not the case, which I responded to, where you get double error messages, both from the lexer and parser? No, that's the whole point of YYerror. In the news of 3.6: *** Returning the error token When the scanner returns an invalid token or the undefined token (YYUNDEF), the parser generates an error message and enters error recovery. Because of that error message, most scanners that find lexical errors generate an error message, and then ignore the invalid input without entering the error-recovery. The scanners may now return YYerror, the error token, to enter the error-recovery mode without triggering an additional error message. See the bistromathic for an example.