Projetos

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.

Referências Principais

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

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

Programmming Language Pragmatics
Michael L. Scott, Morgan Kaufmann.