Trabalhos
de Construção de Compiladores
Segundo
Semestre de 2001
Prof. José
de Oliveira Guimarães
Universidade
Federal de São Carlos - SP
Nesta
disciplina utilizaremos a linguagem Simples, descrita no artigo “A Linguagem
Simples” disponível na página da disciplina.
O
primeiro trabalho será dividido em duas partes. A parte I é a construção de um
analisador léxico, sintático e geração de código em Java para a linguagem
Simples. A parte II é a construção do
analisador semântico para Simples. A data de entrega é 1 de Março de 2001 (para
as partes I e II). Contudo, até o dia 11 de Fevereiro todos deverão me entregar
a listagem do código que já tiverem feito. Espera-se que todos tenham feito,
até esta data, a parte I do primeiro trabalho. Isto valerá 3 dos 10 pontos do
primeiro trabalho. Desta maneira esperamos que as pessoas não deixem para
começar a fazer o trabalho a uma semana da data de entrega.
O
segundo trabalho é a construção de um gerador de código cuja saída é C. A tradução
de Simples para C é descrita no artigo “Geração e Otimização
de Código Orientado a Objetos”. Este artigo não possui as figuras 1 e 7, que podem ser obtidas aqui.
Esta aula será dada tão logo vocês terminem o primeiro trabalho. A data de
entrega do segundo trabalho será definida adiante. Mas será razoavelmente antes
de terminar o semestre.
A média final será calculada como MF = (T1 +
T2)/2. Observe que todos deverão fazer os dois trabalhos para conseguir passar
na disciplina.
Observações técnicas sobre o trabalho:
- qualquer
parte do trabalho poderá ser copiada de qualquer grupo, desde que este
fato seja escrito na folha de capa do trabalho. Trabalhos com um número
significativo de trechos iguais sem a devida observação na capa receberão
zero. Observe que um zero em um dos dois trabalhos terá um peso
“significativo” na nota final. Infelizmente, tivemos um número enorme de
trabalhos iguais no último semestre, sem causa aparente, já que poucas
pessoas me procuravam para tirar dúvidas do trabalho e ninguém pediu para
adiar algum prazo de entrega. Espero que esta situação não se repita este
semestre;
- o
trabalho deverá produzir um arquivo texto chamado “result.txt” cujo
primeiro caráter deve ser ‘0’
(ASCII 48) ser houve erro de compilação ou ‘1’ (ASCII 49) caso contrário;
- o
trabalho deverá ser feito em Java. O programa deverá tomar o nome do
arquivo a ser compilado como entrada; isto é, ele deverá ser chamado como
C:\> java comp
Hello.s
onde “comp” é o nome do compilador
que você fez e “Hello.s” é o nome do programa a ser compilado. Se houver erros,
estes deverão ser dirigidos à saída padrão;
- a
geração do código deverá ser feita para arquivos com os mesmos nomes das
classes do arquivo de entrada, como Java exige. Assim, se o programa acima produz
classes (em Java) chamadas “class_Hello”
e “class_Program”, o código para estas classes deverá ser colocado
em “class_Hello.java” e
“class_Program.java”;
- naturalmente,
utilize uma árvore de sintaxe abstrata orientada a objetos como foi dado
no primeiro semestre;
- entregue
apenas a listagem em papel do trabalho. Os que fizerem o trabalho com o
CUP/JLex, não deverão entregar o código gerado por estas ferramentas;
- os
grupos podem ser de até três elementos. O professor deverá ser informado,
por e-mail, dos elementos de cada grupo até o dia 20 de Agosto, Segunda
feira;
- Metade
da turma fará o trabalho utilizando o CUP/JLex e metade fará o trabalho
utilizando o método recursivo descendente, sem uso de ferramentas. Serão
distribuídas senhas para decidir quem fará o que. As senhas poderão ser
trocadas; isto é, um grupo que foi sorteado para fazer o trabalho com o
CUP poderá trocar a senha com um grupo que foi sorteado para utilizar o
analisador recursivo descendente;
- entregue
o trabalho com a capa dada na página da disciplina. Absolutamente não
serão aceitos trabalhos sem que as questões desta capa estejam
respondidas;
- se
houver tempo, depois de entregue o trabalho, o professor fará uma entrevista
com um ou todos os elementos do grupo. Se for com um, haverá um sorteio
para definir quem é. Esta entrevista será determinante para a nota do
trabalho;
- faça
o seu trabalho utilizando corretamente os princípios de orientação a
objetos. Procure o professor em dúvida. Não serão aceitos mais alguns
erros cometidos no primeiro semestre. Leia o Guia de Correção de
Trabalhos, que pode ser obtido na página da disciplina;
- não
serão aceitos trabalhos com mais de uma semana de atraso. A princípio,
descontaremos um ponto por cada dia de atraso.