Boost logo

Boost :

Subject: Re: [boost] [spirit] semantic action for mismatches?
From: Joel de Guzman (joel_at_[hidden])
Date: 2011-01-09 19:09:43


On 1/9/2011 12:36 AM, Eric Niebler wrote:
> On 1/7/2011 6:54 PM, caustik wrote:
>> I've come to notice that there seems to be a missing bit of symmetry in
>> spirit with regards to semantic actions.
>>
>> If a rule matches, and thus executes it's semantic action(s), but a rule
>> which includes that rule mismatches, there seems to be no way to "unwind"
>> the code executed down the chain. For example, if one of your semantic
>> actions allocates memory or increments a reference count, how do you free /
>> release that reference in the mismatch scenario? I've thought about using
>> something like a shared_ptr, but it seems like that gets pretty sloppy and
>> unnatural. Is there something you can think of that would work?
>
> Just for reference, xpressive doesn't have this problem because actions
> are executed lazily. When a sub-pattern matches, its action is placed on
> a queue. If the pattern matching engine then needs to backtrack, the
> action is un-queued. Only when the *whole* pattern matches successfully
> is the entire action sequence executed ... in order, of course.

We've considered that approach before, but what do you really mean by
sub-pattern? AFAICT, lazily evaluating actions can only be done at
the topmost (start) node since a sub-parser cannot really know that it
will be rolled back. Alas, that approach does not work well with fully
typed attributed grammars and type-erased rules.

Regards,

-- 
Joel de Guzman
http://www.boostpro.com
http://spirit.sf.net

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk