MC011 - Laboratório de Compiladores


Primeiro semestre de 2008

Turmas A e B


Aulas Atendimento Avaliação Projetos
Bibliografia Links
Notas

Contatos

Professores:
Turmas A e B:       Sandro Rigo (sandro AT ic dot unicamp dot br)

OBS.:   Quando enviar um e-mail favor colocar no subject "[MC011]", caso contrário você corre sério risco de seu email ser filtrado como spam

Avisos


Data
 Aviso
02/07
As Notas finais do curso de MC011 estão disponíveis! Boas férias!
26/06
As Notas do projeto 2 estão disponíveis! A coluna peso da entrega menor que 100% indica penalidades por atraso.
25/06
Lembrando que hoje é o último dia para entrega do projeto 3. O projeto será aceito até sexta com penalidade de 20% e até segunda com penalidade de 30%.
28/05
Foi liberado um pacote com os arquivos .class dos diretórios reg_alloc e x86 do compilador para ajudar na implementação da parte 3. Esse pacote deve substituir os arquivos .class gerados pela implementação da parte 2 para aqueles que não conseguiram fazê-la funcionar completamente. Baixe o pacote na seção de Projetos
12/05
Alguns alunos enviaram dúvidas sobre como usar a biblioteca de runtime para compilar executáveis. Veja o procedimento abaixo.
12/05
Procedimento para gerar e rodar um executável a partir do assembly gerado pelo seu compilador:
1) javac main/Main.java
2) java main/Main arquivo.java
3) nasm -felf minijava.asm
4) gcc -c runtime/runtime.c
5) gcc runtime.o minijava.o -o executavel
6) executavel
12/05
Notas do Projeto 1 estão disponíveis.
07/05
Especificação do Projeto 3 está disponível. Aula para discussão da especificação no dia 21/5 as 13h, sala 301.
30/04
Nova data de Entrega para o Projeto 2: O projeto 2 poderá ser entregue, sem penalidades, até o dia 14/5. Notem que a data de entrega do projeto 3 NÃO será adiada.
09/04
Novo pacote: O pacote para implementação do projeto 2 está disponível. Ele contém uma implementação do semântico compilada, para aqueles que não desejam usar seu próprio semântico na seqüência do curso.
02/04
Entregas Recebidas: A lista de grupos cadastrados será atualizada com a confirmação do recebimento das submissões. Isto não está automatizado, será atualizado quinta(03), e depois segunda e terça para as entregas com atraso.
02/04
Cuidado! Minijava, conforme especificado no apêndice do livro, não aceita métodos de mesmo nome com assinaturas diferentes. Por isso o teste 1/4 é considerado ERRADO.
02/04
Especificação do Projeto 2:O projeto 2 será apresentado na próxima quarta (9/4) no horário das 13h na sala 301. Uma especificação resumida também pode ser encontrada na seção de projetos nesta página, e mais detalhes estão na especificação descrita nos capítulos 9 e 10 do livro texto.
02/04
Horário das submissões: As entregas são aceitas até hoje as 23:59:59 (GMT -3) com sendo no prazo. O mesmo valerá para sexta e segunda. Horário controlado pela chegada do email em minha caixa postal.
02/04
Teste 1/11: Alguns alunos me procuram com dúvidas nesse teste. Ele está CORRETO.
02/04
Conteúdo Esperado do Relatório: Conforme dito em sala de aula, o que espero do relatório é uma descrição da sua implementação, principalmente dos pontos críticos. Exemplos são: tratamento de herança cíclica, o que você tratou em cada fase da análise (assumindo que você seguiu a recomendação de fazer em duas fases), qualquer coisa que você tenha alterado no pacote fora do analisador semântico e justificativa do motivo da alteração, erros que você não conseguiu resolver e alguma eventual funcionalidade extra que você tenha incluído. Não há necessidade de colocar o código fonte, a menos de pequenos pedaços que ajudem a esclarecer alguma coisa, se necessário. O arquivo pode ser texto puro ou pdf e deve obrigatoriamente ser entregue junto com o pacote para não acarretar penalidades de atraso.
31/03
Regras para entregas de projeto com atraso: Até sexta-feira (4/4) os trabalhos serão corrigidos com penalidade de 20% da nota. Até segunda-feira (7/4) os trabalhos serão corrigidos com penalidade de 30% da nota. Não serão aceitas entregas a partir de 7/4.
25/03
Faltam 7 dias para a entrega do primeiro projeto!!!
25/03
Os testes 35 e 37 (correção da digitação, estava 33)do diretório semant estavam indicando o resultado errado em seus comentários iniciais. O problema foi corrigido hoje.
19/03
Vários alunos estão obtendo 30 erros quando tentam compilar o pacote sem fazer alteração alguma na área do IC-3. Aparentemente você precisa definir o diretório raiz do pacote como classpath para o compilador. Isto pode ser feito com javac -cp . main/Main.java. Mesmo após esse procedimento alguns continuam obtendo 15 warnings que não influenciam no funcionamento do compilador. Este comportamento nâo ocorreu em máquinas fora do IC-3 segundo constatado por alguns alunos. E provável que seja devido a diferentes versões de JDK.
19/03
Para os alunos que ainda estão procurando uma dupla e não conhecem todos os participantes da disciplina. Veja a lista com todos os matriculados
19/03
Todos os grupos, de no máximo 2 componentes, devem ser cadastrados por email ANTES da entrega dia 2/4. Verifique se seu grupo está na lista abaixo!!!
19/03
A lista dos grupos já cadastrados na disciplina está disponível aqui. Indique claramente o numero do seu grupo no relatório da entrega!!!
06/03
Mais um link para ajudar a entender o padrão de visitors, usado pelo Appel no analisador semântico: http://en.wikipedia.org/wiki/Visitor_pattern
06/03
É importante a leitura dos capítulos 4 e 5 para a elaboração do projeto 1. O capítulo 4 tem uma explicação sobre os métodos visitors usados no analisador semântico e sobre a representação intermediária dos programas.
27/02
 Primeira aula, explicação de como funcionará a matéria e apresentação do primeiro projeto
