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

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:
Cada nó da árvore deve ser definido como sendo uma
estrutura contendo os seguintes campos:
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...
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.
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.
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
O rótulo pode ser uma das constantes abaixo, cuja
definição deve estar em seu programa.
Altere os nomes a gosto.
T_PGMM T_BLCK
T_PLUS T_SUBT T_MULT T_DIVD
T_ASSG T_CALL T_IF T_WHLE
T_AND T_OR T_NOT
T_EQ T_NEQ T_LT T_LE T_GT T_GE
T_VARD
T_INT T_ID
OBSERVAÇÕES
ANÁLISE SEMÂNTICA
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
Riverson Rios/maio 2007
