Brainfuck

Brainfuck (jodecerebros), ye un llinguaxe de programación esotéricu, diseñáu por Urban Müller en 1993, coles mires de faer un llinguaxe que fuera al empar bien simple, Turing completu y que riquiera un compilador pequeñu. Müller basó Brainfuck na máquina de Turing y sirviólu d'inspiración el compilador de 1024 bytes de tamañu del llinguaxe FALSE.

La distribución clásica ye la versión 2 escrita pol mesmu Müller, conteniendo un compilador pal ordenador Amiga, un intérprete, programes d'exemplu y un documentu "readme".

 Diseñu del llinguaxe 
El llinguaxe basar nun modelu d'execución simple que consiste, amás del programa, d'un vector de (siquier) 30.000 bytes inicializados a cero, un piqueru sobre esi vector (que al empiezu de la execución apunta al primer elementu del vector) y dos "corrientes" de bytes pa la entrada y la salida.

 Les Instrucciones 
Hai solu ocho instrucciones, y toes son d'un calter.
 Calter Significáu > Amonta'l punteru. < Decrementa el punteru. + Amonta'l byte apuntáu. - Decrementa el byte apuntáu. . Escribe'l byte apuntáu nel fluxu de salida. , Lee un byte del fluxu d'entrada y almacenar nel byte apuntáu. [ Avanza a la instrucción darréu posterior al ] correspondiente si'l byte anguaño apuntáu ye nulu (si ye 0). ] Recula a la instrucción darréu posterior al [ correspondiente si'l byte anguaño apuntáu nun ye nulu (si ye distintu de 0).

Traducción a otros llinguaxes
Los programes de Brainfuck pueden traducise a C y Perl con estes substituciones, suponiendo que ptr seya del tipu unsigned char*. Sicasí, tienen los sos propios traductores.
brainfuckCPerl>  ++ptr;  $pointer++;<  --ptr;  $pointer--;+  ++*ptr;  $tape[$pointer]++;-  --*ptr;  $tape[$pointer]--;.  putchar(*ptr);  print chr$tape[$pointer];,  *ptr=getchar();  $tape[$pointer]=ord(<>);[  while (*ptr) {  while($tape[$pointer]){]  }  }

 Exemplos 
Hola Mundu!

Esti sería'l típicu programa qu'escribe "Hola mundu!"

 ++++++++++
 [ Bucle pa empecipiar les memories (repitir 10 vegaes)
 >+++++++>++++++++++>+++++++++++>+++>+<<<<<-
 70 100 110 30 10
 ]
 >++. imprime 'H' (72) 1
 >>+. imprime 'o' (111) 3
 ---. 'l' (108) 3
 <---. 'a' (97) 2
 >>++. espaciu (32) 4
 <+. 'm' (109) 3
 ++++++++. 'o' (117) 3
 -------. 'n' (110) 3
 <+++. 'd' (100) 2
 >+. 'o' (111) 3
 >+. '!' (33) 4
 >. '\n' (10) 5
