MC911 - Projeto em Compiladores

1o. Semestre de 2015

Turmas A e B

Aulas Atendimento Avaliação Projetos Links Referências Notas
Avisos

30/05
. Notas do Projeto 3 e médias finais disponíveis aqui .

10/06
. Projeto 3: Submissão aberta via Email. Mande todo o pacote "dce-pass-p3" compactado.

30/05
. Notas do Projeto 2 disponíveis aqui .

12/05
. Projeto 3 disponível.

05/05
. Projeto 2: SuSy aberto para Submissão. Leiam atentamente as instruções de submissão no enunciado do SuSy.

22/04
. Notas do Exercicio 2 disponíveis aqui .

08/04
. Notas do Exercicio e do Projeto 1 disponíveis aqui .

08/04
. Exercício sobre o Projeto 2: das 14h00 às 18h00. Link no aqui .

18/03
. Link para Submissão do Projeto 1 . Os alunos que apresentaram hoje devem submeter até hoje as 23:59. Alunos que submeterem atrasado apresentarão na próxima aula.

15/03
. Pacote para Projeto 2 disponível. Maiores informações em breve.

26/02
. Formulario para Preenchimento das duplas
. Resposta do Formulário , alunos sem dupla estão em Verde. .

25/02
. Página da disciplina no ar. Confira critérios de avaliação e calendário.
. Códigos FLEX e BISON visto hoje em sala: teste1 e parser-didatico-sql .

Aulas

Turmas A e B
Qua: 14-18h, salas IC 302 e 303

Professores

Contato
· Professor: Sandro Rigo (sandro AT ic dot unicamp dot br)
· Monitor: Maxiwell Garcia (maxiwell AT ic dot unicamp dot br)
· OBS.: Quando enviar um e-mail favor colocar no subject [MC911], caso contrário você corre sério risco de seu email ser filtrado como spam.

Avaliação

Avaliação
Teremos três projetos a serem elaborados (descrição, data de entrega e pesos abaixo) ao longo do semestre. Cada entrega será composta de uma avaliação presencial e da entrega do pacote com o código fonte desenvolvido. A avaliação de cada etapa será composta por uma demonstração presencial e testes da implementação. A avaliação presencial é obrigatória a todos os alunos. A não participação nesta avaliação implica em nota zero na etapa correspondente. Além disso, existirão exercícios de desenvolvimento aplicados em aula. Esses exercícios deverão ser realizados e entregues durante o período da aula. A média do desempenho na disciplina será calculada por:
M = 0,80 * MP + 0,2 EX.
Onde MP é a média geométrica dos projetos e EX é a média aritmética dos exercícios em sala.
Se M >= 5,0 o aluno aprovou-se. Caso contrário o aluno estará reprovado.
As datas de entregas estão definidas no calendário abaixo. As entregas são aceitas sem penalidades até as 23:59 do dia da entrega. A partir de então, serão aceitas entregas com a penalidade de 5% na nota por dia de atraso. O atraso máximo permitido é de uma semana, isto é, até a aula seguinte do dia de entrega. Não serão aceitos projetos com mais de uma semana de atraso.

Fraudes
Qualquer tentativa de fraude implicará em nota ZERO no projeto ou exercício correspondente.

Calendário

  • 04/03: Exercício sobre Projeto 1
  • 18/03: Entrega e Avaliação presencial do Projeto 1
  • 08/04: Exercício sobre Projeto 2
  • 06/05: Entrega e avaliação presencial do Projeto 2
  • 20/05: Exercício sobre Projeto 3
  • 03/06: Entrega e avaliação presencial do Projeto 3

Projetos

== Projeto 1 ==

Na primeira etapa será implementado um parser que converterá um subconjunto de latex para html.

O cabeçalho do arquivo latex é tudo que está antes do \begin{document} e poderá conter:

  • \documentclass[...]{nomedocumento}: deverá ser ignorado
  • \usepackage[...]{nomepacote}: deverá ser ignorado
  • \title{titulo}: ver sobre o comando \maketitle adiante
  • \author{nomeautor}: deverá ser ignorado

O corpo do documento inicia-se com \begin{document} e encerra-se com \end{document} e poderá conter:

  • textos
  • texto sob o modo matemático
  • comandos

No texto presente no corpo do documento, linhas em branco devem ser consideradas e inseridas no HTML gerado.

O modo matemático será demarcado somente pelo sinal cifrão. Caso queira mostrar o caracter $ ao invés de entrar no modo matemático, será necessário digitar \$. O seu conteúdo deve ser renderizado como o modo matemático do Latex (existem bibliotecas javascript que podem ajudar nesta parte).

Os comandos latex que poderão estar incluídos no arquivo serão:

  • \maketitle: mostra o título descrito pelo \title no cabeçalho (você pode supor que sempre que um \maketitle estiver presente, existe um \title também).
  • \textbf{texto1}: aplica negrito em texto1
  • \textit{texto1}: aplica itálico em texto1
  • \begin{itemize} \item texto1 \item texto2 \end{itemize}: gera uma lista não enumerada com os itens texto1 e texto2 (pode haver encadeamento de lista)
  • \includegraphics{figura1}: mostrar a imagem figura1
  • \cite{ref1}: adiciona o número da referência ref1, que se encontra na seção de 'thebibliography'
  • \begin{thebibliography} \bibitem{ref1} Referencia 1 \bibitem{ref2} Referencia 2. \end{thebibliography}: adiciona as referências bibliográficas; o corpo do documento poderá conter apenas uma seção 'thebibliography'.

O projeto será implementado utilizando a ferramenta Flex e Bison. Note que a especificação do projeto está consideravalmente livre, então use sua criatividade para implementar o proposto.

Veja alguns casos de teste aqui .

== Projeto 2 ==

Este segundo projeto abordará o tópico de geração de representação intermediária.

Descrição
Você deverá implementar uma classe na linguagem Java que recebe a Abstract Syntax Tree do programa e retorna um código em LLVM-IR. O pacote disponibilizado possui um jar (lib/projeto2.jar) contendo todo o código necessário para que a classe Codegen (src/llvm/Codegen.java) seja chamada. Nesta classe há exemplos e comentários que detalham o funcionamento e a implementação do pacote. A parte teórica necessária para a implementação deste laboratório foi vista no curso de MC910, e pode ser revista nos slides da disciplina ou capítulo 7 do Appel (2a edição).

Material
Pacote de apoio: minijava-llvm-v04.tar.bz2 . Sempre que este pacote receber uma atualização será comunicado via grupo e terá um aviso na página. No Makefile possui instruções de como compilar e executar o projeto. Maiores informações em breve.

Documentação das classes:
doc_ast.java : objetos referenciado em Codegen.java.
doc_env.java : classe da Tabela de Simbolos original do compilador.
doc_symbol.java : classes utilizadas pela Tabela de Simbolos Env.

Slides sobre o Projeto 2:
Um_pouco_sobre_llvm .
MiniJava/LLVM -->

Submissão

. Leiam atentamente as instruções de submissão no enunciado do SuSy.

== Projeto 3 ==

O objetivo deste projeto é implementar duas otimizações de Dead Code Elimination (DCE) como passos do compilador LLVM . As duas otimizações serão: DCE com Liveness (Appel, Ed. 2, Pag. 360) e DCE com Def-Use Chain (DCE para SSA do Appel, Ed. 2, Pag 417). O output de ambas otimizações devem ser iguais. A análise de Liveness, necessária na primeira otimização, deve ser desenvolvida pelos alunos.

Material
Pacote de desenvolvimento (LLVM 3.5 e 3.6): dce-pass-p3.tar.bz2 . Leiam o README.

Pacote de testes: dce-tests.tar.bz2 .

Slides sobre o Projeto 3: LLVM Pass .

Submissão
Submissão aberta via Email. Mande todo o pacote "dce-pass-p3" compactado.

Links

Referências Principais

Notas de Aula

Modern Compiler Implementation in Java
Andrew Appel, 2a Edicão

Compiladores : Princípios, Técnicas e Ferramentas
Aho, Sethi & Ullman