24 may 2011

Tutorial Brainfuc* - I

Introducción.

Brainfuc* o jod* cerebros en español es un lenguaje de programación destinado al uso recreativo y como reto mental, pues está hecho a propósito para ello dada su naturaleza ofuscada.
Fue creado por el suizo Urban Dominik Müller en 1993 con la pretensión de que fuese un lenguaje simple, turing completo y que no requiriese de grandes compiladores.

Se basa en un sistema de ejecución sencillo que consiste en un array de al menos 30.000 bytes inicializados a cero,cada posición del array tiene una extensión de 1 byte para poder tomar cualquier valor ASCII, un puntero sobre ese array que al empezar está apuntando al primer elemento de éste y dos flujos de bytes para la entrada y salida de datos, la extensión de las fuentes es " .b ".


1.- Palabras reservadas:

Solamente dispone de 8 instrucciones reservadas:

Elementos Descripción
> Incrementa el puntero.
< Reduce el puntero.
+ Incrementa el byte apuntado.
- Reduce el byte apuntado.
. Introduce el byte apuntado en la corriente de salida stdout.
, Toma como valor del byte actualmente apuntado, el provisto por la corriente de entrada stdin.
[ Salta a la posición siguiente de donde este "]" que cierra a "[" si el byte actualmente apuntado contiene un valor nulo es decir cero.
] Salta a la posición inmediatamente posterior al "[" correspondiente si el byte actualmente apuntado no es nulo.


2.- Funcionamiento básico:

Se dispone de un array inicializado con ceros, de tamaño ilimitado en teoría aunque a nivel estándar son 30.000 bytes, al principio se supone que no se sabe la posición en la que se encuentra el array pero en la práctica siempre es la primera.

Con la instrucción ">" se avanza el puntero a la siguiente posición del array, se escribe tantas veces como posiciones se desee avanzar y con "<" se hace lo contrarío es decir se retrocede el puntero.
El elemento "+" incrementa en uno el byte apuntado por el puntero y "-" lo decrementa en uno, el punto "." imprime el valor de la posición actual del array en ASCII, la coma "," asigna el valor de la entrada de datos por defecto a la posición del array actualmente apuntado.

Ejemplo de lo visto hasta ahora:

Introducir la palabra "hola" desde la entrada estandar stdin y que aparezca por pantalla. Hay que tener en cuenta que necesitaremos tantas posiciones del array como letras tenga la palabra, en nuestro caso cuatro posiciones (h-o-l-a). Por lo tanto se debe de asignar cada carácter a una posición del array.

Para ello lo primero que vamos a emplear es la coma "," para que asigne a la posición actual del array el valor de la entrada estándar o stdin, puesto que sabemos que estamos en la primera posición del array y éste contiene el valor de 0 es decir se encuentra vacío.
Ahora utilizamos el  punto "." para sacar el valor del byte apuntado actualmente por la salida estándar o stdout (que será el carácter "h" que introduciremos por la entrada estándar o stdin) y a continuación nos movemos a la posición siguiente del array con el signo de mayor que ">" para no sobreescribir el valor que hemos introducido anteriormente, y repedimos el proceso, es decir " ,.> " , la sentencia completa hasta ahora es " ,.>,.> " con lo que ya tenemos dos carácteres introducidos, puesto que necesitamos cuatro repetimos la operación dos veces más.
La sentencia final queda de esta manera:  " ,.>,.>,.>,.  "

Para probarlo podeís usar el intérprete disponible en este blog, para ir click aquí

O también lo podeís probar en este intérprete online de Brainfuc*: Click aquí

Una breve descripción de como funciona:
El código propiamente dicho lo introducis en el cuadro donde pone "Code", la entrada estándar es decir la palabra "hola" va en "Enter an optional stdin-string:" y finalmente para proceder a ejecutarlo hacemos click en el botón "Run". El resultado saldrá en el cuadro "The program outputs:".

Bién, hasta aquí el tutorial por ahora, les dejo un buén IDE (Entorno de Desarrollo Integrado) para Windows y así puedan practicar: http://www.4mhz.de/bfdev.html

Proximamente iré publicando más IDEs, compiladores, intérpretes, herramientas, etc... para programar en este peculiar lenguaje.

P.D. Y para los que no sepan lo que es un array también crearé una entrada.

No hay comentarios:

Publicar un comentario