Brainfuck
Origem: Wikipédia, a enciclopédia livre.
- O título dado a este artigo encontra-se incorrecto devido a limitações técnicas. O título correcto é brainfuck .
A brainfuck é uma linguagem de programação esotérica. Foi criada por Urban Müller, em 1993, com a intenção de criar o menor compilador possível, ispirando-se no compilador da linguagem também esotérica FALSE.
Índice |
[editar] Forma da linguagem
O brainfuck acessa a memória através de células de memória. O tamanho de cada célula de memória depende do compilador ou interpretador usado. Na primeira versão, eram usadas 30000 células de memória de 1 Byte cada. Existem versões mais novas com até 1 Dword (4 Bytes) por célula de memória.
O padrão da linguagem são números finitos, sem distinção de positivos e negativos, pois o maior número (que é possível representar em uma célula de memória) antecede o menor, e o menor sucede o maior.
Algumas versões da linguagem possuem células de memória dinâmicas, que podem registrar números infinitos (de acordo com a disponibilidade de memória). Nessas versões, existe distinção entre números positivos e negativos. Em geral, essas versões são usadas apenas em interpretadores, e são muito mais lentas que as versões padrão. Isso se deve à alocação dinâmica das células de memória: a memória não é acessada diretamente.
[editar] Comandos
A linguagem possui apenas oito comandos, cada qual formado por apenas um caractere. Outros caracteres são considerados comentários, e são ignorados.
Caractere | Função |
---|---|
> |
Acessa a célula de memória seguinte. |
< |
Acessa a célula de memória anterior. |
+ |
Incrementa o valor da célula de memória selecionada. |
- |
Decrementa o valor da célula de memória selecionada. |
. |
Imprime na tela o caractere relativo à célula de memória selecionada. |
, |
Salva na célula de memória selecionada o código da próxima tecla a ser clicada. |
[ |
É uma estrutura de controle de fluxo. Repete uma série de comandos enquanto a célula de memória selecionada for diferente de zero. |
] |
Fim da estrutura [ . |
[editar] Conversão para C
Qualquer código em brainfuck pode ser convertido em C, usando a tabela de conversão que segue:
Comando em brainfuck | Equivalente em C |
---|---|
- |
--*ptr; |
+ |
++*ptr; |
< |
--ptr; |
> |
++ptr; |
, |
*ptr=getchar(); |
. |
putchar(*ptr); |
[ |
while(*ptr){ |
] |
}; |
[editar] Exemplos
O código a seguir imprime todos os caracteres até que o ponto final seja clicado.
>>>>++++++[-<+++++++>]<++++<,>[ ->+<]>[-<+<->>]<<[ >[->+<]>[-<+ <+>>]<<.,>[->+<]>[-<+<->>]<<]>.
[editar] Linguagens baseadas em brainfuck
- PATH: combinação de brainfuck com Befunge.
- SNUSP: é uma versão bidimensional do brainfuck.
- Braintwist: adiciona o suporte a códigos auto-modificáveis ao brainfuck.
- L00P: possui um loop implícito, sem as estruturas comuns de loop e com 10 instruções a mais.
- Pbrain: adiciona sistema de subrotinas ao brainfuck.