[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [pre-ANN] PureLPeg.lua
- From: Sean Conner <sean@...>
- Date: Fri, 5 Apr 2013 18:18:10 -0400
It was thus said that the Great Pierre-Yves Gérardy once stated:
> This is a partial implemetation of LPeg in pure Lua.
>
> https://gist.github.com/pygy/5320097
>
> Captures and locales are not yet implemented, but the rest works quite well.
[ snip ]
> This should work as expected.
>
> P"foo"
> P(1)
> P(true)
> P{}
> P(function) -- works as expected, but captures are thrown out.
> B"abc"
> R"az"
> S"abc"
> V"name"
> p1 + p2
> p1 * p2
> pt^n
> -pt
> #pt
>
> plpeg.print(patern)
Okay, I was curious enough to try this out. I was wondering how it
handles P(foo) where foo is a variable of type string, so I whipped this up
(based on some stuff I'm doing at work [1]):
--lpeg = require "lpeg"
lpeg = require "PureLPeg"
local P = lpeg.P
local R = lpeg.R
x = { "foo" , "bar" , "baz" , "foobar" }
pattern = P": "
for i = 1 , #x do
pattern = pattern * P(x[i]) * P"=" * R"09"^1 * P" "^0
end
t1 = [[: foo=2 bar=0 baz=34343 foobar=222]]
t2 = [[: foo=2 bar=r baz=34343 foobar=222]]
print(pattern:match(t1))
print(pattern:match(t2))
And the different between the two is striking. LPeg:
[spc]lucy:/tmp/foo>lua test.lua
35
nil
PureLPeg:
[spc]lucy:/tmp/foo>lua test.lua
lua: ./PureLPeg.lua:1101: attempt to compare number with nil
stack traceback:
./PureLPeg.lua:1101: in function 'matcher'
./PureLPeg.lua:1164: in function '?'
./PureLPeg.lua:1146: in function 'matcher'
./PureLPeg.lua:1217: in function 'match'
test.lua:20: in main chunk
[C]: ?
Oops.
-spc (I hope this report helps ... )
[1] http://boston.conman.org/2013/04/03.1