MO403/MC900 - Implementação de Linguagens

Primeiro Semestre de 2009

Turma A

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

25/06/2009
Disponibilizadas as notas da P2, do T2 e médias do curso aqui.

25/06/2009
Disponibilizadas as notas do Trabalho 1 aqui.

17/06/2009
A apresentação da segunda parte do trabalho de implementação foi adiada para dia 30/06, no horário da aula.

02/06/2009
Disponibilizadas as notas da Prova 1 aqui.

21/05/2009
Disponibilizado o pacote para implementação da parte 2 do projeto prático. Veja na seção de links abaixo.

29/04/2009
A entrega do Projeto 1 poderá ser feita até o dia 19/5. Neste mesmo dia, todos os grupos farão uma apresentação de NO MÁXIMO 10 minutos sobre seu trabalho no horário da aula.

13/04/2009
A especificação para servir como guia para elaboração do projeto pode ser encontrada aqui. A especificação da linguagem da Wikipedia pode ser encontrada aqui

13/04/2009
A aula de 14/4 será na sala IC-85.

02/04/2009
A aula de 14/4 será usada para a reunião de definição sobre a especificação da linguagem a ser usada na implementação do Projeto A.

01/04/2009
Foram definidas datas para entrega do projeto de implementação. Veja os itens Calendário e Projetos abaixo.

03 de março de 2009
· Prof. Tomasz Kowaltowsky costuma deixar no xerox do IA uma cópia de seu livro sobre Implementação de linguagens com autorização para que os alunos tirem xerox.
· Bibliografia comentada sobre linguagens formais e autômatos.

03 de março de 2009
· Página da disciplina no ar. Confira critérios de avaliação e calendário.

Aulas

Turma A
· Ter e Qui: 16:00, sala IC-316

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
  • Coleta de Lixo

Calendário

  • 09/04: Entrega, por email, da Especificação da Parte 1 dos projetos. (Feriado)
  • 14/04: Reunião no horário da aula para definição da especificação da linguagem a ser usada na parte 1 do projeto.
  • 21/04: Feriado
  • 05/05: Prova 1
  • 15/05: Entrega da parte 1 do projeto de Implementação.
  • 11/06: Feriado
  • 18/06: Prova 2
  • 30/06: Entrega da parte 2 do Projeto de Implemetação
  • 14/07: Exame (Se necessário, somente para MC900)

Avaliação

Avaliação
A disciplina terá duas provas teóricas e um trabalho prático, onde a média do desempenho será calculada por:
M = 0,40 * P1 + 0,40*P2 + 0,2*T
Para o curso MC-900 (grad): Se M >= 5,0 o aluno aprovou-se. Caso contrário haverá um exame final (EX) e a média final do aluno passará a ser:
MF = (M+EX)/2

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

De acordo com o discutido em sala de aula, haverá duas modalidades de projeto de implementação sendo executadas. Ambas podem ser feitas em grupos de no máximo 2 pessoas. A execução dos projetos foi dividida em 3 fases que correspondem as seguintes parcelas na nota final do trabalho : partes 1 (50%) e 2 (50%).

Projeto A
Parte 1
Especificar uma linguagem na qual seja prático e sintético especificar interfaces/conteúdo visualizável por um navegador web. A partir desta especificação serão implementados análisadores léxico e sintático para essa linguagem, sendo que a partir do parser será gerado, através de ações na gramática, o código (HTML/XML) visualizável em um navegador. A especificação inicial da linguagem é livre para cada grupo exercitar sua criatividade, porém haverá uma reunião para que um núcleo básico da linguagem a ser implementada seja definido em comum a todos os grupos.
Parte 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:

  • Análise de Longevidade (Liveness) (capítulo 10)
  • Seleção de Instruções (capítulo 9). O algoritmo a ser utilizado para Seleção de Instruções é o Maximal Munch (página 180 do livro do Appel). Se ao invés disso a dupla optar por implementar o de Programação Dinâmica (página 182 do livro do Appel), então esta entrega terá sua nota multiplicada por 1.1

Projeto B
Implementação de uma nova funcionalidade no compilador LLVM. A especificação do que vai ser implementado será sugerida pelos grupos interessados e deve ser aprovada pelo professor. A execução deve conter a relação de tarefas a serem realizadas e um cronograma dividindo estas tarefas em 2 partes que seguirão as mesmas datas do Projeto A (ver calendário acima). A especificação deve ser entregue até dia 9/4, por email.

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.