xx xxxx xx xxxx xxxxx xxxx xx xx xx xx xx xx xx xx xxxx xx xx xxxx xx xx xx xx xxxx xx xxxx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xxxxx xx xx xx xx xxxxx xx xx xx xx xx xx xxxxx xx xxxxxx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xxxxx xxxx xxxxxx xxxx xxxxx xxxxx xxxx xxxx H o M e P a G e Brainf*ck -------------------------+ | -------------------------+-------------------------------------------------- O que é? Brainf*ck é uma linguagem de programação baseada na linguagem de programação das máquinas de Post e Turing. � uma linguagem extremamente pequena (8 comandos sem parâmetros), e não é indicada para uso prático. Ou seja, você não criará nenhum programa de controle para vídeo locadoras com ela. O aspecto mais importante da linguagem Brainf*ck é o fato dela despertar o interesse das pessoas para as máquinas algorítmicas propostas por Turing e Post. Também pode ser vista como uma linguagem de programação curiosa. Ou até mesmo para você dizer pros seus amigos que você programa em Brainf*ck e eles não. Um breve tutorial O funcionamento da linguagem Brainf*ck é simples e eu tentarei explicar de forma resumida. Recomendo que você faça o download dos fontes do interpretador e dos exemplos. Brainf*ck utiliza o conceito de células de memória e ponteiro de memória para funcionar. Inicialmente a memória da 'máquina Brainf*ck' é a seguinte: Posição: 0 1 2 3 4 5 6 7 8 - - - +-----+-----+-----+-----+-----+-----+-----+-----+-----+ - - - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - - - +-----+-----+-----+-----+-----+-----+-----+-----+-----+ - - - ^ O símbolo '^' indica a o ponteiro de memória e mostra a sua posição inicial (0). A partir daí, Brainf*ck disponibiliza os 8 comandos para que você possa programar: +---------+------------------------------------------------------------------+ | Comando | Função | +---------+------------------------------------------------------------------+ | + | Incrementa em 1 o valor da célula apontada pelo ponteiro. | | - | Decrementa em 1 o valor da célula apontada pelo ponteiro. | | > | Movimenta o ponteiro 1 posição para a direita. | | < | Movimenta o ponteiro 1 posição de para a esquerda. | | , | Recebe 1 caracter pela entrada padrão e (teclado) e joga | | | o seu código ASCII na posição de memória apontada pelo ponteiro. | | . | Imprime o caracter com o código ASCII da posição de memória | | | apontada pelo ponteiro. | | [ | Inicia o loop. | | ] | Se a posição de memória apontada pelo ponteiro contiver o valor | | | 0 continua a execução, senão, volta para o '[' mais próximo. | +---------+------------------------------------------------------------------+ Tendo isso em vista, vamos fazer um pequeno programa que imprime o caracter 'A' na tela. O caracter 'A' possui ASCII code 65. Uma forma de fazer isso seria: ++++++ ...por 65 vezes e . para imprimir Convenhamos, isso é muito trabalhoso, logo, podemos fazer 8*8+1=65 para abreviar nosso trabalho. Isso ficaria assim: >++++++++[<++++++++>-]<+. Calma, eu explico. :) Vamos seguir isso passo a passo: ----------- 00 00 00 00 Início ----------- ^ ----------- 00 00 00 00 > ----------- ^ ----------- 00 08 00 00 ++++++++ ----------- ^ ----------- 00 08 00 00 [ LOOP ----------- ^ ----------- 00 08 00 00 < ----------- ^ ----------- 08 08 00 00 ++++++++ ----------- ^ ----------- 08 08 00 00 > ----------- ^ ----------- 08 07 00 00 - ----------- ^ ----------- 08 07 00 00 ] é zero? não? volte pra LOOP. é zero? siga em frente ----------- ^ ----------- 64 00 00 00 < ----------- ^ ----------- 65 00 00 00 + ----------- ^ ----------- 65 00 00 00 . Imprime a letra 'A' ----------- ^ Fim. Ufa! :) Vocês devem estar pensando: 'Nossa! isso é muito difícil!' ou 'Nossa! isso não serve de nada!'. � mais ou menos por aí :) Esse tipo de linguagem só serve para provar alguns conceitos e não possuem finalidade prática. Bom, espero que vocês tenham entendido o básico. Se precisarem de maiores informações eu recomendo uma visitinha em: - Cat's Eye - Brainf*ck Hello World E fazer o download do arquivo com o interpretador e alguns exemplos.