Primeiro Trabalho de LC
Prof. José de Oliveira
Guimarães.
UFSCar
Segundo semestre de 2005
Data de entrega: 17 de Outubro. Data
das entrevistas: 17 (segunda) e 20 (quinta)
de Outubro.
Grupos de até duas pessoas.
Descrição do trabalho: a partir
do analisador sintático da linguagem
Krakatoa fornecido neste site, faça um compilador que constrói a ASA,
faz a análise semântica e gera código
em Krakatoa a partir
dela. O código gerado deve ser idêntico ao original a menos
de espaços, ordem
de declaração de variáveis
e métodos e comentários
(que não
precisam aparecer no código
gerado). Observe que
os métodos não
podem ser gerados em
qualquer ordem,
pois um método m pode chamar um método p e, portanto, p deve ser
declarado antes de m. Devem existir método
“genKra” nas classes da ASA Program, Statement, subclasses de Statement, etc.
O seu compilador
deve passar nos
testes semânticos
fornecidos na página Material de Aula. E, naturalmente, em todos os
testes léxicos, sintáticos e de geração de código.
Toda a análise sintática e léxica
já está feita,
exceto para classes e métodos
abstratos, que
você mesmo
deve implementar.
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. NÃO
inclua nenhum outro arquivo. Absolutamente
não envie o trabalho
em outro
formato de compressão
que não
seja ZIP. Veja observações gerais sobre todos os trabalhos
na página Trabalhos. E leia as Observações.
Imprima o trabalho
em fonte courier. Assim
podemos ver ser a
tabulação está correta. Para
quem não
sabe, letras em
courier ocupam sempre o mesmo espaço horizontal,
independente do tamanho
da letra. O mesmo
não ocorre com
outras fontes, onde
o “i”, por exemplo,
ocupa menos espaço
do que o “m” e outras letras mais
gordinhas.
Veja a página
Material de aula
para um manual da linguagem Krakatoa. Para fazer os trabalhos, utilize o Guia de Correção dos Trabalhos
e o site How to Write
Unmaintainable Code.
Este compilador deve ter
obrigatoriamente as características
descritas abaixo.
- O compilador
deve construir uma ASA de forma
semelhante à ensinada na disciplina Construção
de Compiladores. Devem existir métodos
genKra (ou algo parecido) na maioria das classes
da ASA para a geração
de código.
- 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, deveremos digitar algo do
tipo
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.kra no diretório corrente como resultado
da compilação. Note que o analisador sintático
já fornecido cria
o arquivo Hello.kra. Você
só precisa
criar a ASA
e fazer os métodos
genKra;
- O compilador
deve produzir como saída,
além do arquivo em Krakatoa, 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 semânticos.
Compile o código que o seu compilador gera no seu
próprio compilador. Assim você saberá se ele está gerando código
correto:
c:\>java –cp c:\krakatoa Comp.Comp
ktests\Hello.kra
c:\>java –cp c:\krakatoa
Comp.Comp Hello.kra Hello2.kra
c:\>comp Hello.kra
Hello2.kra
O programa comp deve imprimir “Comparação de arquivos
correta”. comp é um program do DOS.
Os testes para
o seu compilador
serão fornecidos pelo
professor o mais
breve possível.
Observações gerais 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. 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;
- não serão
aceitos trabalhos
atrasados. A entrevista terá uma parte geral
e uma específica de cada trabalho.