help-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Token value in custom error reporting


From: Akim Demaille
Subject: Re: Token value in custom error reporting
Date: Thu, 18 Jun 2020 19:21:34 +0200


> Le 18 juin 2020 à 19:11, Hans Åberg <haberg-1@telia.com> a écrit :
> 
> 
>> On 18 Jun 2020, at 18:56, Akim Demaille <akim@lrde.epita.fr> wrote:
>> 
>>> Le 18 juin 2020 à 14:54, Hans Åberg <haberg-1@telia.com> 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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]