[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: LPEG documentation needs more clarification
- From: pygy79@...
- Date: Thu, 14 Feb 2019 20:09:12 +0100
Actually, I read i too fastt :-)
Still, the folding capture would also handle counting arbitrary
captures more cleanly:
cnt = Cf(Cc(0) * C(1)^0 , function(total) return total +1 end)
—Pierre-Yves
On Thu, Feb 14, 2019 at 8:00 PM <pygy79@gmail.com> wrote:
>
> On Wed, Jan 30, 2019 at 4:58 AM Sean Conner <sean@conman.org> wrote:
> >
> >
> > I managed to generate a segfault with LPEG and I can reproduce the issue
> > with this code [1]:
> >
> > local lpeg = require "lpeg"
> > local Cg = lpeg.Cg
> > local Cc = lpeg.Cc
> > local Cb = lpeg.Cb
> > local P = lpeg.P
> >
> > local cnt = Cg(Cc(0),'count')
> > * (P(1) * Cg(Cb'count' / function(c) return c + 1 end,'count'))^0
> > * Cb'count'
> >
> > print(cnt:match(string.rep("x",512+128))) -- CRASH at some point past this line
>
> LuLPeg also crashes, but for a larger string (between 512 * 51 and 512
> * 52 with Lua 5.3).
>
> Just in case, your problem can be solved with a folding capture and no
> temp Lua variable:
>
> local cnt = Cf(
> Cp() * P(1)^0 * Cp(),
> function(first, last) return last - first end
> )
>
> —Pierre-Yves