[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Lpeg - usefulness of the various capture operators
- From: Roberto Ierusalimschy <roberto@...>
- Date: Mon, 9 Feb 2009 13:59:54 -0200
> Lpeg has a significant number of capture constructs:
>
> - Captures matching the empty string: Cp, Cc, Carg and Cb
> - Captures of the string matching a subpattern: C and Cs
> - Captures manipulating the captures of a subpattern: Cg, Cf, Ct,
> pat/str, pat/table, pat/func
>
> I suspect (although I haven't yet done the hard work of proving this
> :-)) that some of these can be implemented in terms of others - in
> particular, Cf and pat/func are probably generic enough to implement
> many of the others.
Certainly some captures are equivalent to others:
- Cc(K) --> ""/function () return K end
- pat/table: --> pat/function (k) return table[k] end
- pat/string --> pat/function (s) return doreplacement(s, string) end
(for a proper definition of doreplacement)
- Ct(patt) --> function (...) return {...} end
(except that there is a somewhat small limit on the
size of such table)
I guess pat/func itself can be defined in terms of folding:
- pat/func --> Cf(C("") * Cg(pat), function (x, ...) return func(...) end)
(I am not sure this is correct...)
- Cs and C are very similar, but I do not think one can emulate the
exact behavior of the other.
-- Roberto