On Fri, 1 Dec 2006, Jeff Inman wrote:

> It seems wrong to me that the second set of "%{ ... %}", after a "%union{
> ...}",  should insert
> into the tab.cpp file, instead of into the tab.hpp file.  I want to make more
> declarations
> that depend on the type produced by the union.

I definitely agree that the relationship between %{...%} and %union is 
confusing.  We're working on a set of alternatives to %{...%} that will 
hopefully make things more explicit and more flexible:

1. %code {...} will insert code into your tab.cpp after the contents of 
the header, which include the union definition.  You can, for example, 
declare static globals here.

2. %requires {...} will insert code into your tab.hpp and tab.cpp before 
the union definition.  This is the right place for dependencies of your 
union.

3. %provides {...} will insert code into your tab.hpp and tab.cpp after 
the union definition.  In other words, it's a place to write code that 
your parser module provides to external code.

4. %code-top {...} is not as often useful.  It inserts code at the very 
top of your tab.cpp.

These are implemented in CVS now.  We will consider them experimental 
until we can get some user feedback.  I can't promise when the next 
release will be though.


_______________________________________________
help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison

Reply via email to