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. |
|
| |
| 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) |
| Orixe del nome | cerebru y fuck |
| Más información | |
| Sitiu web | Web oficial |
| Etiqueta de Stack Exchange | Stack Exchange |
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
[editar | editar la fonte]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
[editar | editar la fonte]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]){ |
] | } | } |
Exemplos
[editar | editar la fonte]- 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
[editar | editar la fonte]Enllaces esternos
[editar | editar la fonte]- 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 | editar la fonte]- 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