Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```Lua
- local Crystal = {}
- function split(str, regex)
- local results = {}
- local rf = {}
- local match = string.gmatch(str, regex)
- for v in match do
- table.insert(results, v)
- end
- for i,v in pairs(results) do
- if (v=="" or v==nil) then
- else
- table.insert(rf, v)
- end
- end
- return rf
- end
- function Crystal.run(scriptsrc)
- local functions = {}
- local variables = {}
- local layer=1
- local lobj = {""}
- local meta={cfunc={}}
- local lines = split(scriptsrc, "[a-zA-Z0-9\(\)'\"-\> ]*[;\{\}]?")
- for _,v in pairs(lines) do
- if (layer>1) then
- lobj[layer] = lobj[layer] .. "\n" .. v
- end
- if (layer==1) then
- --print(v)
- if (string.sub(v,1,#"func")=="func") then
- layer=layer+1
- lobj[layer] = ""
- meta["cfunc"][layer]={name=nil,code=""}
- local name = split(string.sub(v,#"func"+1), "[a-zA-Z0-9]+")[1]
- meta["cfunc"][layer].name = name
- elseif (v=="}") then
- local funcdata = meta["cfunc"][layer]
- funcdata.code = string.sub(lobj[layer],1,#lobj[layer]-1)
- lobj[layer]=nil
- functions[funcdata.name]=funcdata
- layer = layer - 1
- elseif string.match(v, "print *\(['\"]*[a-zA-Z0-9]*['\"]*\)")~=nil then
- --local msg = string.match(v, "['\"]+[a-zA-Z0-9 ]*['\"]+")
- local msg = string.match(v, "['\"]+.*['\"]+")
- msg = string.sub(msg, 2, #msg-1)
- print(msg)
- elseif string.match(v, "[a-zA-Z0-9]+\(\)")~=nil then
- local funcname = string.match(v, "[a-zA-Z0-9]+")
- local func = functions[funcname]
- if (func==nil) then
- print("Function doesn't exist")
- else
- Crystal.run(func.code)
- end
- end
- else
- if (v=="}") then
- local funcdata = meta["cfunc"][layer]
- funcdata.code = string.sub(lobj[layer],1,#lobj[layer]-1)
- lobj[layer]=nil
- functions[funcdata.name]=funcdata
- layer = layer - 1
- end
- end
- end
- end
- return Crystal
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement