Primeiro Trabalho de LC

 

 

Data de entrega: 24 de Setembro (Sexta feira), por email.

Data da entrevista: 4 de Outubro (turmas de Segunda) e 7 de Outubro (turmas de Quinta). Entregue uma listagem em papel na data da entrevista, junto com a folha de capa.

Grupos de até duas pessoas. Os membros do grupo poderão ser de turmas diferentes.

 

Descrição do trabalho: a partir do analisador sintático da linguagem Simples fornecido neste site, faça um compilador que constrói a ASA e:

 

  1. gera uma página em HTML a partir do código em Simples. Por exemplo, a partir deste programa deve-se produzir este. As classes, os métodos, as variáveis de instância e as variáveis locais devem ser todas ligadas às suas respectivas definições por links do HTML. Para ver o código fonte do HTML no Netscape, escolha a opção do menu View/Page Source.
                Observe
    que o método m em “x.m()” deve ser ligado ao método m da classe com que x foi declarado. Se x tiver sido declarado como “var x : B”, o método “m” deve ser ligado à definição do método “m” da classe B. Note que B pode herdar de A e esta classe pode definir também um método m.
                Se a
    classe B não definir um método m mas herdá-lo de A, então o m de “x.m()” deve ser ligado ao método m da classe A. Veja os envios de mensagem “a.get_A()”, “b.get_A()”e “c.get_A()” do exemplo.
  2. implemente as conferências semânticas correspondentes aos arquivos de teste
      ok-sem05     class = subclass
      ok-sem06     variavel
    local e de instancia com mesmo nome
      ok-sem10     b.first(0), first
    definido na superclasse
      ok-sem11     metodo
    com mesmo nome que classe
      ok-sem14   
    atribuição a nil
      ok-sem15    aceita self
    onde se espera objeto da superclasse?
      er-sem07     envio de
    mensagem a inteiro: i.set(0)
      er-sem10    
    expressão do if deve ser booleana
      er-sem31     metodo e variavel de instancia
    com nomes iguais
      er-sem32     metodo publico e
    privado com mesmo nome
      er-sem33    
    dois metodos publicos com mesmo nome
      er-sem35    
    método que não deve retornar nada com return
      er-sem38     b = a, B herda de A
      er-sem40    
    objeto de superclasse onde se espera objeto de subclasse
      er-sem41     a = 0, a é variavel da
    classe A
      er-sem43    
    variável de tipo básico não pode receber nil
      er-sem46     super
    sem superclasse
      er-sem47     super.m(), m nao existe
      er-sem53    
    chamada a metodo privado
      er-sem54    
    chamada a metodo privado da superclasse
      er-sem55    
    chamada a método inexistente
    Pode parecer uma lista grande, mas realmente não é porque ao fazer uma conferência você estará praticamente fazendo muitas outras.

 

 

 

Até o dia 24 de Setembro, envie o trabalho zipado por email para jose#dc.ufscar.br (troque # por @) com o subject  “LC04”, sem as aspas. No zip, inclua os .class além dos .java. NÃO inclua nenhum outro arquivo. No dia da entrevista, entregue o trabalho impresso com a folha de capa. Trabalhos sem a folha de capa não serão aceitos. Apenas um membro do grupo deve entregar o trabalho impresso ao professor. Contudo, o outro membro também deverá levar uma cópia do trabalho impresso na entrevista. Algumas questões exigirão consulta ao trabalho impresso.

 

Veja a página Material de aula para um manual da linguagem Simples. 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 genHTML (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, poderemos digitar
           C:\>java Comp Hello.s
    “Hello.s” é o nome do programa a ser compilado. Deve ser produzido um arquivo Hello.htm como resultado da compilação.
  • O compilador deve produzir como saída, além do arquivo em html, 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 Comp c:\lc\
    testes\ok-sin01.s
    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. Dentro de algumas semanas colocaremos à disposição um programa capaz de testar o seu compilador.
  • Faça todos os testes correspondentes aos possíveis erros léxicos, sintáticos e de geração de código. Faça os erros semânticos pedidos. A menos que você altere o compilador dado pelo professor, não se preocupe com os erros léxicos e sintáticos.

 

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 15% do código pode ser copiado, mesmo com observações na folha de capa;
  • na impressão do trabalho, utilize a fonte courier;
  • 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. Para fazer esta última parte, tenho que ter os compiladores em mãos bem antes da prova.