现在的位置: 首页 > 综合 > 正文

影响你的lua

2013年09月09日 ⁄ 综合 ⁄ 共 1349字 ⁄ 字号 评论关闭

我过去只把lua当作脚本语言,没有善待她,现在发现,应对单一的问题,运用lua开发的效率高过c++几倍,不止在脚本上,比如今天作一个工具,把c++的代码中的enum导入到脚本中去,想到lua对正则表达式的支持就忍不住了,我个人以前从来没有用过正则表达式(愚蠢!),所以心中有点忐忑,不过仍然在两个小时左右搞定这个事情,如果用c++,感觉至少要一天,代码的size要大一倍。
代码如下:

--本脚本用于把头文件中的enum提取出来放入脚本文件,例如
--createnum('appcommon.h','enum.lua')

-- data like ="XXXX , XXXX"
function parse_enum(senum,data)
 io.write("--"..senum.." begin")
 print("--"..senum.." begin")
 start = 0
 for item in string.gmatch(data,"([^,]*),") do
--  item may be " XXX = -1"  
  local i, j, n, v = string.find(item, "(.*)%s*=%s*([-%w]+)") 
  if (i ~= nil) then
   --print(i,j,n,v)  
   start = tonumber(v)
   item = n
  end
  io.write(item .. ' = ' .. tostring(start))
  print(item .. ' = ' .. tostring(start) )
  start = start + 1
 end
 io.write("/n--"..senum.." end/n/n")
 print("--"..senum.." end")
end

function parse_h(str)
-- str like ="enum XXXX { XXXXX };"
 local i = 0
 for senum,data in string.gmatch(str,"enum%s+(%w+)[^{]*{([^}]*)};") do
-- for senum,data in string.gmatch(str,"enum%s+(%w+)%s*{(.*)};") do
  print(i,senum,data)
  i = i+1
  parse_enum(senum,data)
 end
end

-- 去掉c++的注释 //XXXx
function removecomment(str)
 s = string.gsub(str,"([^/]*)//([^/n]*)/n","%1/n")
 return s;
 --print(s)
 --print(str)
end

function createfrom_h(file)
 io.input(file)
 str = io.read("*a")
 str = removecomment(str)
 parse_h(str)
 --print(str) 
end

function createenum(inputfile,outputfile)
 io.output(outputfile)
 io.write("--[[ "..outputfile.."/n")
 createfrom_h(inputfile)
 io.write("--]]")
end
 

抱歉!评论已关闭.