domingo, 17 de julho de 2011

Implementando uma Toy Programming Language

Estou implementando uma linguagem sem nome (ainda usando um nome temporário), e estou pensando em implementar o básico que uma linguagem moderna precisa. Estou implementando para aprimorar meus próprios conhecimentos sobre programação e relembrar coisas que aprendi na época da faculdade. Aqui vai um exemplo da sintaxe da linguagem que estou implementando:



Tudo na linguagem é função, expressão, lista e valor. Inclusive o "if". Que nela é uma função que é definida na propria linguagem:



E usado desta foma:



O "*" informa ao interpretador que estou querendo referenciar a variável "k" no escopo dinâmico (escopo onde a função está sendo executada) e não no escopo local interno da função, onde modificações a esta variável não fariam diferença para o escopo onde a função foi chamada (caso exista uma variável com o mesmo nome).
Na linguagem existe também apenas uma estrutura de loop que é o "while". E funciona da seguinte forma:



Com o "while" eu posso definir como é minha estrutura de "for". Assim:



E usar da seguinte forma:



Assim o valor de "a" é [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. E outra coisa interessante que posso definir é a função "map", que ficaria da seguinte forma:



Nesta linguagem o comportamento do "map" é o mesmo do "for each" pois uma função SEMPRE retorna um valor nem que ele seja "Null".
Com o essas funções previamente definidas, podemos implementar uma função de "filter" e ficaria assim:



Os "_" underlines nestas funções servem para não conflitar com nome das variáveis do escopo onde o programador vai usar.

Quem quiser saber mais sobre este projeto pode acompanhar pelo github. Aceito reclamações, xingamentos, elogios e etc.

https://github.com/rafaelcaricio/fny