Brainfuck
Esti artículu o seición necesita referencies qu'apaezan nuna publicación acreitada, como revistes especializaes, monografíes, prensa diaria o páxines d'Internet fiables. |
Esti artículu o seición necesita un ameyoramientu no que cinca a la redaición, la gramática o la ortografía. |
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.
Desendolcador(es) | Urban Müller |
---|---|
Estensión de ficheru |
.b .bf |
Versión inicial | 1993 |
Formatu de ficheru de llectura | Brainfuck file (en) |
Formatu de ficheru d'escritura | Brainfuck file (en) |
Tipu | Llinguaxe de programación esotéricu, Turing tarpit (en) y llinguaxe de programación |
Orixe del nome | cerebru y fuck |
Más información | |
Sitiu web | Web oficial |
Etiqueta de Stack Exchange | Stack Exchange |
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 llinguaxe
editarEl 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
editarHai 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]){
|
] |
} |
}
|
Exemplos
editar- 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
editarEnllaces esternos
editar- 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
editar- Llibrería BrainFuck Archiváu 2014-12-08 en Wayback Machine, 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 Archiváu 2005-12-10 en Wayback Machine
- Brian Raiter, Muppetlabs. Brainfuck: Un llinguaxe de programación Turing completu d'ocho instrucciones. Archiváu 2007-09-30 en Wayback Machine Esti sitiu inclúi un Quine de Brainfuck.
- Panu Kalliokoski. L'Archivu de Brainfuck Archiváu 2003-12-06 en Wayback Machine 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.
- {{}}
- Jeffry Johnston. Programes de BF, incluyendo un compilador de Basic y un ensamblador (enllaz rotu disponible n'Internet Archive; ver l'historial y la última versión).
- 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
- Recompilador dinámicu de Brainfuck en JavaScript (enllaz rotu disponible n'Internet Archive; ver l'historial y la última versión).
- Intérprete de Brainfuck fechu en C