[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Proposal for lpeg
- From: albertmcchan <albertmcchan@...>
- Date: Wed, 7 Feb 2018 13:45:12 -0500
A update to my lpeg.M proposal to match anywhere with head chars optimization.
This is what I have now, a lpeg.H() that recursively build a set of head chars.
Example:
words = re.compile "{ 'hello' / 'Hello'+ / [wW] 'orld' }"
--> lpeg.H(words) = S'HWhw'
Doing lpeg.M in C is beyond me ... instead, i made this lua function:
function re.anywhere(pat)
pat = re.compile(pat)
local skip = (1 - lpeg.H(pat)) ^ 0
return lpeg.P{ pat + 1 * skip * lpeg.V(1) }
end
benchmark showed that optimization work:
-- my timer function unit in msec (my PC is 20 years old)
text = ('this is a test '):rep(10) .. 'hello'
pat0 = lpeg.P{ words + 1 * lpeg.V(1) }
pat1 = re.anywhere(words)
=timer(1e6, lpeg.match, pat0, text)
15863 hello
=timer(1e6, lpeg.match, pat1, text)
6700 hello