08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

notas de aula - Jerônimo C. Pellegrini<br />

Uma característica importante de XML é sua estrutura: as tags são definidas recursivamente,<br />

de modo semelhante às listas em Lisp. Será interessante então se a representação<br />

da estrutura XML for parecida <strong>com</strong> S-expressões Lisp. O pedaço de XML acima será<br />

representado da seguinte maneira:<br />

( tag atributo1 "um atributo "<br />

atributo2 " outro atributo "<br />

" texto "<br />

( tag2 ...)<br />

" mais texto ")<br />

Esta representação não é ambígua, e pode ser lida da seguinte maneira:<br />

• A cabeça de uma lista é sempre um símbolo que dá nome a uma tag;<br />

• Logo depois do nome da tag, pode haver um símbolo. Se houver, é o nome de um<br />

atributo – e seu valor (uma string) vem em seguida. Enquanto houver sequências de<br />

símbolo/string, os lemos <strong>com</strong>o pares atributo/valor;<br />

• Após a sequência de atributos, há a lista de elementos internos da tag, que podem<br />

ser strings ou listas:<br />

– Quando um elemento interno for uma string, ele representa texto dentro da<br />

tag;<br />

– Quando um elemento interno for uma lista, ele representa uma outra tag dentro<br />

do texto.<br />

O gerador de XML que construiremos neste Capítulo receberá uma tag XML representada<br />

<strong>com</strong>o S-expressão e escreverá sua tradução para XML na porta saída atual. Desta<br />

forma o gerador não será referencialmente transparente no sentido estrito. A alternativa<br />

seria fazê-lo produzir uma string XML e depois escrever a string em uma porta, mas para<br />

isto usaríamos uma grande quantidade de chamadas a string-append, que aloca uma<br />

nova string cada vez que é usado. Para documentos grandes (ou para grande quantidade<br />

de documentos pequenos) o consumo de memória e tempo de processamento se tornariam<br />

um problema.<br />

Há outras maneiras de S-expressões em XML de que trataremos no Capítulo 7 (por<br />

Versão Preliminar<br />

exemplo, ao invés de receber a S-expressão <strong>com</strong>o parâmetro, poderíamos avaliá-la, e o<br />

efeito colateral seria a saída da tradução da S-expressão na porta de saída).<br />

68<br />

[ 27 de outubro de 2010 at 15:47 ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!