Ir para baixo
Weslei
Weslei
MODERADOR

MODERADOR
Mensagens : 402
Data de inscrição : 16/01/2015
Idade : 24
Localização : Narnia

Criando uma "mini linguagem" em python. Empty 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 Very Happy.

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


Última edição por Weslei em Dom Jan 18, 2015 12:20 am, editado 1 vez(es)
Weslei
Weslei
MODERADOR

MODERADOR
Mensagens : 402
Data de inscrição : 16/01/2015
Idade : 24
Localização : Narnia

Criando uma "mini linguagem" em python. Empty 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

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)
Igoor
Igoor
MEMBRO

MEMBRO
Mensagens : 78
Data de inscrição : 29/01/2015
http://igoor.comze.com/

Criando uma "mini linguagem" em python. Empty Re: Criando uma "mini linguagem" em python.

Sex Jan 30, 2015 12:12 am
Criativo, Parabéns ^^
Bielfion
Bielfion
MEMBRO

MEMBRO
Mensagens : 8
Data de inscrição : 29/04/2016
Idade : 25
Localização : São Paulo

Criando uma "mini linguagem" em python. Empty 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.
Nikopark
Nikopark
ADMINISTRADOR

ADMINISTRADOR
Mensagens : 1126
Data de inscrição : 25/12/2014
Idade : 26
Localização : Ontário, Canadá
https://www.aulamice.io/

Criando uma "mini linguagem" em python. Empty Re: Criando uma "mini linguagem" em python.

Dom maio 22, 2016 10:44 am
O canal está de portas abertas para você!
Weslei
Weslei
MODERADOR

MODERADOR
Mensagens : 402
Data de inscrição : 16/01/2015
Idade : 24
Localização : Narnia

Criando uma "mini linguagem" em python. Empty 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
Conteúdo patrocinado

Criando uma "mini linguagem" em python. Empty Re: Criando uma "mini linguagem" em python.

Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos