[SP-pm] Boas Vindas ao Ricardo Bittencourt
Eden Cardim
edencardim at gmail.com
Mon Jul 19 17:59:55 PDT 2010
>>>>> "Luis" == Luis Motta Campos <luismottacampos em yahoo.co.uk> writes:
Luis> Nope. Expressões Regulares em Perl são "apenas" gramáticas
Luis> regulares... mas acho que as expressões regulares do Perl se
Luis> tornam turing-complete se você acrescentar a opção '/e'... mas
Luis> eu ainda não me arrisquei a tentar demonstrar isso.
Na verdade, são sim, já que você pode fazer executar código perl até
interpolar código (use re 'eval';) dentro de uma regex perl rodando no
escopo da própria regex, então se perl for turing-complete, regexps
também são. Para demonstrar é só provar que um programa perl que não
contenha uma regex é turing complete. E acho que regexes perl são
turing-complete mesmo sem apelar para perl inline, já que tem match
condicional: (?(condition)yes-pattern|no-pattern) e buffers de
captura. Por exemplo, essa "regex" recursiva (entre aspas porque regexes
não são turing-complete) só casa com palíndromos:
/^((.)(?1)\2|.?)$/
perl -le'print 1 if "foo"=~/^((.)(?1)\2|.?)$/'
perl -le'print 1 if "oo"=~/^((.)(?1)\2|.?)$/'
1
perl -le'print 1 if "ooo"=~/^((.)(?1)\2|.?)$/'
1
perl -le'print 1 if ""=~/^((.)(?1)\2|.?)$/'
1
p.s.: string vazia é um palíndromo por conta da seguinte propriedade:
perl -le'print "".""."" eq ""'
1
(string vazia tem uma string vazia no meio, uma no começo e outra no
fim)
More information about the SaoPaulo-pm
mailing list