- Weslei
MODERADOR - Mensagens : 402
Data de inscrição : 16/01/2015
Idade : 24
Localização : Narnia
Criando uma "mini linguagem" em python.
Sáb Jan 17, 2015 11:50 pm
AVISO: Antes de sair dizendo que fez uma linguagem saiba que uma linguagem seja interpretada ou compilada não funcionam assim. E ela só vai fazer conta de mais e printar na tela bem simples. E essa porra é estença mas vale a leitura. E também requer um nível de python no minimo básico para entender.
Vamos chamar essa linguagem de TutorWes.
Primeiramente vamos definir uma "syntax".
então para declarar variáveis usaremos uma keyword chamada "var" e para "printar" na tela usaremos a keyword "p::tela" e para somar usaremos "add".
As Keywords (Palavras Chave) da "linguagem" TutorWes são somente.
var, add e p::tela
Então mais ou menos um código dessa linguagem seria.
var x, (valor x) #declara a variavel
var y, (valor y) #declara a variavel
c add #Soma e guarda na variavel "c"
p::tela(y, x)
OBS: Como eu acho Assembly muito foda então a "syntaxe" vou deixar parecida.
Começaremos a desenvolver criando um simples código da nossa linguagem.
Então:
var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)
Então nosso código tem que sair 60, porque 10 + 20 + 30 = 60.
Agora chegou a parte que entra a Python .
vamos declarar uma variavel chamada "codigo" com nosso codigo da nossa "linguagem".
vamos criar um dicionário chamado "variaveis" para guardar nossas variaveis para poder "printar" ela né ficando assim.
vamos criar um "cache" para guardar o que queremos somar ficando assim.
Agora teremos que percorrer nosso código da nossa "linguagem" para poder executar o código vamos usar um loop FOR e usar um split para cada quebra de linha. ficando assim
vamos agora guardar em "cache" o que queremos somar.
explicando o "if x.startswith("var"):" vamos aportuguesar essa porra.
SE "X" começar com "VAR" Faça.
explicando o "cache.append(x)" aportuguesado também.
Adicione "X" a "CACHE".
Isso fará com que guarde o que queremos somar.
#==== Só para separar estou escrevendo no Bloco de Notas ======================================================
Vamos criar um "Garbage Collector" (Coletor de lixo) a cada linha vazia limparemos o cache.
vou explicar essa parte "elif x.replace(" ", "") == "":" e "cache = []".
primeiramente ele irá remover todos os espaços de X.
Agora depois que remover todos os espaços de X.
SE "X" for igual a "" (Nada) faça, então se isso for verdadeiro ele vai limpar o "cache" usando "[]".
====================================================== Separando.....
Vamos agora fazer com que some tudo.
OBS: Não vou mais explicar porque vai ficar muiiito gigante essa porra e eu não to afim de ficar explicando o básico de python. Vou colocar o nome das variaveis em português para facilitar o entendimento. É super simples essa parte.
Ficaremos assim.
Separando..... ============================================================
E foi crada a linguagem TutorWes
Agora vamos mostar na tela o resultado :3
obs: Não irei explicar
==========================================
E Fim nossa "linguagem" foi criada execute esse código e verá que funciona.
60
[Finished in 0.5s]
OBS 30003030303030303: AINDA DA PARA MODIFICAR ESSE CÓDIGO PARA DEIXAR COM QUE FAÇA MAIS COISAS.
créditos:
Eu
Vamos chamar essa linguagem de TutorWes.
Primeiramente vamos definir uma "syntax".
então para declarar variáveis usaremos uma keyword chamada "var" e para "printar" na tela usaremos a keyword "p::tela" e para somar usaremos "add".
As Keywords (Palavras Chave) da "linguagem" TutorWes são somente.
var, add e p::tela
Então mais ou menos um código dessa linguagem seria.
var x, (valor x) #declara a variavel
var y, (valor y) #declara a variavel
c add #Soma e guarda na variavel "c"
p::tela(y, x)
OBS: Como eu acho Assembly muito foda então a "syntaxe" vou deixar parecida.
Começaremos a desenvolver criando um simples código da nossa linguagem.
Então:
var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)
Então nosso código tem que sair 60, porque 10 + 20 + 30 = 60.
Agora chegou a parte que entra a Python .
vamos declarar uma variavel chamada "codigo" com nosso codigo da nossa "linguagem".
- Código:
codigo = """var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)"""
vamos criar um dicionário chamado "variaveis" para guardar nossas variaveis para poder "printar" ela né ficando assim.
- Código:
codigo = """var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)"""
variaveis = {}
vamos criar um "cache" para guardar o que queremos somar ficando assim.
- Código:
codigo = """var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)"""
variaveis = {}
cache = []
Agora teremos que percorrer nosso código da nossa "linguagem" para poder executar o código vamos usar um loop FOR e usar um split para cada quebra de linha. ficando assim
- Código:
codigo = """var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)"""
variaveis = {}
cache = []
for x in codigo.split("\n"):
vamos agora guardar em "cache" o que queremos somar.
- Código:
codigo = """var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)"""
variaveis = {}
cache = []
for x in codigo.split("\n"):
if x.startswith("var"):
cache.append(x)
explicando o "if x.startswith("var"):" vamos aportuguesar essa porra.
SE "X" começar com "VAR" Faça.
explicando o "cache.append(x)" aportuguesado também.
Adicione "X" a "CACHE".
Isso fará com que guarde o que queremos somar.
#==== Só para separar estou escrevendo no Bloco de Notas ======================================================
Vamos criar um "Garbage Collector" (Coletor de lixo) a cada linha vazia limparemos o cache.
- Código:
codigo = """var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)"""
variaveis = {}
cache = []
for x in codigo.split("\n"):
if x.startswith("var"):
cache.append(x)
elif x.replace(" ", "") == "":
cache = []
vou explicar essa parte "elif x.replace(" ", "") == "":" e "cache = []".
primeiramente ele irá remover todos os espaços de X.
Agora depois que remover todos os espaços de X.
SE "X" for igual a "" (Nada) faça, então se isso for verdadeiro ele vai limpar o "cache" usando "[]".
====================================================== Separando.....
Vamos agora fazer com que some tudo.
OBS: Não vou mais explicar porque vai ficar muiiito gigante essa porra e eu não to afim de ficar explicando o básico de python. Vou colocar o nome das variaveis em português para facilitar o entendimento. É super simples essa parte.
Ficaremos assim.
- Código:
codigo = """var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)"""
variaveis = {}
cache = []
for x in codigo.split("\n"):
if x.startswith("var"):
cache.append(x)
elif x.replace(" ", "") == "":
cache = []
elif "add" in x:
soma = 0
for r in cache:
pegavalor = r.split(", ")[1]
soma += int(pegavalor)
variaveis[x.split(" ")[0]] = soma
Separando..... ============================================================
E foi crada a linguagem TutorWes
Agora vamos mostar na tela o resultado :3
obs: Não irei explicar
- Código:
codigo = """var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)"""
variaveis = {}
cache = []
for x in codigo.split("\n"):
if x.startswith("var"):
cache.append(x)
elif x.replace(" ", "") == "":
cache = []
elif "add" in x:
soma = 0
for r in cache:
pegavalor = r.split(", ")[1]
soma += int(pegavalor)
variaveis[x.split(" ")[0]] = soma
elif x.startswith("p::tela"):
pegavariavel = x[8::][:-1]
if pegavariavel in variaveis:
print variaveis[pegavariavel]
else:
print "Variavel inexistente"
==========================================
E Fim nossa "linguagem" foi criada execute esse código e verá que funciona.
60
[Finished in 0.5s]
OBS 30003030303030303: AINDA DA PARA MODIFICAR ESSE CÓDIGO PARA DEIXAR COM QUE FAÇA MAIS COISAS.
créditos:
Eu
- Weslei
MODERADOR - Mensagens : 402
Data de inscrição : 16/01/2015
Idade : 24
Localização : Narnia
Re: Criando uma "mini linguagem" em python.
Sáb Jan 17, 2015 11:54 pm
Ainda tem duvida que funciona ?
troque o código para esse
100
60
30
[Finished in 0.6s]
A ordem do "p::tela" também pode ser qualquer uma des de que a soma venha antes.
troque o código para esse
- Código:
var tutor, 10
var quepa, 20
var port, 30
result add
var teste, 10
var tchumba, 20
quepa add
var outrotest, 98
var testi, 1
var testiiiii, 1
quepas add
p::tela(quepas)
p::tela(result)
p::tela(quepa)
100
60
30
[Finished in 0.6s]
A ordem do "p::tela" também pode ser qualquer uma des de que a soma venha antes.
- Código:
var tutor, 10
var quepa, 20
var port, 30
result add
p::tela(result)
var teste, 10
var tchumba, 20
quepa add
p::tela(quepa)
var outrotest, 98
var testi, 1
var testiiiii, 1
quepas add
p::tela(quepas)
- Bielfion
MEMBRO - Mensagens : 8
Data de inscrição : 29/04/2016
Idade : 25
Localização : São Paulo
Re: Criando uma "mini linguagem" em python.
Sáb maio 21, 2016 1:46 pm
Meio tenso, más por um lado você foi bem criativo nisso shaushaush, obrigado bro.
Re: Criando uma "mini linguagem" em python.
Dom maio 22, 2016 10:44 am
O canal está de portas abertas para você!
- Weslei
MODERADOR - Mensagens : 402
Data de inscrição : 16/01/2015
Idade : 24
Localização : Narnia
Re: Criando uma "mini linguagem" em python.
Qui Jun 02, 2016 5:52 pm
Nesse tempo eu adorava fazer isso sahusa até fiz um bem elaborado que era foda mesmo mas apaguei porque desisti
Permissões neste sub-fórum
Não podes responder a tópicos
|
|