27/02
Os alunos deve se dividir em duplas para a realização do projeto.




Aulas
   Turmas A e B: Quartas: 13:00 - 14:00    Sala: IC-301
   Turma A: Quartas: 14:00 - 16:00           Sala: IC-302 
   Turma B:  Quartas::  16:00 - 18:00        Sala: IC-302
 

Atendimento

Professor:
             Sandro Rigo


Avaliação

 Avaliação e equipes: 
As atividades do curso serão feitas por equipes de 2 alunos. O projeto consistirá em implementar um compilador para a linguagem mini-java, conforme descrita no apêndice A do livro "Modern Compiler Implementation in Java" do Appel.
O compilador será implementado em três etapas (descrição, data de entrega e pesos abaixo), e nota menor do que 3,0 em qualquer uma das etapas coloca automaticamente os alunos da dupla em exame
Na nota de cada etapa será avaliado não só o funcionamento do código, mas também a sua clareza. Além disso, junto de cada entrega deverá ser também fornecido um arquivo contendo uma descrição de como foi feita a implementação, os problemas encontrados e como eles foram solucionados, quais testes funcionaram com sucesso. Quaisquer deficiências da sua implementação devem estar descritas nesse documento.
Cálculo da média parcial:
MP = 0,3 * P1 + 0,35*P2 + 0,35*P3

Qualquer tentativa de fraude na elaboração dos projetos implicará em nota ZERO a todos os envolvidos e o cálculo da média parcial fica como descrito abaixo:
MP = mínimo(MP, 4).
Se MP >= 5,0 o aluno aprovou-se na disciplina. Se MP < 5,0, o aluno estará de Exame final, sendo sua média final MF= (Ex+MP)/2


Projetos

A implementação será dividida em três partes :
  • Projeto 1
    • Entrega : 02/04
    • Peso : 30 %
    • Implementação da etapa de Análise Semântica (capítulo 5 do livro). A entrega deve consistir de um arquivo .tgz contendo o pacote semant de seu compilador mais o relatório.
    • É importante ressaltar que você não precisa alterar nenhum outro pacote além do semant para a implementação desta etapa.
    • O pacote disponível abaixo já contém uma implementação dos analisadores léxico e sintático no diretório minijava, equivalente à implementação feita no semestre passado no curso de MC910. Ele não inclui o arquivo de descrição da gramática. Se você acidentalmente apagar os arquivos .class deste diretório, baixe o pacote novamente.
    • Para compilar o pacote execute javac main/Main.java
    • Para executar o compilador use java main.Main #programa#
    • Pacote de Implementação do Compilador
    • Programas de teste em minijava

  • Projeto 2
    • Entrega : 14/05
    • Peso : 35 %
    • Implementação da Análise de Liveness e Seleção de Instruções (capítulos 9 e 10 do livro)
    • O algoritmo a ser utilizado para Seleção de Instruções é o Maximal Munch (página 180 do livro do Appel). Se ao invés disso a dupla optar por implementar o de Programação Dinâmica (página 182 do livro do Appel), então esta entrega terá sua nota multiplicada por 1.1
    • Pacote de Implementação do Compilador
    • Programas de teste em minijava

  • Projeto 3
    • Entrega : 25/06
    • Peso : 35 %
    • Objetivo: Implementar a otimização de Constant Propagation
    • Para essa otimização será necessário incluir mais uma análise de fluxo de dados no compilador. Seguindo o modelo utilizado para a implementação de Liveness Analysis, criar uma nova classe que implemente a análise chamada de Reaching Definitions. A partir daí, implementar a otimização de Constant Propagation usando essa análise. A descrição de Reaching Definitions e Constant Propagation encontra-se no capítulo 17 do livro texto. Um modelo de como usar chamadas a uma análise de fluxo de dados é a implementação do alocador de registradores na entrega anterior. Na execução do compilador, a chamada para constant propagation deve ser realizada antes de liveness analysis e alocação de registradores, e após a seleção de instruções.
    • O relatório entregue para essa etapa deve mostrar, para pelo menos 3 programas exemplo, o código assembly gerado pelo seu compilador usando e não usando constant propagation, discutindo as melhorias geradas pela aplição desta nova transformação. É importante também incluir a especificação das novas classes adicionadas e onde elas foram adicionadas nos pacotes.
    • O pacote disponível abaixo já contém uma implementação dos diretórios reg_alloc e x86 contendo as partes implementadas no projeto 2.
    • Pacote de Ajuda na Implementação do Projeto 3
  • Exame :
    • Data : 09/07
 





Bibliografia


  • SableCC (usado no projeto do parser) : http://www.sablecc.org

  • Pacote de Implementação do Compilador

  • Programas de teste em minijava