help-bison
[Top][All Lists]
Advanced

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

Re: Forcing Bison's yacc.c to report more expected tokens on syntax erro


From: Derek Clegg
Subject: Re: Forcing Bison's yacc.c to report more expected tokens on syntax error
Date: Wed, 6 Feb 2019 11:53:42 -0800

I agree with Adrian — it would be nicer, in my opinion, to allow users to 
handle syntax errors directly, rather than always going through the bison code 
which formats syntax errors in a fixed way.

This seems like it might be not too hard to do: replace the code starting with

    char const* yyformat = YY_NULLPTR;
    switch (yycount)
      {
#define YYCASE_(N, S)                         \
        case N:                               \
          yyformat = S;                       \
        break
…
        return yyres;

in yysyntax_error_ with a call like

    my_yysyntax_error(yyarg, yycount);

where “my_yysyntax_error” is a user-defined function which does the work of 
handling syntax error reporting.

In C++, we could be fancier: have two functions, one for a “pure” syntax error:

    void my_yysyntax_error();

and one for syntax errors involving unexpected tokens:

     void my_yysyntax_error(std::string unexpected_token, 
std::vector<std::string> expected_tokens);

The call would be something like this:

    if (yycount == 0) {
      my_yysyntax_error();
    } else {
      my_yysyntax_error(yyarg[0], std::vector<std::string>{yyarg + 1, yyarg + 
yycount});
    }

Derek

> On Feb 6, 2019, at 11:23 AM, Adrian Vogelsgesang <address@hidden> wrote:
> 
> Hi Kevin, hi Akim,
> 
> I can imagine cases where having a longer list of expected tokens might be 
> useful.
> However, I wouldn’t like to have them in a string stitched together by bison, 
> but instead I would like to have access to them in a std::vector<TokenId> or 
> something similar.
> That way, I could do some post-processing of the expected token list (e.g., 
> expand the “variable_name” token to all variables which are currently in 
> scope).
> The result could then be integrated with, e.g., a dropdown list for 
> autocompletion pretty nicely :)
> 
> Having programmatic access to the list of expected tokens would probably also 
> solve Kevin’s request for reporting more than 5 tokens: he could just do it 
> himself in his own code after getting the token list from Bison.
> 
> Cheers,
> Adrian
> 
> From: help-bison <address@hidden> on behalf of Akim Demaille <address@hidden>
> Date: Wednesday, 6 February 2019 at 10:43
> To: Kevin Villela <address@hidden>
> Cc: Bison Help <address@hidden>
> Subject: Re: Forcing Bison's yacc.c to report more expected tokens on syntax 
> error
> 
> Hi Kevin,
> 
>> Le 6 févr. 2019 à 03:01, Kevin Villela <address@hidden> a écrit :
>> 
>> Hi all, I saw that the yacc.c skeleton only supports reporting a maximum or
>> 5 expected tokens. The page
>> <https://www.gnu.org/software/bison/manual/html_node/LAC.html<https://www.gnu.org/software/bison/manual/html_node/LAC.html>>
>>  on
>> Look-Ahead Correction states this is "because of internationalization
>> considerations". I was wondering if I would be able to contribute a
>> configuration option to increase this number arbitrarily, or even just up
>> to a higher number (e.g. 30) ?
> 
> The thing is that it's unclear that it actually helps to report all the 
> possibilities when there are too many.
> _______________________________________________
> address@hidden 
> https://lists.gnu.org/mailman/listinfo/help-bison<https://lists.gnu.org/mailman/listinfo/help-bison>
> _______________________________________________
> address@hidden https://lists.gnu.org/mailman/listinfo/help-bison



reply via email to

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