Tip:
Highlight text to annotate it
X
Vamos então fazer isso! Vamos começar a escrever o interpretador jumtos.
Eu vou escrever a primeira parte dele e, neste ***, você vai terminá-lo.
Vamos escrever uma função recursiva, chamada interpret, que vai caminhar sobre
árvores de sintaxe abstrata e descobrir o que elas significam.
Descobrir o que elas significam consiste em chamar a biblioteca gráfica para formatar a página web --
este é o significado de HTML.
A razão pela qual vamos operar sobre árvores, e não sobre uma única árvore,
é, principalmente, pela forma como eu a estou chamando.
Mas lembre-se que HTML pode ser uma coleção de elementos, e não apenas um.
Por exemplo, você poderia escrever uma página web que diz "Hello, Friend"
e ela seria uma lista com 2 elementos.
Então, eu quero me certificar de que estamos preparados para tratar uma lista, ao invés de uma coisa apenas.
Vamos imediatamente dispensar isso, entretanto, considerando cada elemento de uma vez.
Então agora, por exemplo, vamos tratar apenas o "Hello,".
Lembre-se que, para nós, ele seria algo assim:
decidimos representar nossas árvores de sintaxe abstrata como tuplas.
Então eu vou precisar extrair o elemento 0 desta árvore, para ver que tipo de coisa ele é --
então, eu vou extrair nodetype.
No nosso exemplo corrente, é um word_element, mas poderia ser um javascript_element,
um tag_element -- várias possibilidades.
Se for um word_element, eu sei o que fazer:
vou chamar nossa biblioteca gráfica e dizer para imprimir a palavra,
e a palavra que eu quero imprimir será o segundo filho da árvore.
Neste exemplo, seria "Hello,".
Outra possibilidade é que alguém nos passa um tag_element --
algo como isto: algum HTML no meio .
Tivemos todo um trabalho para armazenar essa informação em nosso parser,
então vamos usá-la agora.
O nome da tag é a primeira parte da árvore de sintaxe abstrata --
neste exemplo, é apenas b.
Podem existir alguns argumentos da tag:
para a tag de negrito, não há argumentos, mas para algo como a tag de âncora
podem haver alguns.
Depois vem uma lista de Elementos HTML que temos que interpretar mais tarde --
Strong text! neste exemplo --
e depois há o nome da tag que fecha.
Aqui está o que você deve fazer neste *** --
2 coisas diferentes:
Quero que você verifique que as tags casam e interprete a subárvore.
Se as tags não casam, use graphics.warning para tornar isso claro;
caso contrário, interprete a subárvore. Dica: chame interpret recursivamente.