por Aceitunas » 2014-11-28 14:55 @663
Para los que no conozcan este 'lenguaje':
http://es.wikipedia.org/wiki/Brainfuck
Using perl Syntax Highlighting
#!/usr/bin/perl
# Intérprete brainfuck v1.0
# Aceitunas
use strict;
my $cadena = "++++++++++[>+++++++>++++++++++>+++++++++++>+++>+<<<<<-]>++.>>+.---.<---.>>++.<+.++++++++.-------.<+++.>+.>+.>.";
# Cadena contiene la línea de código a ejecutar
my @puntero; # puntero a los datos almacenados
my $pospun = 0; # posición del puntero
my $posicion = 0; # posición en el array que contiene las instrucciones
my @datos = split // , $cadena; # datos contiene todas las instrucciones a ejecutar
while ($posicion <= $#datos)
{
Interpretar($datos[$posicion]);
$posicion++;
}
exit;
sub Interpretar
{
if ($_[0] eq '+')
{
$puntero[$pospun]++;
}
elsif ($_[0] eq '-')
{
$puntero[$pospun]--;
}
elsif ($_[0] eq '>')
{
$pospun++;
}
elsif ($_[0] eq '<')
{
$pospun--;
}
elsif ($_[0] eq '.')
{
print chr $puntero[$pospun];
}
elsif ($_[0] eq ',')
{
$puntero[$pospun] = ord <STDIN>;
}
elsif ($_[0] eq '[')
{
my $SumPos; # Para calcular el espacio del bucle
while ($puntero[$pospun] != 0)
{
my $GuardarPos = $posicion; # Guardamos la posición donde comienza el bucle
$SumPos = -1;
while ($datos[$posicion] ne ']')
{
$SumPos++;
$posicion++;
Interpretar($datos[$posicion]);
}
$posicion = $GuardarPos; # recuperamos la posición donde comienza el bucle
}
$posicion += $SumPos;
}
}
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Salida del programa:
Using text Syntax Highlighting
red@red-MS-1034:~/Escritorio$ perl debug.pl
Hola mundo!
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Probado con el mismo ejemplo de la Wikipedia.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.