[Cascavel-pm] Quando usar Gramatica e quando usar Regexp? [Was: Artigo - Como Perl Salvou o Projeto Genoma]

Wendel Scardua wendelscardua em gmail.com
Quinta Maio 24 11:48:19 PDT 2007


Essa linha não imprimiu nada...

 perl -e '$str = "aaabbb"; print 42,"\n" if $str =~
/a(?:n(?{$c++}))*b(??{'n' x $c})$/;'

Aliás, não consegui nem entender essa regex aí... ela criaria uma variável
"n" contendo o número de vezes que "a" aparece ?

(olhando melhor...)

ei, cê fez ela bater com "a n^k b n^k" ... tá, quase a mesma coisa, exceto
que esta regexp poderia ser escrita simplesmente como /a(n*)b\1/  .

De qualquer jeito, você tá dependendo de um eval, ou seja, não é uma regexp
"de verdade" - na verdade, backreferences também são trapaças para regexps
teóricas, mas elas não envolvem eval e não aumentam tanto assim a
expressividade das regexps (você continua não podendo fazer "a^n b^n" ).

 Acho até que algum perldoc avisa para não usar essas construções. Lembrei,
perldoc perlre:
       "(?{ code })"
                 WARNING: This extended regular expression feature is
considered highly experimental, and may be changed or deleted
                 without notice.

                 This zero-width assertion evaluates any embedded Perl
code.  It always succeeds, and its "code" is not interpolated.
                 Currently, the rules to determine where the "code" ends are
somewhat convoluted.

        (...)

       "(??{ code })"
                 WARNING: This extended regular expression feature is
considered highly experimental, and may be changed or deleted
                 without notice.  A simplified version of the syntax may be
introduced for commonly used idioms.




[]s
Wendel

On 5/24/07, Nilson Santos Figueiredo Junior <acid06 em gmail.com> wrote:
>
> On 5/24/07, Wendel Scardua <wendelscardua em gmail.com> wrote:
> >  A string "a^n b^n" (que não é regular) não pode ser reconhecida com uma
> > regexp do Perl (a menos de trapaças envolvendo "use re 'eval'").
>
> $str =~ /a(?:n(?{$c++}))*b(??{'n' x $c})$/;
>
> Devem ter outros jeitos melhores ainda.
> Por esse tipo de coisa que regex de Perl é melhor que das outras
> linguagens...
>
> -Nilson Santos F. Jr.


--
"Não ajustar o auto-ajuste" - http://wendel.scardua.net/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070524/62020492/attachment-0001.html 


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