Befunge

Befunge

Befunge

Befunge es un lenguaje de programación esotérico, funge-oide, reflexivo y basado en pila. Difiere de los lenguajes convencionales en que los programas están dispuestos en una parrilla bidimensional. Las instrucciones "flecha" dirigen el control de flujo hacia arriba, abajo, izquierda o derecha, y los bucles se construyen dirigiendo el control de flujo en círculo.

Contenido

Historia

Befunge lo creó Chris Pressey en 1993 en un intento de diseñar un lenguaje tan difícil de compilar como humanamente posible fuera (observe que la orden p introduce la posibilidad de código mutante). Sin embargo se han escrito varios compiladores. También existen varias extensiones a la especificación original "Befunge-93", incluido Funge-98, que extiende el concepto a un número arbitrario de dimensiones y admite múltiples hebras de ejecución, con varios punteros de instrucción operando simultáneamente en el mismo espacio. Las extensiones y variantes de Befunge se denominan Fungeoides o simplemente Funges.

La especificación Befunge-93 restringe cada programa válido a una parrilla de 80*25 instrucciones (horizontal y vertical, respectivamente). Si la ejecución de un programa excede estos límites, "salta" a un punto correspondiente en el otro lado de la parrilla; así, un programa en Befunge es el equivalente topológico de un toro. Dado que un programa en Befunge-93 sólo puede tener una pila y tiene limitado su espacio de almacenamiento, el lenguaje Befunge-93 no es Turing completo, al contrario que la mayoría de lenguajes de máquina. La especificación posterior Funge-98 proporciona Turing-completitud eliminando las restricciones de tamaño del programa: en lugar de simplemente saltar a un punto opuesto en un límite fijo, el movimiento de un puntero de instrucciones Funge-98 sigue un model denominado "espacio de Lahey" en honor a su creador, Chris Lahey. En este modelo, la parrilla se comporta como un toro de tamaño finito con respecto a estos saltos, pero puede ser extendido de forma indefinida.

Código de ejemplo en Befunge-93

Mostramos la técnica de usar flechas para cambiar el control de flujo en el siguiente programa generador de números aleatorios. Siguiendo las flechas, las instrucciones ? envían el puntero de instrucciones en direcciones cardinales aleatorias hasta que el puntero da con un dígito, introduciéndolo en la pila. Entonces las flechas navegan hasta el . para extraer el dígito de la pila y devolver el puntero al primer aleatorizador direccional. Observe que no hay código @ para terminar este programa, así que produce números aleatorios de 1 a 9 de forma continua.

vv  <      <
    2
    ^  v<
 v1<?>3v4
    ^   ^
>  >?>  ?>5^
    v   v
 v9<?>7v6
    v  v<
    8
.  >  >   ^
^<

Este es un ejemplo del clásico programa "¡Hola mundo!". Primero se introducen en la pila las letras "olleH" como números ASCII. Luego se extraen de la pila en orden LIFO y se muestran como caracteres de texto para dar "Hello". El espacio es el carácter 32 en ASCII, que aquí se construye multiplicando 4 por 8, antes de comenzar la salida de texto. El resto del código muestra de forma similar "World!", seguido del carácter ASCII 10 (un salto de línea).

>              v
v ,,,,,"Hello"<
>48*,          v
v,,,,,,"World!"<
>25*,@

Lista de instrucciones para Befunge-93

