Re: Redefining the literal string associated to the YYerror symbol

Daniele Nicolodi <[email protected]>
Newsgroups gmane.comp.parsers.bison.general
Message-ID <[email protected]>
On 18/06/2020 00:44, Akim Demaille wrote:
> There is no way to rename it, and it wouldn't make sense as the error
> token is never presented as an "expected token".  The error token never
> shows to the (end) user.  It appears in the debug traces, but that's
> for the developer.

What about YYEOF and YYUNDEF? Those appear in error messages.

I use a function like this to get token names to used to print a dump of
the token stream of a lexer:

const char* token_name(int token)
{
    return yysymbol_name(YYTRANSLATE(token));
}

However I have a ton of tests that expect the lexer to emit a
"LEX_ERROR" token on error and I am considering to use YYerror special
token to report errors instead. Thus the question if I can rename
YYerror from "error" to "LEX_ERROR".

The fix is rather easy:

const char* token_name(int token)
{
    if (token == YYerror)
        return "LEX_ERROR";
    return yysymbol_name(YYTRANSLATE(token));
}

I just anted to check if there is a built in mechanism to achieve the
same. However, to support renaming YYEOF and YYUNDEF (which appear in
ereor messages, if I am not mistaken) would probably be something good
to have.

Cheers,
Dan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.