MAB 471 - Compiladores I

Apresentação

Está é a página da disciplina Compiladores I, MAB 471, do professor Fabio Mascarenhas, para o semestre de 2017.1. As aulas da disciplina são às segundas e quartas, das 10 às 12 horas, na sala 29 do bloco F2 do CCMN.

Avaliação

A avaliação será feita por provas e por pequenos trabalhos práticos. A nota das provas corresponderá a 80% da nota final (8 pontos) e a dos trabalhos a 20% (2 pontos). Serão três provas, uma na metade do período e as outras duas no final, e será feita uma média aritmética das duas maiores notas. Não haverá prova final ou segunda chamada. A média final é 5,0.

Datas das Provas

P1: 26/04/2017

P2: 21/06/2017

P3: 28/06/2017

Todas as provas serão feitas no mesmo horário e local das aulas.

Trabalhos Práticos

Os trabalhos práticos correspondem às diferentes fases de um compilador de MiniJava. Os trabalhos podem ser feitos individualmente ou em dupla. As mesmas duplas valerão para todos os quatro trabalhos, exceto em casos de trancamento ou abandono, que serão resolvidos caso a caso.

Analisador Léxico e Sintático

Cada dupla deverá fazer a especificação dos analisadores léxico e sintático para a linguagem MiniJava. Baixe o esqueleto do projeto Eclipse para o trabalho aqui, e leia com atenção os arquivos scanner.jpage e parser.jpage. O arquivo .zip do projeto já inclui cópias do JFlex e do JACC, com um arquivos .bat para executá-los.

A entrega do trabalho deverá ser feita até as 23:59 do dia 05/06/2017, usando esse formulário. Mande apenas um arquivo .zip contendo três arquivos: o arquivo .jflex com a especificação léxica, o arquivo .jacc contendo a especificação sintática, e um arquivo README.txt contendo os nomes dos alunos e qualquer explicação que vocês queira acrescentar. O arquivo .zip deve ter os nomes da dupla no nome do arquivo (por exemplo, se o trabalho foi feito pelo João e pela Maria, o arquivo anexado deve ser “minijava_joao_maria.zip”).

Se tiver qualquer dúvida sobre a especificação da linguagem ou o funcionamento dos analisadores é só perguntar por email ou no nosso grupo.

Lista de Discussão

Temos um grupo no Facebook para perguntas e avisos sobre a matéria. Acessem aqui.

Livros

O livro texto da disciplina é o “Construindo Compiladores”, de Keith D. Cooper e Linda Torczon, da Editora Elsevier. O título de sua versão em inglês é “Engineering a Compiler”. Ele não está disponível nas bibliotecas da UFRJ, então temos um livro texto alternativo, o “Compiladores: princípios e práticas”, de Kenneth C. Louden, que está disponível na biblioteca do CCMN.

Um bom livro que explica a construção de um compilador usando Java é o “Modern Compiler Implementation in Java”, de Appel e Palsberg. É um bastante sintético, mas que também vai além do assunto coberto no curso.

“Crafting a Compiler with C” de Charles Fischer também tem uma boa cobertura dos aspectos práticos da construção de um compilador, e está disponível na biblioteca do CT e do NCE.

Existe farto material online sobre construção de compiladores, incluindo livros completos. Um bem sintético e com ênfase em construção manual de scanners e parsers recursivos é o livro “Compiler Construction” de Niklaus Wirth, disponível em PDF aqui. Outro livro, mais detalhista, é o “Basics of Compiler Design” de Torben Mogensen, disponível nessa página.

Se conhecer algum outro livro e/ou material e quiser saber quanto à sua aplicabilidade venha conversar comigo, poderei ajudá-lo.

Notas de Aula

Publicarei slides e notas de aula nessa seção no decorrer do curso.

06/03 - Slides, compilador de comandos simples

08/03 - Slides, notas de aula executáveis, compilador de comandos simples

13/03 - Slides, compilador de comandos simples

20/03 - Slides, compilador de comandos simples

22/03 - Slides, notas de aula executáveis

27/03 - Slides, mais slides

29/03 - Slides, analisador recursivo para TINY

05/04 - Slides, analisador recursivo para TINY com mensagens de erro, analisador PEG sem scanner para TINY

10/04 - Slides, analisador recursivo preditivo para TINY

12/04 - Slides, analisador LL1 de tabela para TINY

17/04 - Slides, analisador shift-reduce

19/04 - Slides LR(0), Slides SLR

26/04 - Revisão P1, Revisão P1

08/05 - Slides, analisador SLR para TINY

10/05 - Slides, analisador LALR

15/05 - Slides JACC, Slides AST, analisador JACC, AST para TINY

17/05 - Slides, análise de escopo para TINY com variáveis, análise de escopo para TINY com Procedimentos

22/05 - Slides, análise de tipos para TINY

24/05 - Slides, análise de tipos para TINY com parâmetros em procedimentos

Listas de Exercício

Lista 1 - Cobrindo os assuntos da P1

Contato

Podem entrar em contato pelo meu email que responderei assim que possível. Também tenho um horário de atendimento de alunos na minha sala, segundas e quartas de 13 às 14 horas. A sala é a E-2013 do DCC.


Última Atualização: 2017-05-24 01:43