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

Reply via email to