help-bison
[Top][All Lists]
Advanced

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

Re: C2026 error in VC++ with large number of tokens


From: Akim Demaille
Subject: Re: C2026 error in VC++ with large number of tokens
Date: Mon, 23 Aug 2021 07:54:47 +0200

Hi Vince,

> Le 22 août 2021 à 22:14, Vince Huffaker <vince@vincejulie.com> a écrit :
> 
> That macro doesn't seem to exist, but the _MSC_VER does, so this line:
> 
>         #ifndef _MSC_VER
> 
> fixes the issue.  

Yes, of course, sorry about that...

>> Also, do you really need to specify the numbers for all the tokens?  It is 
>> because you gave these numbers that the assertion is long.  If bison had 
>> numbered itself, there wouldn't be holes, and the assertions is short.  Why 
>> do you provide the token numbers?
> We use the Bison parser for reading our native file format.  So, we need to 
> make sure that the token values never change, otherwise we would not be able 
> to read legacy files.  Therefore, we specifically define the values for each 
> token.  Each new version of each object type has its own token value, so the 
> numbers keep going up.  

Makes perfect sense.

> But, maybe there's some alternative approach for bison in the future?  Maybe 
> we could reserve a range of token values... or somehow indicate to Bison that 
> our token values are not truly 'custom', but are sequential numbers... maybe 
> that would help?  Don't know -- just trying ideas..

Your numbers are not consecutive, there are gaps.  Hence the number of clauses: 
one per (contiguous) range.

> Is there something I can add to the Bison distribution to automatically add 
> that #ifndef line?  Or do I need to wait for a new version?

I'll wrap a fix for the next release.  Meanwhile, you can just disable 
parse.assert, and the assertion will no longer be emitted.

Or change your installation of Bison.  In ..../data/skeleton/variant.hh, look 
for

      {]b4_parse_assert_if([[
        ]b4_assert[ (]b4_tok_in($@)[);
      ]])[}

That's where you want to add the #if lines.  Something like

      {]b4_parse_assert_if([[
#if !defined _MSC_VER || defined __clang__
        ]b4_assert[ (]b4_tok_in($@)[);
#endif
      ]])[}




reply via email to

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