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:
- 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.
- 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.