[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Syntax highlighting in / for Lua
- From: Philippe Lhoste <PhiLho@...>
- Date: Wed, 8 Aug 2001 10:08:01 +0200 (MEST)
Nick Trout wrote:
> Just an idea for code clarity:
>
> function makeDict(t)
> local d
> for i=1,getn(t) do d[ t[i] ]=1 end
> return d
> }
>
> tokens = makeDict {
> "~=", "<=", ">=", "<", ">",
> "==", "=", "+", "-", "*",
> etc
> }
>
> :-)
Great, that's exactly the kind of feed-back I expect when posting code here!
I guess I am still doing some things Basic-like or C-like, but I am getting
better :-) I even briefly though of using tokens = { "~=", ... } and loop on
the elements!
That's why I regulary ask (and give) Lua code: to see what solutions others
people have come with. Plus it gives usable code: I am using Eric Ries' split
function for parsing CGI requests.
I like your solution because indeed it is clearer, and totally in the Lua
spirit.
Some tricks I will not use, because I think they hurt clarity. I saw a
gsub(gsub(gsub(exp, ... ))) but even at the cost of speed (?) or memory (??), I
prefer to use: exp = gsub(exp, ... ) three times.
I am still playing with my primitive syntax highlighting code (working also
on a more reliable one) for experimentation. I will add CGI support. I don't
use CGILua because I wanted to reinvent the wheel, looking at C and Perl
codes. It is less efficient, but more informative.
BTW, I have a question for Lua gurus: is it possible to match *any* legal
(in Lua syntax) number using only *one* Lua regular expression? I am not sure,
since all elements are optionals, but at least some are required. But it
won't be the first time I would be surprised by the users of this list...
print(.02)
print(0.)
print(-.02)
print(-.1E1)
print(-.1e-1)
The above are all legal (not "." nor ".e1"...).
I am thinking of something like: -?%d*.?%d*[eE]?-?%d*
Trying this expression (and simplier ones), I came up with a strange result.
At least one I don't understand.
pNumbers = "1 4554 1. 12. .1 .01 .1E1 12E5 0.1e-1"
nNumbers = "-1 -4554 -1. -12. -.1 -.01 -.1E1 -12E5 -0.1e-1"
numbers = pNumbers .. nNumbers
pattern = "(-?%d*.?%d*[eE]?-?%d*)"
-- Ignore the above, for tests of the sought after RE...
numbers = "1 22 333 4444 0 x 1 zz 55555"
pattern = "(-?%d*)"
print(gsub(numbers, pattern,
function (n)
return '<' .. n .. '>'
end
))
Output (Lua 4.0):
<1><> <22><> <333><> <4444><> <0><> <>x<> <1><> <>z<>z<> <55555><> 19
Why the spaces after the numbers and around the non-number letters are
matched? Why do I have a tab followed by 10 at the end of the string? (It is the
number of matches...)
I must miss something obvious...
Regards.
--
--._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.--
Philippe Lhoste (Paris -- France)
Professional programmer and amateur artist
http://jove.prohosting.com/~philho/
--´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`--
Sent through GMX FreeMail - http://www.gmx.net