Ir para conteúdo

Posts Recomendados

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 :p.

 

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.

Editado por caotic
Link para o comentário
https://xtibia.com/forum/topic/216113-beta-ct-lua/
Compartilhar em outros sites

Legal, poderia ter usado pcall e loadstring :S.

E talvez um verificador de syntax tal como assert seria uma boa.

Mais e melhor criar uma próprio verificador e rodar no código do CT antes dele executar.

Link para o comentário
https://xtibia.com/forum/topic/216113-beta-ct-lua/#findComment-1531732
Compartilhar em outros sites

×
×
  • Criar Novo...