Re: Not able to use %union?

Christian Schoenebeck <[email protected]>
Newsgroups gmane.comp.parsers.bison.general
Message-ID <1994237.YnnV8muOGF@silver>
On Sonntag, 17. Februar 2019 21:37:26 CET Peng Yu wrote:
> Because I want to use the previously allocated memory, I don't want to
> call "rs_init(&yylval->str)" in any action. So YYSTYPE must be a
> struct instead of a union. Is it a good practice to use struct instead
> of union?

Yes, it is. The only advantage by using a union as a type is that you save 
some tiny amount of memory, but a union is also less safe and harder to debug. 
So personally I would barely ever use union as fundamental type with Bison.

> Since %union cannot be used in this case, how to deal with this
> scenario in bison? Thanks.

There is actually no difference in usage, since the Bison generated parser 
code will access the fields in the same way: simply by using the union/struct 
member names you defined (e.g val.num, val.str in your example). So the actual 
difference between struct or union is handled by the C/C++ compiler, not by 
Bison.

Any reason that you don't want to use C++ and e.g. std::string instead of your 
pure C and garbage collector solution?

Best regards,
Christian Schoenebeck

_______________________________________________
[email protected] https://lists.gnu.org/mailman/listinfo/help-bison
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.