0-9 Introduce este número en la pila
+ Suma: Extrae a y b, e introduce a+b
- Resta: Extrae a y b, e introduce b-a
* Multiplicatión: Extrae a y b, e introduce a*b
/ Divisón entera: Extrae a y b, e introduce b/a, redondeado a la baja. Si a es cero, pregunta al usuario qué resultado desea.
% Módulo: Extrae a y b, e introduce el resto de la división entera b/a. Si a es cero, pregunta al usuario qué resultado desea.
! NOT lógico: Extrae un valor. Si es cero, introduce 1; si no, introduce cero.
` Mayor que: Extrae a y b, e introduce 1 si b>a, o cero en caso contrario.
> Comienza a moverse a la derecha
< Comienza a moverse a la izquierda
^ Comienza a moverse hacia arriba
v Comienza a moverse hacia abajo
? Comienza a moverse en una dirección aleatoria
_ Extrae un valor; se mueve a la derecha si valor=0, o a la izquierda si no
Extrae un valor; se mueve hacia abajo si valor=0, o hacia arriba si no
" Empieza el modo cadena: introduce cada carácter ASCII hasta que encuentre el siguiente "
: Duplica el valor en la cima de la pila
\ Intercambia los dos valores en la cima de la pila
$ Extrae un valor de la pila
. Extrae un valor y lo muestra como entero
, Extrae un valor y lo muestra como carácter ASCII
# Trampolín: Omite la siguiente celda
p Una llamada "put" (una manera de almacenar un valor para uso posterior). Extrae y, x y v, y cambia el carácter en la posición (x, y) del programa por el carácter con el valor ASCII v
g Una llamada "get" (una manera de recuperar datos almacenados). Extrae y y x, y luego introduce el valor ASCII del carácter que se encuentra en esa posición en el programa
& Solicita un número al usuario y lo introduce en la pila
~ Solicita al usuario un carácter e introduce su valor ASCII
@ Fin de programa

Véase también

Enlaces externos

Implementaciones

Obtenido de "Befunge"

Wikimedia foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Mira otros diccionarios:

  • Befunge — ist eine esoterische Programmiersprache von Chris Pressey, die ähnlich wie Forth Stack orientiert ist. Die Programme basieren auf einem 2 dimensionalen Schema. Der Quelltext besteht aus ASCII Zeichen in einer 80×25 Zeichen großen Anordnung. Chris …   Deutsch Wikipedia

  • Befunge — is a stack based, reflective, esoteric programming language. It differs from conventional languages in that programs are arranged on a two dimensional grid. Arrow instructions direct the control flow to the left, right, up or down, and loops are… …   Wikipedia

  • Befunge — est un langage de programmation exotique réflexif à pile. Il diffère des langages conventionnels par le fait qu il est arrangé sur une grille à deux dimensions. Des instructions flèche dirigent le flux de contrôle à gauche, à droite, en haut, en… …   Wikipédia en Français

  • Befunge — Befunge  стековый эзотерический язык программирования. Считается двумерным, так как программа на Befunge записывается в таблицу со сшитыми краями (тор), по которой в различных направлениях перемещается интерпретатор, исполняя команды,… …   Википедия

  • Befunge — es un lenguaje de programación esotérico diseñado por Chris Pressey en 1993. La programación resulta puramente visual y el código es una imagen 2d compuesta por caracteres sobre la cual el puntero de ejecución se desplaza en diferentes… …   Enciclopedia Universal

  • Befunge-93 — …   Википедия

  • Esoteric programming language — An esoteric programming language (sometimes shortened to esolang) is a programming language designed as a test of the boundaries of computer programming language design, as a proof of concept, or as a joke. There is usually no intention of the… …   Wikipedia

  • Liste von Hallo-Welt-Programmen/Sonstige — Dies ist eine Liste von Hallo Welt Programmen für grafische Benutzeroberflächen, Web Technologien, exotische Programmiersprachen und Textauszeichnungssprachen. Weitere Beispiele für gebräuchliche Programmiersprachen sind unter Liste von Hallo… …   Deutsch Wikipedia

  • Weird Programming — Esoterische Programmiersprachen sind Programmiersprachen, die nicht für den praktischen Einsatz entwickelt wurden, sondern ungewöhnliche Sprachkonzepte umsetzen. Eine einfache Bedienung ist selten, teilweise werden Sprachen konzipiert, um… …   Deutsch Wikipedia

  • Эзотерические языки программирования — вид языков программирования, не предназначенных для практического применения. Образец компьютерного юмора. Эзотерические языки придумываются для развлечения, часто они пародируют «настоящие» или являются абсурдным воплощением «серьёзных»… …   Википедия

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”