Advertisement
coderboy

CrystalScript

Oct 26th, 2018
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.93 KB | None | 0 0
  1. ```Lua
  2. local Crystal = {}
  3.  
  4.     function split(str, regex)
  5.         local results = {}
  6.         local rf = {}
  7.        
  8.         local match = string.gmatch(str, regex)
  9.         for v in match do
  10.             table.insert(results, v)
  11.         end
  12.        
  13.         for i,v in pairs(results) do
  14.             if (v=="" or v==nil) then
  15.             else
  16.                 table.insert(rf, v)
  17.             end
  18.         end
  19.        
  20.         return rf
  21.     end
  22.  
  23.     function Crystal.run(scriptsrc)
  24.        
  25.         local functions = {}
  26.         local variables = {}
  27.        
  28.         local layer=1
  29.         local lobj = {""}
  30.         local meta={cfunc={}}
  31.        
  32.         local lines = split(scriptsrc, "[a-zA-Z0-9\(\)'\"-\> ]*[;\{\}]?")
  33.         for _,v in pairs(lines) do
  34.             if (layer>1) then
  35.                 lobj[layer] = lobj[layer] .. "\n" .. v
  36.             end
  37.             if (layer==1) then
  38.                 --print(v)
  39.                 if (string.sub(v,1,#"func")=="func") then
  40.                     layer=layer+1
  41.                     lobj[layer] = ""
  42.                     meta["cfunc"][layer]={name=nil,code=""}
  43.                     local name = split(string.sub(v,#"func"+1), "[a-zA-Z0-9]+")[1]
  44.                     meta["cfunc"][layer].name = name
  45.                 elseif (v=="}") then
  46.                     local funcdata = meta["cfunc"][layer]
  47.                     funcdata.code = string.sub(lobj[layer],1,#lobj[layer]-1)
  48.                     lobj[layer]=nil
  49.                     functions[funcdata.name]=funcdata
  50.                     layer = layer - 1
  51.                 elseif string.match(v, "print *\(['\"]*[a-zA-Z0-9]*['\"]*\)")~=nil then
  52.                     --local msg = string.match(v, "['\"]+[a-zA-Z0-9 ]*['\"]+")
  53.                     local msg = string.match(v, "['\"]+.*['\"]+")
  54.                     msg = string.sub(msg, 2, #msg-1)
  55.                     print(msg)
  56.                 elseif string.match(v, "[a-zA-Z0-9]+\(\)")~=nil then
  57.                     local funcname = string.match(v, "[a-zA-Z0-9]+")
  58.                     local func = functions[funcname]
  59.                     if (func==nil) then
  60.                         print("Function doesn't exist")
  61.                     else
  62.                         Crystal.run(func.code)
  63.                     end
  64.                 end
  65.             else
  66.                 if (v=="}") then
  67.                     local funcdata = meta["cfunc"][layer]
  68.                     funcdata.code = string.sub(lobj[layer],1,#lobj[layer]-1)
  69.                     lobj[layer]=nil
  70.                     functions[funcdata.name]=funcdata
  71.                     layer = layer - 1
  72.                 end
  73.             end
  74.            
  75.         end
  76.     end
  77.  
  78. return Crystal
  79. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement