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