A ser entregue no dia 22/jun (NOVA DATA!)

CK 017 A - Terceiro/Quarto Trabalho - 2007.1



No trabalho passado, você criou um analisador sintático para a linguagem Clodobol. Tudo o que ele fazia era informar os erros na entrada, caso houvesse algum. No entanto, quando um programa correto era entregue ao analisador, nenhuma saída era mostrada. Uma grande pena pois poderia-se gerar código para outra linguagem de haute couture, como Dior, Lacroix, Givenchy, Gaultier, Laroche &c.

Neste trabalho, você irá modificar o programa bison, acrescentando ações semânticas que irão construir passo a passo os nós da ÁRVORE SINTÁTICA correspondente ao programa de entrada. Que beleza! A saída do bison, agora, deverá ser uma representação externa dessa estrutura. Tudo no mais alto estilo das melhores maisons.

Por exemplo, para o programa Clodobol abaixo:


fofoca
	Soma dois números
pf.
moda a, b.
desfile
	babado lê os números.
	vem($a).
	vem($b).
	$soma eh $a + $b.
	
	babado imprime a soma.
	vai($soma).
cabou.

o programa deve imprimir uma árvore sintática tal como a mostrada abaixo:

	Programa
	  Declaração de variáveis
	      a
	      b
	    Bloco
	      Chamada de função
		leitura
	        a
	      Chamada de função
		leitura
	        b
	      Atribuição
	        soma
	        +
	          a
	          b
	      Impressão
	        soma
	  Fim do programa

Cada nó da árvore deve ser definido como sendo uma estrutura contendo os seguintes campos:

O rótulo pode ser uma das constantes abaixo, cuja definição deve estar em seu programa. Altere os nomes a gosto.


OBSERVAÇÕES

Se você vai utilizar um algoritmo para inverter listas, este deve ser escrito para a inversão ser feita sem serem criados novos nós. Isto é, a lista original é modificada e o espaço por ela ocupado não é desperdiçado. O algoritmo não pode ser recursivo.

Na impressão da árvore sintática, todas as listas de identificadores, variáveis, comandos etc devem ser mostradas na mesma ordem de aparecimento no programa! Na árvore mostrada acima, por exemplo, veja como primeiro foi mostrado o comando de leitura e só em seguida o comando de atribuição.

Assim como em C, faça distinção entre as letras maiúsculas e minúsculas e PRINCIPALMENTE não esqueça de comentar seu programa fonte!

Teste seu programa fazendo cada produção da gramática de Clodobol ser executada. Em particular, procure compilar exemplos de programa Clodobol de sua autoria.

Finalmente, note como o programa Clodobol mostrado no início tem um erro semântico: o identificador soma não foi definido. Logo, o programa está errado, mas aí já é assunto para o próximo trabalho...

ANÁLISE SEMÂNTICA

Além disso, neste trabalho você deverá fazer a análise semântica do programa. Como todas as variáveis e constantes são do mesmo tipo, racional, nada precisa ser feito aqui. No entanto, é preciso fazer apenas duas checagens:

Informe erros apropriados para cada situação.

ATENÇÃO Note que, mesmo com erros semânticos, o programa ainda está sintaticamente correto. Logo, sua árvore deve ser impressa!

COMO ENTREGAR SEU TRABALHO

Use o sistema uploaDC.

Não esqueça de indicar seu nome e número de matrícula, arquivos de teste e um arquivo explicando como compilar o programa.

Trabalhos atrasados serão penalizados com um ponto por cada dia de atraso. Nenhum trabalho será mais aceito após a devolução dos mesmos pelo professor.


Retorno à página do curso.