Terceiro Trabalho de LC

Data de entrega do arquivo zip no Moodle : 6 de dezembro de 2010 às 23h 55min.

Data da entrevista:  7 de dezembro de 2010.

Grupos de até duas pessoas.

            O trabalho consiste na geração de código de Krakatoa para C. Utilize o artigo “Geração de Código em C para Krakatoa”. O código gerado em C deve estar corretamente identado. Pegue a última versão do compilador gcc, que será utilizado para compilar o código gerado em C.

           Os programas em C resultantes da compilação Krakatoa-C deverão ser compilados no gcc como na seguinte linha de comando do DOS:

     gccansiIc:\ArqProg\dev\Include  -o exem.exe exem.c

 O diretório  c:\ArqProg\dev\Include é onde estão os arquivos *.h do gcc.

 

Você já deve ter arquivos test-t2.bat, 30enters.txt e sixnum.txt no diretório “t”. Utilize test-t2 para testar o seu compilador. Mas antes disto, abra este arquivo em um editor de texto e modifique-o em dois pontos:

  1. em “set path=%path%;"c:\ArqProg\dev\bin"”, substitua “c:\ArqProg\dev\bin” pelo caminho correto do compilador gcc;
  2. em todas as linhas “gcc -ansi -Ic:\ArqProg\dev\Include -o OK-GER01.exe OK-GER01.c”, coloque o caminho apropriado para os includes do gcc.

Não modifique absolutamente mais nada no arquivo “test-t2.bat”. Senão eu não conseguirei testar o seu compilador.

Em uma janela do DOS, faça o diretório Krakatoa o diretório corrente e chame test-t2:

         C:\voce\Krakatoa>..\t\test-t2

Será produzido um arquivo z.txt com o resultado dos testes. Confira se este arquivo foi produzido corretamente. Implementações incorretas do comando write de Krakatoa fazem com que este arquivo z.txt fique ilegível para humanos. Em resumo, implemente write exatamente como está descrito no manual da linguagem.

             Coloque no Moodle um arquivo zip contendo o diretório do seu trabalho. Dentro deste diretório deve existir um diretório chamado “bin” com todos os arquivos *.class do seu compilador. O nome do arquivo zip deve ser composto pelos nomes dos integrantes do grupo na ordem alfabética da seguinte forma:
            AlbertoSantosDumont-NicolaTesla.zip

Ao descomprimir este arquivo zip deve ser criado um diretório “AlbertoSantosDumont-NicolaTesla” (muito importante). Veja outras observações na folha de capa. Não se esqueça de colocar a folha de capa junto com o trabalho. NÃO inclua nenhum outro arquivo que não seja *.java, *.class. r.txt (descrito abaixo) e a folha de capa neste arquivo zip.

O arquivo zip, ao ser descomprimido dentro de um diretório C:\t2,  deve criar um diretório com os nomes completos dos integrantes do grupo (algo como um diretório AlbertoSantosDumont-NicolaTesla, o mesmo nome do zip). Dentro deste diretório, o winzip deve criar os diretório AST, Comp e Lexer. Veja o exemplo:

 

 

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;

·         Devem existir duas threads: uma para o analisador léxico e outra para o sintático/semântico/geração de código. O analisador léxico é o típico buffer que fornece dados para outras partes do programa. A implementação deste processamento concorrente não deve trazer maiores problemas;

·         A classe principal do compilador deve se chamar “Comp” e estar dentro do pacote Comp, no diretório 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:\>javacp 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. Repetindo: o arquivo em C deve ser produzido no diretório corrente, não no diretório em que está o arquivo de entrada, Hello.kra.

·         O compilador deve produzir como saída, além do arquivo em linguagem 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
     javacp 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.

·         Todos os arquivos .java devem ter um comentário inicial com o nome dos integrantes do grupo. 

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.