Intérprete Brainfuck
Publicado: 2014-11-28 14:55 @663
Para los que no conozcan este 'lenguaje':
http://es.wikipedia.org/wiki/Brainfuck
Salida del programa:
Probado con el mismo ejemplo de la Wikipedia.
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!
Hola mundo!
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Probado con el mismo ejemplo de la Wikipedia.