Nome | Matrícula |
---|---|
Adrianne Alves da Silva | 16/0047595 |
Letícia de Souza | 15/0015160 |
Este repositório apresenta um compilador para a linguagem lispf_ck que gera código brainf_ck, escrito em linguagem python, correpondente a uma atividade apresentada como avaliação parcial da disciplina de Compiladores do curso de Engenharia de software da Universidade de Brasília (UnB), Campus de Engenharias - Faculdade do Gama (FGA).
Lisp é uma linguagem de programação formal, matemática, que foi projetada a fim de realizar processamento de dados simbólicos. A representação do código se dá como lista, de maneira que os elementos são separados por espaços através de uma notação prefixa, em que o primeiro elemento representa uma função e os demais são argumentos da mesma. Essa linguagem foi utilizada por um tempo pela comunidade de inteligência artificial. Entretanto, nesse repositório será desenvolvido um parser para a linguagem Lispf_ck, uma variante da linguagem brainf_ck que combina a semântica do brainfuck com outros recursos.
De maneira simplista, a Lispf_ck é o mesmo que a brainf_ck em termos de limitações, mas em uma notação diferente. Ex:
BrainFuck : ,+[.-]
Lispf_ck: (do read inc (loop print dec))
Como é uma linguagem diretamente relacionada com brainf_ck, podemos utilizar o alfabeto de brainfuck para demonstrar o de Lispf_ck. Tal que, temos em brainf_ck:
Caractere | Significado |
---|---|
> | Incremento do ponteiro |
< | Decremento do pronteiro |
+ | Incremento do byte |
- | Decremento do byte |
. | Imprimir o dado |
, | Entrada de um byte |
[ | Início de um Laço |
] | Fim de um laço de repetição |
E em Lispf_ck teriamos:
brainfuck | Lispfuck |
---|---|
[...] | (loop ...) |
> | right |
< | left |
+ | inc |
- | dec |
. | |
, | read |
Em posse dessas informações, é possível perceber a semelhança entre as linguagens, tornando mais simples o processo de criação do compilador.
Para contribuir com o desenvolvimento, é preciso que o colaborador crie o seu próprio Fork e envie um pull request com a contribuição para a branch master do projeto. As alterações serão analisadas e incorporadas ao compilador em caso de aprovação.