[Rio-pm] [Passatempo] Interpretador para BrainFuck

Stanislaw Pusep creaktive em gmail.com
Quinta Dezembro 13 09:40:37 PST 2012


Aureliano, o lexer do brainfuck utilizando given/when ficaria +/- assim:

#!/usr/bin/env perl
use 5.010;
use strict;
use warnings qw(all);

local ($|, $/) = (1, \1);

for my $instr (<DATA>) {
    given ($instr) {
        when ('>') { ... }
        when ('<') { ... }
        when ('+') { ... }
        when ('-') { ... }
        when ('.') { ... }
        when (',') { ... }
        when ('[') { ... }
        when (']') { ... }
        default { next }
    }
}

__DATA__
+++++++++++
>+>>>>++++++++++++++++++++++++++++++++++++++++++++
>++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+>
+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[-
<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<<
-]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]
>[<<+>>[-]]<<<<<<<]>>>>>[+++++++++++++++++++++++++
+++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++
++++++++++++++++++++++++++++++++++++++++++++.[-]<<
<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<<
[-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-]

Lição de casa: preencher os espaços dos '...' para que calcule e imprima
"1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89" (pq "Hello World!" é muito fácil,
rsss)

ABS()



2012/12/12 Aureliano Guedes <guedes_1000 em hotmail.com>

>  Ainda não tinha me aventurado nas novidades do Perl 5.16.
>
> o when eu entendi, mas o given não, alguem poderia me explicar o uso do
> given??
>
> O break ja funciona no 5.16?? se sim, como???
>
> ------------------------------
> From: creaktive em gmail.com
> Date: Wed, 12 Dec 2012 14:06:14 -0200
>
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [Passatempo] Interpretador para BrainFuck
>
> As variáveis @loop e $s não afetam a lógica do seu programa.
> Isso é, a sua implementação das instruções de ciclo condicional, [ e ],
> está incompleta.
> Outra coisa, ao invés de usar if(){}elsif(){}, procure usar given/when,
> nesse caso seria mais apropriado.
> Por fim, o I/O do brainfuck é por caractere, então certifique-se de que o
> buffering de I/O do Perl esteja desligado e que <> retorne 1 caractere de
> cada vez: local ($|, $/) = (1, \1);
>
>  ABS()
>
>
>
> 2012/12/11 Aureliano Guedes <guedes_1000 em hotmail.com>
>
>  Por isso é passatempo, é pra quem tem tempo. hahaha
>
> Valeu
>
> ------------------------------
> From: renato.cron em gmail.com
> Date: Tue, 11 Dec 2012 21:45:03 -0200
>
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [Passatempo] Interpretador para BrainFuck
>
> pow,
>
> se ninguem te ajudar até domingo, até domingo eu do uma olhada! haha #
> semtempo
>
> 2012/12/11 Aureliano Guedes <guedes_1000 em hotmail.com>
>
>  Não so isso, deve ter algo mais.
>
> Mesmo trocando $p-- if ($i eq '>'); por  $p-- if ($i eq '<');.
>
> Os caracteres que saem são estranhos, não sai o que eu queria.
>
> ------------------------------
> From: renato.cron em gmail.com
> Date: Tue, 11 Dec 2012 21:36:03 -0200
>
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [Passatempo] Interpretador para BrainFuck
>
> não são essas linhas aqui?
>
>
>    1.         $p++ if ($i eq '>');
>    2.         $p-- if ($i eq '>');
>
>
> 2012/12/11 Aureliano Guedes <guedes_1000 em hotmail.com>
>
>  ahsuahuhasuahsuah
>
> Da hora mesmo, quando terminar, quem sabe não faço algo do tipo.
>
> ------------------------------
> From: creaktive em gmail.com
> Date: Tue, 11 Dec 2012 21:15:38 -0200
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [Passatempo] Interpretador para BrainFuck
>
>
> Dahora, parabéns :D
> BTW, isso me lembrou de um "dialeto" do brainfuck, o trollscript:
> https://github.com/caius/trollscript
> Isso é um "hello world" em trollscript:
>
> Trooloolooloolooloolooloolooloolollooooolooloolooloolooloolooooolooloolooloolooloolooloolooloooooloolooloooooloooloolooloololllllooooloololoooooololooolooloolooloolooloololoolooolooloololooooooloololooooloololooloolooloolooloolooloolooloolooloolooloololooooolooolooloololooollollollollollolllooollollollollollollollollloooooololooooolooll
> É sério.
>
> ABS()
>
>
>
> 2012/12/11 Aureliano Guedes <guedes_1000 em hotmail.com>
>
>  Ola monges,
>
> Estou desenvolvendo um novo brinquedo, como forma de passatempo mesmo, um
> interpretador para BrainFuck.
>
> Futuramente pretendo desenvolver um compilador.
>
> Se alguem se interessar pelo assunto e puder colaborar e/ou ajudar, o que
> deesenvolvi ainda não esta funcional, e estou tendo algumas dificuldades.
>
> http://pastebin.com/aEppcPKt
>
> Para testarem um hello wolrd em BF:
>
>
> ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
>
>
>
>
>
>
>
>
>
>
>
> Os comandos de brainfuck : http://pt.wikipedia.org/wiki/Brainfuck#Comandos
>
> Aqui tem um pequeno tutorial tambem: http://wiki.portugal-a-programar.pt/dev_geral:linguagens_esoterica:brainfuck
>
>
>
>
>
>
>
>
>
> Aqui tambem:
>
> Basicamente é isso:
>
> http://unauthorizedaccess.files.wordpress.com/2011/02/cmds.jpg?w=610
>
>
>
>
>
>
>
>
>
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron <http://twitter.com/#%21/renato_cron>
>
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron <http://twitter.com/#%21/renato_cron>
>
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20121213/baac52a8/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm