Bem estava pensando em desenvolver uma sub - linguagem ela não chega a ser uma linguagem(OBVIO) porque mesmo que use o comandos dela você estará executando em Lua.
No final de tudo você esta programando em Lua .
Ela e mais primitiva e então eu fiz uma demozinha e vou disponibilizar o andamento dela.
Por enquanto ela tem 3 estruturas básicas função,um looopzinho e uma verificação.
str = "\n--function print ['oi hear'['ola'['verdade'\n--function print ['oi'\n--loopCT [4 [{--function print ['year'}\n--gets [7 > 6 [{--function print ['oi'}\n"
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 ifCT(str)
for i in str:gmatch("--gets (.*)") do
local t = string.explode(i, "[")
y = loadstring('return (' .. t[1].. ')')()
if y then
local y = string.match(i, "{(.-)}")
print(y)
interpreteFunctionInCt(y)
end
end
end
function loopCT(str)
for i in str:gmatch("--loopCT (.*)") do
local t = string.explode(i, "[")
print(t[1])
for x =1, tonumber(t[1]) do
local y = string.match(i, "{(.-)}")
interpreteFunctionInCt(y)
end
end
end
function detectCTtype(str)
for i in str:gmatch("--(.-)\n") 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
end
return true
end
detectCTtype(str)
As únicas regras que existem na syntax.
Saltar Linhas
Cada estrutura em uma linha
E sempre obedecer o "--"
Veja como ficaria:
--function print ['oi hear'['ola'['verdade' ---- Printa
--function print ['oi'\n --- Printa
--loopCT [4 [{--function print ['year'} ---Faz um loop e printa 4 vezes a função
--gets [7 > 6 [{--function print ['oi'}" ----Verifica 1 argumento se for true executa a função se for false não executa a função
Obs:
Para que usar CT?
Quem sabe para pequenos scripts ou configs.
Ou mesmo para aprendizagem afinal ela super fácil de manipular.