[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Why isn't Lua more widely used?
- From: Jay Carlson <nop@...>
- Date: Mon, 30 Jan 2012 06:50:01 +0000
On Mon, Jan 30, 2012 at 3:38 AM, Miles Bader <miles@gnu.org> wrote:
> Laurent FAILLIE <l_faillie@yahoo.com> writes:
>> - LUA is very easy to understand and start with ... but with strings
>> manipulation. Something that is very easy in C or PHP like token parsing
>> is a tedious task in LUA.
>
> Maybe a bit of a tangent, but Lua + LPEG pretty much eats everything
> else alive when it comes to easy/fast/super-powerful parsing.
"uh, at least I already know regexp syntax"
===
Balanced parentheses
The following pattern matches only strings with balanced parentheses:
b = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }
===
My eyes, they burn! Even with syntax highlighting that looks like some
kind of vector math macro package for awk or something.
b = re.compile[[ balanced <- "(" ([^()] / balanced)* ")" ]]
OK, that's better. People new to LPeg should start with re. In fact,
just hide the main package and tell people it's a low-level interface.
A more verbose table syntax might help (but I should probably know
better than to propose a syntax without implementing it or actually
writing more stuff in it.)
b = t.grammar {
balanced={ "(",
t.choice{
t.range"^()",
t.exp"balanced"
}.star,
")"
}
}
What, you don't want to blow _G.t on that? Wrap in "do local t=tre .. end"
OK, now something longer:
csv = t.grammar{
record={t.group{
t.exp[[field]]
t.star{",", t.exp[[field]]}
}, t.choice{t.nl, t.eof}
},
field=t.choice{t.exp[[escaped]], t.exp[[nonescaped]]},
nonescaped={t.range'^,"%nl'.star().capture()},
escaped={'"',
t.choice{ t.range'^"', t.cap('""').as('"') }.star().capture()
'"'}
}
I dunno if Kleene would mind if we let his star{} be a prefix as well
as a suffix. Close readers will notice there are a few parts of that
syntax I didn't finesse, but I never was much for late night curry.
OK, that's another experiment in little language syntax done. I have
no idea whether I like the table version better than the re.compile
version. The table certainly is more verbose. Is it any more readable?
My eyes are blurry. Well, lua-mode.el has some clue what to do with
the syntax and kept me closing parens.
I would love to be able to bind string metamethods inside of a table
scope since it would allow "x".star instead of forcing
t.literal"x".star. Uh, wait, I have no idea what that even means when
the strings escape...
Jay