[SP-pm] Substituicoes balanceadas

Roberto Maluhy Junior maluhy em gmail.com
Segunda Abril 17 19:26:29 PDT 2006


Olá,

Eu agradeço a atenção e não achei que o problema fosse tão difícil
assim. Vou dar uma procurada no livro citado durante a semana e
conforme tenha idéias ou, mais provavelmente, dúvidas, volto a fazer
contato.

Abraços,
Roberto

On 4/17/06, Luis Motta Campos <monsieur_champs em yahoo.com.br> wrote:
> Roberto Maluhy Junior wrote:
> > Ola Novamente,
> >
> > Estou com alguma, para não dizer muita, dificuldade com uma
> > substituição balanceada e caso vocês possam me ajudar, ficarei muito
> > grato.
> >
> > O problema é o seguinte:
> > Suponha $a = "abc abc \$abc\$ abc \$abc\$\$abc\$ \$abc\{\$abc
> > \{abc\}\$ abc\}\$ abc";
> >
> > Gostaria de detectar, ou melhor, substituir "inicios" e "finais" de
> > $'s por <BEGIN> e <END>, respectivamente, mas com uma condição de
> > hierarquia baseada na presença de chaves, assim, $a ficaria:
> > abc abc <BEGIN>abc<END> abc <BEGIN>abc<END><BEGIN>abc<END>
> > <BEGIN>abc\{<BEGIN>abc \{abc\}<END> abc\}<END> abc
> >
> > Isso quer dizer que os $'s dentro de chaves não têm nada a ver com os
> > que estão fora das chaves, e ainda pode haver múltiplas chaves uma
> > dentro da outra; ou seja, é proibido ocorrer <BEGIN> ... \{  ...
> > <END>.
> >
> > Como faço isso? Não sei nem por onde começar.
>
>   Com expressões regulares, apenas, não faz.
>   Você precisa de um interpretador (parser) orientado ao contexto.
>   Isso não pode ser implementado apenas usando uma linguagem regular
> (e.g.: expressões regulares).
>
>   Aconselho a começar dando uma espiada na teoria de compiladores, para
> implementar sua gramática, e depois postá-la na lista para que a gente
> possa ajudar a torná-la uma Gramática Regular (se isso for possível) e
> ajudar a construir produções boas o bastante para capturar cada Token da
> sua Gramática e construir sua Árvore Sintática.
>
>   Eu recomendo o livro de compiladores do Seti, Aho e Ullman, como a
> fonte de referências definitiva. É bem velhinho e pode ser encontrado
> (em versões em português) em praticamente qualquer biblioteca séria de
> universidade.
> http://www.amazon.com/gp/product/0201100886/104-4860340-6749526?v=glance&n=283155
>
>   Tem, também, como referência rápida, um artigo da Wikipedia:
>   http://en.wikipedia.org/wiki/Compiler_theory
>
>   Os links para outros websites são BEM interessantes.
>
>   Pode interessar também a tradução para pt_BR do artigo da Wikipedia:
>   http://pt.wikipedia.org/wiki/Compiladores
>
>   Claro, está incompleta e precisa de ajustes, mas pode te dar uma luz.
>   Eu vou tentar estabelecer produções suficientes para fazer o parse
> correto do seu problema, mas não garanto resultados imediatos.
>
>   Espero que isso ajude. ;-)
>   Putamplexos!
> --
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>  Luis Motta Campos is Software Engineer, Oracle OCP/DBA, Un*x
>  Sysadmin, Member of {Lisbon,São Paulo,Cascavel,Brasil,London}
>  Perl Mongers and Perl Fanatic Evangelist
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>
>
> _______________________________________________________
> Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz.
> http://br.info.mail.yahoo.com/
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


--
Roberto Maluhy Jr

Casa Editorial Maluhy & Co.
http://www.casamaluhy.com


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