El correspondiente códigu "Hello World!" escribiríase, nuna sola llinia:
 ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>. yá que nun-y afecten los espacios, les tabulaciones o los saltos de llinia.
 El xuegu de la vida 


 Linus Akesson presents:
 The Game Of Life implemented in Brainfuck

 +>>++++[<++++>-]<[<++++++>-]+[<[>>>>+<<<<-]>>>>[<<<<+>>>>>>+<<-]<+
 +++[>++++++++<-]>.[-]<+++[>+++<-]>+[>>.+<<-]>>[-]<<<++[<+++++>-]<.<<[>>>>+
 <<<<-]>>>>[<<<<+>>>>>>+<<-]<<[>>>>.+<<<++++++++++[<[>>+<<-]>>[<<+>>>>>++++++++
 +++<<<-]<[>+<-]>[<+>>>>+<<<-]>>>[>>>>>>>>>>>>+>+<< <<<<<<<<<<<-]>>>>>>>>>>
>>[-[>>>>+<<<<-]>[>>>>+<<<<-]>>>]> >>[<<<+>> >- ]<<<[>>+>+<<<-]>[->[<<<
<+>>>>-]<[<<< <+> >>>-]<<<< ]< ++++++ ++ +[>+++++<-]>>[<<+>>-]<
<[>---<-]>.[- ] <<<<<<<<< < <<<<<< < -]++++++++++.[-]<-]>>>
>[-]<[-]+++++ +++[>++++ ++++< - ]>--.[-]<,----------[<+
>-]>>>>>>+<<<<< < <[>+>>>>>+>[ -]<<< << <<-]>++++++++++>>>>>[[-]
<<,<<<<<<<->>>> > >>[<<<<+>>>>-]<<<<[>>>>+ >+<<<<<-]>>>>>----------[<<<<
<<<<+<[>>>>+<<< <-]>>>>[<<<<+>>>>>>+<<- ]>[>-<-]>++++++++++[>+++++++++
++<-]<<<<<<[>>> >+<<<<-]>>>>[<<<<+>>>>> >+<<-]>>>>[<<->>-]<<++++++++++
[>+<-]>[>>>>>>> >>>>>+>+<<<< <<<<< <<<<-]>>> >> >>>>>>>[-[>>>
>+<<<<-]>[>>>> +<<<<-]>> > ]>> > [<< < +>>>-]+<<<[>
>>-<<<-]>[->[< <<<+>>>>-] <[ < < < <+>>>>-]<<<
<]<<<<<<<<<<<, [ -]]>]>[-+++ ++ + +++ ++[>+++++++
++++>+++++++++ + +<<-]>[-[>>> +<<<- ]>>>[ < <<+ >>>>>>>+>+<
<<<<-]>>>>[-[> > >>+<<<<-]>[> >>>+< < <<-]> > >]> >>[<<<+>>>-
]<<<[>>+>+<<< - ]>[->[<<<<+> >>>-] < [<<< < +>> >>-]<<<<]<<
<<<<<<[>>>+<< < -]>>>[<<<+>> >>>>> + >+<< < <<-]<<[>>+<<
-]>>[<<+>>>>> >+>+<<<<<-]>> >>[-[ > >>>+ < <<<-]>[>>>>+<
<<<-]>[>>>>+< <<<-]>>]>>>[ - ]<[>+< - ]<[ - [<<<<+>>>>-]<<<
<]<<<<<<<<]<< <<<<<<<<++++ + +++++ [ >+++ + ++++++[<[>>+<<-]>>[<<+
>>>>>++++++++ + ++<<< -] < [>+<- ] >[<+ > >>>+<<<-]>>>[<<<+>>>-]
<<<[>>>+>>>> > +<<<< << <<-]> > >>>> >>>[>>+<<-]>>[<<+<+>>
>-]<<<------ - -----[ >> >+<<< - ]>>> [<<<+> > >>>>>+>+<<<<
<-]>>>>[-[>> > >+<<<< -] > [>>>> + <<<<- ]>>> ] >>>[<<<+>>>-
]<<<[>>+>+<< < -]>>> >> > > [<<<+ >>>-]<<<[>>>
+<<<<<+>>- ]> > >>>>>[< <<+>>>-]<<<[>
>>+<<<<<<< <<+ > >>>>>-]< <<<<<<[->[<<<<+
>>>>-]<[<<<<+>>>>-]<<<<]>[<<<<<< <+>>> >>>>-]<<<< <<<<<+++++++++++[>
>>+<<<-]>>>[<<<+>>>>>>>+>+<<<<<-]>>>>[-[> >>>+<<<<-]>[>>>>+<<<<-]>>>]>>>[<<<
+>>>-]<<<[>>+>+<<<-]>>>>>>>[<<<+>>>-]<<<[ >>>+<<<<<+>>-]>>>>>>>[<<<+>>>-]<<<
[>>>+<<<<<<<<<+>>>>>>-]<<<<<<<[->[< < < <+>>>>-]<[<<<<+>>>>-]<<<<]>[<<<<<<<
+>>>>>>>-]<<<<<<<<<+++++++++++[>>> > >>>+>+<<<<<<<<-]>>>>>>>[-[>>>>+<<<<-
]>[>>>>+<<<<-]>>>]>>>[<<<+>>>-]<<< [ >>+>+<<<-]>>>>>>>[<<<+>>>-]<<<[>>>+<<
<<<+>>-]>>>>>>>[<<<+>>>-]<<<[>>>+< <<<<<<<<+>>>>>>-]<<<<<<<[->[<<<<+>>>>-
 ]<[<<<<+>>>>-]<<<<]>[<<<<<<<+>>>>> >>-]<<<<<<<----[>>>>>>>+<<<<<<<+[>>>>>
 >>-<<<<<<<[-]]<<<<<<<[>>>>>>>>>>>>+>+<<<<<<<<<<<<<-][ lft@df.lth.se ]>>>>>
 >>>>>>>[-[>>>>+<<<<-]>[>>>>+<<<<-]>[>>>>+<<<<-]>>]>>>[-]<[>+<-]<[-[<<<<+>>
 >>-]<<<<]<<<<<<[-]]<<<<<<<[-]<<<<-]<-]>>>>>>>>>>>[-]<<]<<<<<<<<<<]

 Type for instance "fg" to toggle the cell at row f and column g
 Hit enter to calculate the next generation
 Type q to quit
