Segundo Trabalho
de LC
Prof. José de Oliveira Guimarães.
Departamento de Computação - UFSCar
Segundo semestre de 2005
Data de entrega por email: 28 de Novembro até o meio-dia.
Grupos de
até duas pessoas.
Data das entrevistas: 28 de Novembro (segunda-feira) e 1 de Dezembro (quinta-feira)
Descrição do trabalho: gere código em C
para Krakatoa. Devem existir métodos “genC” nas classes da ASA Program, Statement, subclasses de
Statement, etc. A geração de código em C a partir de Krakatoa é descrita no artigo “Geração de Código em C para Krakatoa” disponível na página Material de aula. Os exemplos utilizados neste
artigo estão aqui. Antes de ler este artigo, leia o
texto Ponteiros
para Funções.
Entregue uma listagem do trabalho juntamente com a folha de capa. Trabalhos sem
esta capa não serão aceitos. Envie o trabalho zipado
por email para jose@dc.ufscar.br com o subject “LC05”, sem as aspas. No zip,
inclua os .class além dos .java.
Este
compilador deve ter obrigatoriamente as características
descritas abaixo.
- A geração
de código deverá ser feita
em métodos nas classes
da ASA;
- A classe principal
do compilador deve se chamar “Comp”. A classe principal
é aquela com o método
main;
- O compilador
deve tomar o nome do arquivo
a ser compilado como entrada,
isto é; para chamá-lo,
poderemos digitar
C:\>java
–cp c:\krakatoa Comp.Comp ktests\Hello.kra
“ktests\Hello.kra” é o arquivo
a ser compilado. O compilador
está no diretório c:\krakatoa. Deve ser produzido um
arquivo Hello.c no diretório
corrente como
resultado da compilação;
- O compilador
deve produzir como saída,
além do arquivo em
C, um arquivo texto
com nome igual
ao arquivo de entrada. Este
arquivo deve ter extensão
txt e deve ser
criado no diretório corrente.
Assim, ao chamar o seu
compilador usando
java –cp c:\krakatoa Comp.Comp c:\lc\testes\ok-sin01.kra
o compilador deve produzir um
arquivo ok-sin01.txt no
diretório corrente. Se não
houve erro ao compilar
o programa dado como
entrada, o primeiro caráter
do arquivo de saída (ok-sin01.txt
neste exemplo) deve ser ‘0’ (ASCII 48, não
ASCII 0). Se houve erro de compilação, o arquivo de saída
deve conter o número da linha
com erro
seguido por espaço em
branco, “:”, espaço em
branco e a descrição do erro,
tudo isso em
uma única linha. Veja um
exemplo de arquivo de saída
produzido quando houve e quando não
houve erro. É necessário emitir apenas e tão somente um único erro. Se
o erro não for no arquivo fonte, como erro de leitura do arquivo de
entrada ou arquivo de entrada inexistente, utilize -1 como número de linha
(veja Comp.java). Após
esta linha, coloque a linha do arquivo de entrada que causou o erro (veja
o exemplo). Imprima estas
mesmas informações na saída padrão. Note que o compilador fornecido já
emite erros como pedido. É necessário apenas que você não modifique o que
já está funcionando.
- Faça todos
os testes correspondentes
aos possíveis erros
léxicos, sintáticos
e de geração de código.
O seu compilador não deve sinalizar erro em nenhum teste ok-*.kra e deve sinalizar
erro em todos os arquivos er-*.kra. Naturalmente, o compilador fornecido pelo professor
já faz todo este trabalho. Mas você não deve alterar o compilador de tal
forma que erros sejam nele introduzidos.
- Compile todos
os ok-ger*.s, compile com o compilador C o código
em C produzido e execute o executável gerado
pelo compilador C:
C:\>java –cp c:\krakatoa Comp.Comp ..\ktestes\ok-ger01.kra
C:\>bcc ok-ger01.c
C:\>ok-ger01
bcc é o nome de um compilador C. Ao
executar ok-ger01 (última linha acima),
aparecerá uma mensagem do tipo
"The
output should be
: 4 3 2 1"
Verifique então se os números que aparecem a seguir, que foram impressos
por ok-ger01, são realmente 4, 3, 2 e 1.
Observações
gerais sobre o trabalho:
- entregue o trabalho com
a capa. Absolutamente
não serão
aceitos trabalhos sem
que as questões
desta capa estejam respondidas;
- 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. A nota
do trabalho diminui com a quantidade
de trechos copiados. De qualquer forma,
não mais do que
10% do código pode ser copiado, mesmo
com observações na folha
de capa. Estes
10% se referem aos trechos feitos por
você, não
ao total do compilador,
cuja maior
parte foi fornecida na página da disciplina;
- 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
do ano passado;
- na impressão
do trabalho, utilize a fonte courier;
- não serão
aceitos trabalhos atrasados.