[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: LPEG output
- From: Roberto Ierusalimschy <roberto@...>
- Date: Tue, 25 Jun 2019 17:27:12 -0300
> "There cannot be a 'call' instruction in between. A commit is always in
> the same rule that generated the corresponding choice; so, any call
> between a choice and its corresponding commit must have returned."
>
> Ok. But what if the failure happens during the call? Then the cleaning
> up of the stack encounters the 'call' stack element first.
> So, instructions encountered are: 1) choice, 2) call, 3) commit, and
> the failure (no match) happens between 2 and 3.
Then the commit is not executed. You asked about commit, not about fail.
A commit always find the choice at the top of the stack.
A fail (unlike a commit) must remove any call in the stack before
getting to a choice, which may not exist. This is all explained in the
paper.
-- Roberto