|
Proto : |
Subject: Re: [proto] Thoughts on traversing proto expressions and reusing grammar
From: Thomas Heller (thom.heller_at_[hidden])
Date: 2010-10-04 15:20:04
On Mon, Oct 4, 2010 at 8:53 PM, joel falcou <joel.falcou_at_[hidden]> wrote:
> On 04/10/10 20:45, Eric Niebler wrote:
>>
>> I'm not opposed to such a thing being in Proto, but I (personally) don't
>> feel a strong need. I'd be more willing if I saw a more strongly
>> motivating example. I believe Joel Falcou invented something similar.
>> Joel, what was your use scenario?
>>
>
> NT2 ;)
>
> More specifically, all our transform are built the same way:
> visit the tree, dispatch on visitor type + tag and act accordignly.
> It was needed for us cause the grammar could NOT have been written by hand
> as we supprot 200+ functions on nt2 terminal. All our code is somethign like
> "for each node, do Foo" with variable Foo depending on the pass and
> duplicating
> the grammar was a no-no.
>
> We ended up with somethign like this, except without switch_ (which I like
> btw), so we
> can easily add new transform on the AST from the external view point of user
> who
> didn't have to know much proto. As I only had to define one grammar (the
> visitor) and only specialisation of the
> visitor for some tag, it compiled fast and that was what we wanted.
>
> Thomas, why not showign the split example ? It's far better than this one
> and I remember I and Eric
> weren't able to write it usign grammar/transform back in the day.
The split example was one of the motivating examples, that is correct,
though it suffers the exact points Eric is criticizing.
The split example was possible because i added some new transforms
which proto currently misses, but i didn't want to shoot out all my
ammunition just yet :P
But since you ask for it:
http://github.com/sithhell/boosties/blob/master/proto/libs/proto/test/splitter.cpp
the new thing i added is transform_expr, which works like fusion::transform:
It creates the expression again, with transformed child nodes (the
child nodes get transformed according to the transform you specify as
template parameter
Proto list run by eric at boostpro.com