L00P
# L00P

L00P é uma linguagem de programação esotérica, baseada na linguagem brainfuck e criada por Georg Westenberger.

## Estrutura da Linguagem

Como em brainfuck, a memória é acessada por um programa em L00P através de células de memória. Não há um padrão definido para o total de células de memória, nem para o tamanho de cada célula de memória. Em sua versão original, cada célula de memória era um Word (2 Bytes).
Uma das diferenças entre brainfuck e L00P é que, em L00P, as células de memória podem conter números negativos.
Os comandos de controle de fluxo de brainfuck são aceitos, mas [ é interpretado como (, e ] é interpretado como ).
O programa é executado em um loop implícito e contínuo.

### Comandos

| Caractere | Função | C |
| > | Acessa a célula de memória seguinte. | p++; |
| < | Acessa a célula de memória anterior. | p--; |
| + | Aumenta um à célula de memória selecionada. | *p++; |
| - | Subtrai um da célula de memória selecionada. | *p--; |
| . | Imprime na tela o caractere relativo à célula de memória selecionada. | printf("%c",*p); |
| : | Imprime na tela o valor numérico da célula de memória selecionado. | printf("%i",*p); |
| , | Salva na célula de memória selecionada o código de uma tecla clicada. | *p=getch; |
| ; | Salva na célula de memória selecionada o valor númerico relativo a uma tecla clicada. | scanf("%i",p); |
| 0 | Zera a célula de memória selecionada. | *p=0; |
| * | Duplica a célula de memória selecionada. | *p=*p*2; |
| _ | Inverte o sinal da célula de memória selecionada. | *p=-*p; |
| # | Soma o valor da célula de memória selecionada ao valor do ponteiro. | *p=*p+p; |
| @ | Torna o valor da célula de memória selecionada igual à célula de memória em seu valor mais seu ponteiro. | *p=*(p+*p); |
| $ | Faz a célula de memória em seu valor mais seu ponteiro ser igual ao seu valor. | *(p+*p)=*p; |
| & | Finaliza o programa | return(0); |
| S | Obtém o sinal da célula de memória selecionada. | *p=(*p>0)?1:((*p==0)?0:-1); |
| ( | Início da estrutura de controle de fluxo IF. | if(*p){ |
| | | Estrutura de controle de fluxo ELSE. | }else{ |
| ) | Fim da estrutura IF. | }; |

## Compatibilidade com brainfuck

Os códigos em L00P são quase 100% incompatíveis com brainfuck, e isso é recíproco. A ausência das estruturas convencionais de loop ([ e ]), e a existência do loop implícito fazem as técnicas de programação serem muito diferentes. Poucos são os códigos que oferecem suporte a ambas as linguagens.