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.

Ficha de softwareBrainfuck
Hello World Brainfuck.png
Desendolcador(es) Urban Müller
Estensión de ficheru .b .bf
Versión inicial 1993
Tipu Llinguaxe de programación esotéricu, turing tarpit (en) Traducir y llinguaxe de programación
Orixe del nome cerebru y fuck
Etiqueta de Stack Exchange Stack Exchange
Cambiar los datos en Wikidata

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

Diseñu del llinguaxeEditar

El llinguaxe basar nun modelu d'execución simple que consiste, amás del programa, d'un vector de (siquier) 30.000 bytes inicializados https://ye.m.wikipedia.org/wiki/Brainfuck#/editor/1. 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 InstruccionesEditar

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.

brainfuck C Perl
> ++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]){
] } }

ExemplosEditar

Hola Mundu!
Artículu principal: 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
Artículu principal: 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
Artículu principal: 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 
* * *

ReferenciesEditar

Enllaces esternosEditar

ImplementacionesEditar