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.