Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
MODERADOR

MODERADOR
Mensagens : 371
Data de inscrição : 16/01/2015
Idade : 18
Localização : Narnia
Ver perfil do usuário

Criando uma "mini linguagem" em python.

em Sab 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)
avatar
MODERADOR

MODERADOR
Mensagens : 371
Data de inscrição : 16/01/2015
Idade : 18
Localização : Narnia
Ver perfil do usuário

Re: Criando uma "mini linguagem" em python.

em Sab 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)
avatar
MEMBRO

MEMBRO
Mensagens : 77
Data de inscrição : 29/01/2015
Ver perfil do usuáriohttp://igoor.comze.com/

Re: Criando uma "mini linguagem" em python.

em Sex Jan 30, 2015 12:12 am
Criativo, Parabéns ^^
avatar
NOVATO

NOVATO
Mensagens : 8
Data de inscrição : 29/04/2016
Idade : 18
Localização : São Paulo
Ver perfil do usuário

Re: Criando uma "mini linguagem" em python.

em Sab Maio 21, 2016 1:46 pm
Meio tenso, más por um lado você foi bem criativo nisso shaushaush, obrigado bro.
avatar
ADMINISTRADOR

ADMINISTRADOR
Mensagens : 1029
Data de inscrição : 25/12/2014
Idade : 19
Localização : Ontário, Canadá
Ver perfil do usuáriohttps://www.aulamice.io/

Re: Criando uma "mini linguagem" em python.

em Dom Maio 22, 2016 10:44 am
O canal está de portas abertas para você!

_________________
Oi Convidado, eu sou o Nikopark dono dessa bagaça, prazer em conhece-ló.
Minha empresa de host: www.sendweb.host
Minha empresa de hardware: www.sendweb.host

Meus contatos pessoais estão em meu perfil.
avatar
MODERADOR

MODERADOR
Mensagens : 371
Data de inscrição : 16/01/2015
Idade : 18
Localização : Narnia
Ver perfil do usuário

Re: Criando uma "mini linguagem" em python.

em 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

_________________


CORINTHIANS HEXACAMPEÃO 2015


hepta 2017 ?




Source em GoLang e Node.JS com Bulle 100% http://prntscr.com/g80hla

GG!
Conteúdo patrocinado

Re: Criando uma "mini linguagem" em python.

Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum