Ir para conteúdo

CTLua 1.0


caotic

Posts Recomendados

Tão lembrando do ctlua aquele codigo que com lua executa o mesmo funcionamento de uma linguagem.

Pois é eu resolvi fazer uma coisinha superior:

 

Codigo:

 

 

function string.explode(e, sep)
        local result = {}       e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end)
        return result
end
 
 
function maior(x, y)
if x == y then
return ""
end
return ","
end
 
function interpreteFunctionInCt(str)
for i in str:gmatch("--function (.*)") do
local t = string.explode(i, "[")
str = ""
for x=2, #t do
str = str..""..t[x]..""..maior(x, #t)..""
end
local str = t[1].."("..str..")"
loadstring(str) ()
end
end
 
 
function declareVar(str)
local t = string.explode(str, "[")
local value = t[2]
local var = value.."="..t[3]
loadstring(var) ()
end
 
 
function newFuncCt(str)
 
local function transformInFuncLua(str)
for i in str:gmatch("--function (.*)") do
local t = string.explode(i, "[")
str = ""
for x=2, #t do
str = str..""..t[x]..""..maior(x, #t)..""
end
str = t[1].."("..str..")"
end
return str
end
 
function transformTableFuncCtInFuncLua(table)
str = ""
for i =1, #table do
str = str.."\n"..transformInFuncLua(table[i])
end
return str
end
 
 
local t = string.explode(str, "[")
local y = string.match(str, "{(.-)}")
local params = string.explode(t[3], "/")
local func = string.explode(y, "/")
local st = "function "..t[2].."("..table.concat(params, ",")..")"..transformTableFuncCtInFuncLua(func).."\nend"
loadstring(st) ()
end
 
 
 
function declareVarByFunction(str)
 
local function interpreteFunctionReturnInCt(str)
for i in str:gmatch("--function (.*)") do
local t = string.explode(i, "[")
str = ""
for x=2, #t do
str = str..""..t[x]..""..maior(x, #t)..""
end
local str = t[1].."("..str..")"
y = loadstring('return (' .. str .. ')')()
end
return y
end
 
local t = string.explode(str, "[")
local y = interpreteFunctionReturnInCt(string.match(str, "{(.-)}"))
local st = t[2].."=".."'"..y.."'"
loadstring(st) ()
end
 
 
 
function ifCT(str)
local function transformOpe(string)
for i=1, #string do
local t = string.sub(string, i, i)
if t == '/' then
string = string.sub(string, 1, i-1).."and"..string.sub(string, i+1, #string)
end
end
return string
end
 
for i in str:gmatch("--gets (.*)") do
local t = string.explode(i, "[")
local veri = transformOpe(t[1])
y = loadstring('return (' .. veri .. ')')()
if y then
local y = string.match(i, "{(.-)}")
interpreteFunctionInCt(y)
end
end
end
 
function conditionRepeat(str)
local function transformOpe(string)
for i=1, #string do
local t = string.sub(string, i, i)
if t == '/' then
string = string.sub(string, 1, i-1).."and"..string.sub(string, i+1, #string)
end
end
return string
end
 
for i in str:gmatch("--condloop(.*)") do
local t = string.explode(i, "[")
for x =1, tonumber(t[2]) do
value = transformOpe(t[3])
y = loadstring('return (' .. value .. ')')()
if y then
loadstring(value) ()
local y = string.match(i, "{(.-)}")
StartCt(y)
end
end
end
end
 
 
function loopCT(str)
for i in str:gmatch("--loopCT (.*)") do
local t = string.explode(i, "[")
if t[1] == "inf" then
x = 0
while true do
value = t[2]:gsub("++", "").."="..x
loadstring(value) ()
x = x+1
local y = string.match(i, "{(.-)}")
interpreteFunctionInCt(y)
end
end
for x =1, tonumber(t[1]) do
value = t[2]:gsub("++", "").."="..x
loadstring(value) ()
local y = string.match(i, "{(.-)}")
interpreteFunctionInCt(y)
end
end
end
 
 
function StartCt(str)
 
str = string.gsub(str, "\n", "")
 
for i in str:gmatch("--(.-);") do
if string.sub(i, 1, 6) == "--func" then
interpreteFunctionInCt(i)
end
if string.sub(i, 1, 6) == "--loop" then
loopCT(i)
end
if string.sub(i, 1, 6) == "--gets" then
ifCT(i)
end
if string.sub(i, 1, 5) == "--var" then
declareVar(i)
end
if string.sub(i, 1, 16) == "--declarefuncvar" then
declareVarByFunction(i)
end
if string.sub(i, 1, 9) == "--newfunc" then
newFuncCt(i)
end
if string.sub(i, 1, 10) == "--condloop" then
conditionRepeat(i)
end
end
return true
end
 
 
function ctRun(ctl)
local x = io.open("./"..ctl..".ctl", "r")
if not x then
return false
end
local i = x:read("*a")
StartCt(i)
end
 
ctRun("test")

 

 

 

Example code:
--function print ["oi hear"["ola"["verdade";
--function print ["oi";
--loopCT [4 [y++ [{--function print [y};
--gets [7 > 6 / 8 > 2 [{--function print ["oi"};
--var [a ["variavel";
--function print [a;
--declarefuncvar [ab [{--function string.sub ["oi" [1 [1};
--function print [ab;
--newfunc [newp [x/s [{--function print [x/--function print [s};
--function newp ["oi" ["YEAR";
--condloop [4 [[1 > 1 [{--function print [y};
Confira o debbuger para testar osscripts:
Editado por caotic
Link para o comentário
Compartilhar em outros sites

Legal sua ideia, but...

 

Mano, isso é realmente muuuito confuso.

 

Tirando isso, maneiro o código. Só não acho que realmente será utilizada algum dia por não ser simples igual Lua normal.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...