MO403 - Implementação de Linguagens I

Primeiro Semestre de 2010

Turma A

Aulas Atendimento Avaliação Projetos Links Referências Notas
Avisos

13 de julho de 2010
· As médias e conceitos finais do curso estão disponíveis. Veja o link Notas no menu acima.

24 de maio de 2010
· As notas da P4 e do Trabalho 1 estão disponíveis. Veja o link Notas no menu acima.

10 de maio de 2010
· As notas da P3 estão disponíveis. Veja o link Notas no menu acima.

29 de abril de 2010
· As notas da P2 estão disponíveis. Veja o link Notas no menu acima.

13 de abril de 2010
· As notas da P1 estão disponíveis. Veja o link Notas no menu acima.

12 de abril de 2010
Estou incluindo abaixo as respostas para as dúvidas que recebi até agora sobre o primeiro projeto. Desta maneira todos podem ter acesso caso tenham as mesmas duvidas.
> 1 - O parser deve aceitar o conteúdo da notícia (TITLE, IMAGE, ABSTRACT, DATE, TEXT, AUTHOR, SOURCE) em qualquer ordem ou a ordem é específica?
Qualquer ordem
> 2 a) Qual o tipo de tratamento de erro desejado? Jogar em arquivo ou na tela?
Nao especifiquei detalhadamente este item, mas quanto mais bem feito melhor sera a nota. Identificar falhas sintáticas na declaração das noticias e estrutura é o mínimo esperado.
>b) É necessário informar o token onde ocorreu o erro?
Se conseguir, é interessante.
> 3 - O formato de saída será html ou wiki? Se for html é necessário fazer um segundo compilador para tratar os textos?
O formato de saida é o html do jornal, como o exemplo do site. Formato Wiki somente para a formatação dos campos de texto no arquivo de entrada.
> 4 - Uma notícia pode ser declarada no content e não aparecer na struture? Uma notícia pode ser usada mais de uma vez na struture? Esse tipo de coisa deve ser tratada?
Isso faz parte do tratamento de erro. Por exemplo, essas duas situações que você descreveu não impedem o compilador de gerar um html para o jornal. Então eu escolheria dar mensagens do tipo "warning", que ocorrem quando o compilador avisa do erro mas mesmo assim gera o codigo.
> 5 - Como saber se o título da notícia deve ser um link para a notícia completa e quais os campos a serem mostrados quando clicado? Seriam as notícias que possuem o campo 'text'?
Exato, as noticias que tem o campo text devem ter um link para o seu conteudo completo no titulo. Na pagina principal, o que aparece é o abstract, para o texto completo o usuario deve clicar no titulo. A formatacao e se mais algum dado, como a imagem, vai aparecer fica a criterio dos alunos. Quanto melhor a formatação final melhor a influencia dela na nota tambem.
> 6 - Temos que tratar a formatação WIKI em todos os campos de uma notícia ou apenas nos campos abstract e text ?
A formatacao wiki eh somente para os campos de texto, como vc mencionou.
> 7 - As formatações WIKI básicas que devemos tratar são apenas aquelas que aparecem no exemplo.npl ?
As básicas são as do exemplo. Incluir mais opções influenciará positivamente na nota.

12 de abril de 2010
· As notas de aula atualizadas no site. Veja a seção de Referências abaixo.

24 de março de 2010
· As notas de aula estão disponíveis no site. Veja a seção de Referências abaixo.

22 de março de 2010
· Início das aulas. Site do curso no ar. Confira critérios de avaliação e calendário.

Aulas

Turma A
UFMS - Campo Grande - MS

Atendimento


· Ao final das aulas ou em horario de comum acordo agendado por email.

Contato
· Turmas A: Sandro Rigo (sandro AT ic dot unicamp dot br)
· OBS.: Quando enviar um e-mail favor colocar no subject [MO403], caso contrário você corre sério risco de seu email ser filtrado como spam.

Programa

  • Introdução
  • Análise Léxica
  • Análise Sintática
  • Representação Intermediária
  • Registros de Ativação
  • Seleção de Instruções
  • Análise de Longevidade
  • Alocação de Registradores
  • Análise de Fluxo de Dados e Otimizações
  • Coleta de Lixo

Calendário

  • 22 a 24/03: Aula das 8h as 12h
  • 05/04: Aula das 8h as 12h
  • 06/04: Prova 1 as 8h e Aula das 9h30 as 12h
  • 07/04: Aula das 8h as 12h
  • 19/04: Aula das 8h as 12h e das 14h as 18h
  • 20/04: Prova 2 as 8h e Aula das 9h30 as 12h
  • 03/05: Aula das 8h as 12h
  • 04/05: Prova 3 as 8h e Aula das 9h30 as 12h
  • 05/05: Aula das 8h as 12h
  • 17/05: Apresentação Trabalho 1 e Aula de Lab das 8h as 12h
  • 18/05: Prova 4 as 8h e Aula de Lab das 9h30 as 12h
  • 19/05: Apresentação do Trabalho 2 das 8h as 12h

Avaliação

Avaliação
A disciplina terá quatro provas teóricas e dois trabalhos práticos, onde a média do desempenho será calculada por:
M = 0,85 * ((P1 + P2 + P3 + P4)/4) + 0,15*((T1+T2)/2)
Cada uma das provas será composta de 2 (duas) questões sobre o conteúdo ministrado nas aulas da semana imediatamente anterior e terá a duração de 1 hora.

Conceitos Pós-graduação
Os conceitos finais para os alunos de pós-graduação serão dados por:

  • A: M > 8.5
  • B: 7 < M <= 8.5
  • C: 5 <= M <= 7.0
  • D: M < 5.0

Fraudes
Qualquer ocorrência de fraude nos exames ou nos trabalhos práticos implicará em ZERO na média final a todos os envolvidos.

Projetos

Trabalho 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 ou individualmente. Os grupos ficam livres para escolher qual ferramenta de geração de parser irão utilizar. A sintaxe de definição da gramática para NPL é determinada por cada ferramenta. Veja aqui uma lista de ferramentas existentes. Já tive boas referênicas sobre ANTLR (Java), Bison (C) e PLY (Python).

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

Os grupos devem OBRIGATORIAMENTE se cadastrar no site da disciplina ANTES da submissão dos trabalhos. NÃO serão aceitas submissões de grupos não cadastrados. Cadastre seu grupo aqui.

Apresentações: 05/05, no horário da aula. É obrigatória a presença de todos os componentes do grupo durante a apresentação, sob penalidade de nota zero no trabalho aos ausentes.

Trabalho 2
Uso do pacote do compilador descrito no livro do Appel para implementação de partes do back-end. As partes a serem implementadas serão:


Após a implementação das duas partes descritas acima, o seu compilador deve ser capaz de gerar código assembly Intel x86 montável e executável para os programas de teste fornecidos abaixo.
Instruções para compilação e execução no Linux dos programas de teste usando seu compilador para o Projeto 2:
java main.Main < #arquivo de teste#
nasm -felf minijava.asm
gcc runtime.o minijava.o
./a.out.
Notem que runtime.o é obtido pela compilação da biblioteca de runtime que está no diretório runtime do pacote( gcc -c runtime.c).
Apresentações: 19/05, no horário da aula. É obrigatória a presença de todos os componentes do grupo durante a apresentação, sob penalidade de nota zero no trabalho aos ausentes.

Links


Pacote do Compilador


Programas de Teste

Referências Principais

Notas de Aula

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.

Implementação de Linguagens de Programação
Kowaltowski, Editora Guanabara Dois, 1983.