Triángulu de Sierpinski


[ This program prints Sierpinski triangle on 80-column display. ]
 >
 + +
 + +
 [ < + +
 + +
 + + + +
 > - ] >
 + + + + + + + +
 [ >
 + + + +
 < - ] >
 > + + > > > + >
 > > + <
 < < < < < < < <
 < [ - [ - > + <
 ] > [ - < + > > > . < < ] > > >
 [ [
 - > + +
 + + + +
 + + [ > + + + +
 < - ] >
 . < < [ - > + <
 ] + > [ - > + +
 + + + + + + + + < < + > ] > . [
 - ] > ]
 ] + < < < [ - [
 - > + < ] + > [
 - < + > > > - [ - > + < ] + + >
 [ - < - > ] < <
 < ] < < < < ] + + + + + + + + +
 + . + + + . [ - ] < ] + + + + +
 * * * * * M a d y * B y : * N Y Y R I K K I * 2 0 0 2 
* * * 

 Referencies 

 Enllaces esternos 
 Frans Faase. BF ye Turing completu
 Daniel Cristofani. Dalguna información de Brainfuck
 Clifford Wolf. El UCP de Brainfuck y otros proyeutos rellacionaos con Brainfuck
 Un tutorial de Brainfuck n'inglés y francés.
 Una páxina bien variada pero que dedica una parte a llinguaxes isotéricos...

 Implementaciones 
 Llibrería BrainFuck , nel llinguaxe de programación Pauscal en español.
 Compilador con lex, yacc, Nos llinguaxes de programación C y Python.
 Visual brainfuck, un IDE de brainfuck compatible con Windows 7
 Intérprete de Brainfuck con un depurador integráu (EDI) para Windows 
 Brian Raiter, Muppetlabs. Brainfuck: Un llinguaxe de programación Turing completu d'ocho instrucciones.  Esti sitiu inclúi un Quine de Brainfuck.
 Panu Kalliokoski. L'Archivu de Brainfuck  tien munchos programes de Brainfuck, quines, y implementaciones.
 Brainfucked compilador de Brainfuck pa Windows/DOS.
 Brainfuck.ca Intérpretes y convertidores de Brainfuck autorizáu cola GPL
 Un intérprete y compilador de Brainfuck pa Windows
 Brainfuck.net
 Also Written In Brainfuck (awib) ye un compilador de Brainfuck escritu en Brainfuck para Linux d'i386.
 {{}}

 Acme::Brainfuck Módulu Perl en CPAN (n'inglés)
 Intérprete de Brainfuck fechu en delphi
 Intérprete de Brainfuck en PHP
 Ookie, intérprete de Brainfuck y Ook! escritu en Ruby y con repositorio en Github

 Intérprete de Brainfuck fechu en C

Categoría:Llinguaxes de programación
Categoría:Software de 1993