Projeto 1
Especificação dos tokens, da gramática livre de contexto e implementação de um parser para uma linguagem de alto nível chamada "News Publication Language (NPL)". Esta linguagem é usada para geração de código HTML para um site de notícias.
O trabalho deve ser realizado em duplas usando a ferramenta Flex e Bison.
O arquivo sempre_online.npl
(em HTML com syntax highlight: sempre_online.npl.html)
apresenta a especificação da linguagem NPL através de um exemplo. Nele aparecem as estruturas válidas da
linguagem e as palavras reservadas. Aos usuários de VIM, aqui
encontra-se um arquivo de syntax highlight da linguagem NPL.
O objetivo final, é usar uma descrição em NPL para gerar um site de
notícias como este jornal. Note que a formatação usada neste site é
apenas ilustrativa. Cada grupo deve escolher o estilo de formatação que lhe pareça mais adequado,
inclusive aplicando o uso de CSS.
Cada grupo pode propor extensões para a linguagem NPL, visando
torná-la mais poderosa ou flexível em termos de definição
e apresentação do conteúdo do jornal. A nota final do
trabalho será composta de 70% para a implementação correta do parser e o cumprimento total da especificação,
30% para a qualidade visual e de organização do site
produzido, e as extensões como bônus extra na nota.
A especificação da linguagem NPL pode ser encontrada em sempre_online.npl.
Atenção especial às possibilidades de formatação do texto inserido nos campos dos objetos. Essa formatação deve usar o padrão de códigos do wiki da Wikipedia (http://pt.wikipedia.org/wiki/Ajuda:Guia_de_edição/Formatação#Os_c.C3.B3digos_wiki_para_formatar_artigos). O programa sempre_online.npl usa alguns desses códigos de formatação no campo "text".
Submissão
A submissão dos arquivos do projeto deverão ser feitos através do Susy . As Senhas foram enviadas por email, se você não recebeu a sua, entre em contato com o monitor da disciplina.
No susy deverá ser submetido um arquivo compactado (.tar ou .tar.gz) que deverá conter a seguinte estrutura na sua raiz:
- Um diretório chamado raXXXXXX_raYYYYYY, se você está fazendo o projeto em duplas ou raXXXXXX se está fazendo o projeto individualmente. Dentro deste diretório, devem aparecer os seguintes arquivos:
- Um diretório chamado src, onde você deverá colocar todo o conteúdo de código do seu projeto (arquivo com gramática, código fonte, arquivos de bibliotecas, etc.). Atenção: não colocar binários de qualquer tipo (inclusive .class) do seu projeto.
- Um arquivo Makefile que deverá responder aos seguintes comandos:
- 'make compile'. Este comando deverá preparar seu projeto para ser rodado (se precisar compilar ou configurar alguma coisa, coloque isso dentro desse comando). Após a execução desse comando, o seu projeto deverá estar pronto para ser executado.
- 'make run INPUT=<arquivo de entrada> OUTPUT=<arquivo de saída>'. Esse comando deverá rodar seu projeto, lendo o arquivo .npl de entrada e escrevendo a saída no arquivo .html passado.
- Opcionalmente, escreva um arquivo LEIAME.txt. Use esse
arquivo para informar qualquer coisa que achar pertinente sobre
seu laboratório (fez coisas a mais, a menos, precisa instalar
alguma coisa, etc.).
- Opcionalmente, você pode colocar qualquer coisa que achar pertinente dentro de um diretório chamado 'misc'. Neste caso, escreva no arquivo LEIAME.txt o que há dentro desse diretório.
Atenção: O não cumprimento de qualquer requisito de submissão influenciará na nota do grupo!.
Projeto 2
Este segundo projeto abordará o tópico de geração de código.
Teoria
A parte teórica da necessária para a implementação do laboratório foi
vista no curso de MC910, e pode ser revista nos
slides da disciplina ou capítulo 9 do Appel (2a edição).
É importante ressaltar que conhecimentos sobre Árvores de representações
intermediária, também vistos na disciplina MC910 e contidos no
capítulo 7 do Appel (2a edição), são necessários.
Descrição
Você deverá implementar uma classe na linguagem Java que recebe uma
lista de árvores e sobre elas executa um algoritmo de seleção de
instruções (maximal munch, por exemplo) e devolve uma lista com as
instruções referentes a essas árvores. Para mais detalhes sobre os nós
que podem estar nessas árvores, você pode verificar o livro do Appel
(2a edição) na seção 7.1 ou na
documentação das classes .
As instruções deverão ser instruções assembly para a
representação intermediária do compilador LLVM,
e você deverá utilizar as
classes auxiliares para essas instruções . Note que a
arquitetura é diferente da arquitetura utilizada pelo livro do Appel,
portanto a parte da implementação do livro (seção 9.3) não
necessariamente diz respeito ao que deve ser implementado no projeto
(porém pode ajudar a entender melhor o que fazer).
Uma estrutura inicial do projeto será disponibilizada em breve.
Submissão
A submissão dos arquivos do projeto deverão ser feitos através do Susy . Deverá ser enviado um arquio .tar.gz e seu conteúdo deve seguir a estrutura passada (obviamente, você deve alterar o seu RA e de sua dupla ou remover o segundo RA). Se você decidiu separar a implementação em várias classes, altere o Makefile para que ele compile e rode corretamente. Novamente, o não cumprimento de qualquer requisito de submissão influenciará na nota do grupo!
Projeto 3
O objetivo desta parte é implementar a otimização Dead Code
Elimination (DCE) no compilador descrito no livro do Appel. Esta
otimização é descrita no livro no capítulo 17, pág 360.
DCE depende da implementação da DFA chamada Análise de Longevidade, que está
descrita no capítulo 10 do livro.
Esta otimização será implementada como sendo um passo do
compilador LLVM (www.llvm.org). EM breve discutiremos em aula e colocaremos
instruções de como um passo para LLVM deve ser implementado.
Submissão
A submissão dos arquivos do projeto deverão ser feitos através do Susy . Deverá ser enviado um arquio .tar.gz e seu conteúdo deve seguir a estrutura passada (obviamente, você deve alterar o seu RA e de sua dupla ou remover o segundo RA). Se você decidiu separar a implementação em várias classes, altere o Makefile para que ele compile e rode corretamente. Novamente, o não cumprimento de qualquer requisito de submissão influenciará na nota do grupo!
|