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 chamarComp”. 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
           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.
  • 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.