
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. -- Eric Niebler BoostPro Computing http://www.boostpro.com