Trabalho

 

            A média final desta disciplina será calculada como MF =  (NT + NE)/2 se NT e NE forem maiores do que 6. Caso contrário, a MF será a menor entre as notas NT ou NE. NT é a nota dada ao trabalho escrito. NE é a nota da entrevista. Haverá uma entrevista escrita ao final do semestre sobre o trabalho. A entrevista é individual. O trabalho poderá ser feito em grupos de até duas pessoas.

            O trabalho consiste em construir, em Java, um compilador para a linguagem Easy. O compilador deverá fazer a análise léxica, sintática, semântica e geração de código em C para programas em Easy e emitir alguns avisos. Este compilador deve ter 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 genC 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 produzir como saída um arquivo texto chamado “result.txt”. Se não houve erro ao compilar o programa dado como entrada, o primeiro caráter de “result.txt” deve ser ‘0’ (ASCII 48). Se houve erro de compilação, “result.txt” 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 “result.txt” produzido quando houve e quando não houve erro. É necessário emitir apenas e tão somente um único erro. As mensagens de aviso (veja abaixo) também devem ser colocadas no arquivo “result.txt”. Dentro de alguns meses colocaremos à disposição um programa capaz de testar o seu compilador (com os seus testes);
  • O compilador deve tomar o nome do arquivo a ser compilado como entrada, isto é; para chamá-lo, poderemos digitar
           C:\>java Comp Hello.e
    “Hello.e” é o nome do programa a ser compilado. Se houver erros, estes deverão ser dirigidos à saída padrão.
  • O nome do arquivo de saída é o nome do arquivo de entrada com extensão “.c”. Assim, no exemplo acima, o compilador produziria um arquivo “Hello.c” como saída.
  • Faça todos os testes correspondentes aos possíveis erros léxicos, sintáticos, semânticos e de geração de código. Estes testes podem ser compartilhados entre os grupos sem absolutamente nenhum decréscimo na nota. Para fazer estes testes, tome como exemplo os testes para o compilador de Simples. Sugiro que as pessoas utilizem a lista da disciplina para dividir os testes entre os grupos. Cada grupo faz parte dos testes.
  • O compilador deverá emitir mensagens de aviso quando:
    1. uma
    constante/variável de um módulo não for exportada e nunca for utilizada no módulo que a declara;
    2. uma
    variável local nunca for utilizada;
    3. uma
    variável local nunca for inicializada;
    4. uma
    variável local for inicializada mas nunca utilizada em uma expressão (o que inclui qualquer uso na regra “Factor” da gramática). Naturalmente, emita apenas um dentre os três avisos 2, 3 e 4;
    5.
    um parâmetro for inicializado. Parâmetros nunca deveriam receber valores em atribuição;
    6.
    um parâmetro nunca for utilizado;
    7.
    um procedimento tiver mais do que oito parâmetros;
    8. uma subrotina
    não for exportada e nunca puder ser chamada de dentro do módulo que a declara. Veja o exemplo. Coloque todas as rotinas exportadas de um módulo em uma fila e faça uma busca em largura utilizando esta fila. Cada rotina é um vértice de um grafo  e há uma aresta entre rotinas f e g se houver uma chamada a g dentro de f;

    Não pare a compilação por causa das mensagens de aviso. Lembre-se de que as mensagens de aviso também devem ser colocadas em “result.txt”.


 

Data de entrega dos trabalhos: 21 de Junho.

 

Data da entrevista: ainda a definir. Deverá ser pelo menos uns cinco dias depois de 21 de Junho.

 

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;
  • na impressão do trabalho, utilize a fonte courier;
  • os grupos podem ser de até dois elementos;
  • 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. Leia o Guia de Correção de Trabalhos e o site How to Write Unmaintainable Code;
  • E envie o trabalho para jose#dc.ufscar.br (troque # por @) com o subject ou assunto do email como “RER-LC04”, sem as aspas. Naturalmente, comprima os arquivos em um .zip. Envie os “.class” e os “.java”. No dia da entrevista, leve a listagem em papelela será necessária para parte da entrevista. Cada membro do grupo deverá levar a sua própria listagem, que a entrevista é individual. Ao final, uma listagem por grupo deverá ser entregue ao professor;
  • não serão aceitos trabalhos atrasados. A entrevista terá uma parte geral e uma específica de cada trabalho. Para fazer esta última parte, tenho que ter os compiladores em mãos bem antes da prova. Portanto, a data de entrega dos trabalhos não é prorrogável.