Parte 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 individualmente
usando a ferramenta ANTLR (Java).
O arquivo exemplo.npl apresenta a especificação da linguagem NPL através de um exemplo. Nele aparecem as estruturas válidas da linguagem e as palavras reservadas. O objetivo final, é usar um programa em NPL para gerar um site de notícas 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. Note também que o programa exemplo.npl tem apenas a definição do conteúdo das duas primeiras colunas do jornal.
Cada grupo deve 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á baseada no funcionamento da especificação
básica dada em exemplo.npl (50%,
sendo 1 deles relativo à formatação do texto conforme descrito
no parágrafo abaixo),
na qualidade visual e de organização do site produzido (30%) e na qualidade das extensões propostas (20%).
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 exemplo.npl usa alguns desses códigos de formatação no campo "text" do objeto "headline1".
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 arquitetura x86,
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 pode ser encontrada aqui.
Submissão
A submissão dos arquivos do projeto deverão ser feitos através
do Susy
. Deverá ser enviado um arquivo .tar.gz e seu conteúdo deve
seguir a estrutura passada, que também está no Susy (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.
O compilador deve, através de alguma opção de linha de
comando, poder desabilitar a otimização. Assim, no momento da
apresentação do projeto o grupo compilará os teste com e sem
otimização e mostrará as diferenças no código, comentando os
pontos onde a otimização foi aplicada.
Submissão
A submissão dos arquivos do projeto deverão ser feitos através
do Susy
. Deverá ser enviado um arquivo .tar.gz e seu conteúdo deve
seguir a estrutura passada, que também está no Susy (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!
|