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 aluno 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á baseada no funcionamento da especificação básica dada em exemplo.npl, na qualidade visual e de organização do site produzido e na qualidade das extensões propostas.
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".
Parte 2
Implementação da etapa de Análise Semântica
(capítulo 5 do livro do Appel).
- É importante ressaltar que você não precisa alterar nenhum outro pacote além do semant para a implementação desta etapa. Porém não é vetado a alteração de arquivos em outros pacotes.
- O
pacote disponível abaixo já contém uma implementação dos analisadores
léxico e sintático no diretório minijava. 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
Parte 3
O objetivo desta parte é implementar a otimização Dead Code
Elimination no compilador descrito no livro do Appel. Esta
otimização é descrita no livro no capítulo 17, pág 360. Ela
depende do entendimento da Análise de Longevidade, que está
descrita no capítulo 10.
O pacote para a implementação desta parte se encontra aqui:
Pacote de
Implementação da Otimização. Você deve incluir a classe
que está em branco no diretório /src.
Para mostrar claramente sua implementação rodando, comente as
instruções do código que forem removidas com uma string no
formato ";REMOVIDO". O makefile pode ser rodado executando
ou não a otimização, assim fica fácil gerar duas versões do
código assembly para serem comparadas.
|