Archive for June 18th, 2008

Interprete de Brainf*ck

Wednesday, June 18th, 2008

¿Qué es Brainfuck?

Es un lenguaje de programación extremadamente “simple”.

Su gramática sería algo como:

S:=[ + | - | > | < | [ | ] | . | , ]*

es decir, una cadena de caracteres compuesta por los símbolos

+

-

<

>

[

]

Supuestamente cualquier otro carácter en el código se debe ignorar, lo cual quiere decir que todo lo demás son comentarios.

El objetivo fundamental de este lenguaje no fue otro que el de permitir crear el compilador mas pequeño del mundo (originariamente 240 bytes).

BF está basado en la máquina de Turing mejorada (en realidad la máquina de Turing original solo podía escribir 0 ó 1 en la cinta) sin embargo BF tiene una limitación importantísima con respecto a las máquinas de Turing: tiene un tamaño de cinta finito (el límite, aunque no es un estandar, suele estar fijado en 30000 bytes). Dicha máquina de Turing sirve sobre todo para estudiar conceptos matemáticos relacionados con la teoría de la Computabilidad y la teoría de la Complejidad.

Según la tesis de Church-Turing no existe ninguna máquina conceptual capaz de resolver un algoritmo que no resuelva una máquina de Turing.

Normalmente los defensores de la IA fuerte mantienen que el cerebro humano (y según parece ser, el Universo) es reducible a una máquina de Turing.

¿Para que sirve BF?

Programar en este lenguaje en lugar de utilizar uno de más alto nivel (como puede ser por ejemplo el lenguaje ensamblador) sólo puede tener un motivo: llevar al extremo la práctica del onanismo mental y probar el nivel de frikismo.

A continuación: un interprete de Brainfuck que yo programé hace tiempo en forma de applet de java (me apetece un café)