IMHO poderiamos abordar um esquema TDD Eu criaria algo como
my $ret = Parser::parser($code, $stdin, $stdout); $ret deveria retornar sucesso em caso do code ser valido $stdout deveria receber a string "hello world" se o codigo brainfuck para hello world fosse introduzido Usar o Test::More nesse caso seria bem interessante. Ainda mais se for usado o Devel::Cover e analisado se o teste realmente exercitou todo o codigo do parser. os testes poderiam ser ok( Parser::parser("", undef, undef),"um script vazio é um codigo valido"); ok( Parser::parser("comentario", undef, undef),"comentarios são qualquer caracter fora aqueles 8"); para verificar se o stdin ou stdout foram lidos ou escritos, eu usaria o Test::MockObject do chromatic. entretanto pode ficar um pouco complicado o teste, talvez um IO::Handler de teste possa ser mais interessante. 2012/12/13 Stanislaw Pusep <creakt...@gmail.com> > 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_1...@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: creakt...@gmail.com >> Date: Wed, 12 Dec 2012 14:06:14 -0200 >> >> To: rio-pm@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_1...@hotmail.com> >> >> Por isso é passatempo, é pra quem tem tempo. hahaha >> >> Valeu >> >> ------------------------------ >> From: renato.c...@gmail.com >> Date: Tue, 11 Dec 2012 21:45:03 -0200 >> >> To: rio-pm@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_1...@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.c...@gmail.com >> Date: Tue, 11 Dec 2012 21:36:03 -0200 >> >> To: rio-pm@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_1...@hotmail.com> >> >> ahsuahuhasuahsuah >> >> Da hora mesmo, quando terminar, quem sabe não faço algo do tipo. >> >> ------------------------------ >> From: creakt...@gmail.com >> Date: Tue, 11 Dec 2012 21:15:38 -0200 >> To: rio-pm@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_1...@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@pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm >> >> >> >> _______________________________________________ Rio-pm mailing list >> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm >> >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm@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@pm.org http://mail.pm.org/mailman/listinfo/rio-pm >> >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm@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@pm.org http://mail.pm.org/mailman/listinfo/rio-pm >> >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm@pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm >> >> >> >> _______________________________________________ Rio-pm mailing list >> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm >> >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm@pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm >> > > > _______________________________________________ > Rio-pm mailing list > Rio-pm@pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > -- Tiago B. Peczenyj Linux User #405772 http://pacman.blog.br
_______________________________________________ Rio-pm mailing list Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm