Procura no perldoc a função alarm -- Renato Cron
Sent from Samsung Mobile Phone Em 13/12/2012 20:18, "Aureliano Guedes" <guedes_1...@hotmail.com> escreveu: > Bom, estou em duvidas quanto ao que fazer no loop, como indicar que [ > inicia e ] termina o loop. > > ate agora, preencehndo o dever de casa > > #!/usr/bin/env perl > use 5.010; > use strict; > use warnings qw(all); > > local ($|, $/) = (1, \1); > > my $p = 0; > my $lim = 5000; > my @a = (1..$lim); > > for my $instr (<DATA>) { > given ($instr) { > when ('>') {$p++;} > when ('<') {$p--} > when ('+') {$a[$p]++;} > when ('-') {$a[$p]--;} > when ('.') {print chr $a[$p];} > when (',') { > chomp (my $in = <>); > $a[$p] = ord(substr($in,0,1));} > when ('[') { ... } > when (']') { ... } > default { next } > } > } > __DATA__ > +++++++++++ > >+>>>>++++++++++++++++++++++++++++++++++++++++++++ > >++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+> > +<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[- > <-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<< > -]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]] > >[<<+>>[-]]<<<<<<<]>>>>>[+++++++++++++++++++++++++ > +++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++ > ++++++++++++++++++++++++++++++++++++++++++++.[-]<< > <<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<< > [-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] > > So mais uma perguntinha boba: Alguem sabe como colocar um limite de tempo > no STDIN? > > Exemplo, eu tenho : > > my $input = <>; > if ($input == undef){ > ... > } > else{ > ... > } > > Exemplo, input so tem 10 segundo para receber a entrada ou fica indefinido. > Vi algo como: > http://www.perlmonks.org/index.pl?abspart=1;displaytype=displaycode;node_id=282330;part=1 > > Mas o que digito não aparece no monitor na hora que digito. > > ------------------------------ > From: tiago.pecze...@gmail.com > Date: Thu, 13 Dec 2012 15:55:28 -0200 > To: rio-pm@pm.org > Subject: Re: [Rio-pm] [Passatempo] Interpretador para BrainFuck > > 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 > > _______________________________________________ > 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