MAB 471 - Compiladores I

Apresentação

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

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: 18/04/2018

P2: 06/06/2018

P3: 11/06/2018

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 23/05/2018, 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 queiram 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.

Analisador de Tipos

Cada dupla deverá terminar a implementação da análise de tipos para a linguagem MiniJava. Baixe o esqueleto do projeto Eclipse para o trabalho aqui, e leia com atenção o arquivo minijava.jpage.

A entrega do trabalho deverá ser feita até as 23:59 do dia 13/06/2018, uma quarta-feira, por esse formulário. Mande apenas um arquivo .zip contendo dois arquivos: o arquivo TypeVisitor.java com o analisador de tipos, e um arquivo README.txt contendo os nomes dos alunos e qualquer explicação que vocês queiram 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 do analisador de tipos é 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.

14/03 - Introdução, Análise Léxica, compilador de comandos simples, notas de aula executáveis

19/03 - Análise Léxica, Autômatos, compilador de comandos simples com expressões regulares, compilador de comandos simples com DFA

21/03 - JFlex, compilador de comandos simples com JFlex

26/03 - Gramáticas, notas de aula executáveis

28/03 - Sintaxe, Análise Recursiva, analisador recursivo para TINY

02/04 - Análise Recursiva, Análise Preditiva, analisador PEG para TINY, analisador preditivo para TINY

04/04 - Análise LL(1), analisador LL(1) para TINY

09/04 - Análise Ascendente, analisador shift-reduce

11/04 - Análise SLR

16/04 - Revisão P1, projeto Eclipse

25/04 - Tabelas ACTION e GOTO, analisador SLR para TINY, analisador LALR para TINY

02/05 - JACC, Árvores Sintáticas Abstratas, analisador JACC para TINY

07/05 - Análise Semântica, análise de escopo para TINY, análise de escopo para TINY com procedimentos

09/05 - Análise de Tipos - expressões, comandos e procedimentos, análise de tipos para TINY, análise de tipos para TINY com procedimentos

14/05 - Análise de Tipos - subtipagem e classes, Ambiente de execução, análise de tipos para TINY com classes

16/05 - Ambiente de execução - parte 2, Geração de Código - comandos e expressões, geração de código para TINY

21/05 - Geração de Código - procedimentos, geração de código para TINY

23/05 - Geração de Código - objetos, geração de código para TINY

04/06 - TINY com for (revisão da P2)

Listas de Exercício

Lista 1 - Cobrindo os assuntos da P1

Lista 2 - Cobrindo os assuntos da P2

Contato

Podem entrar em contato pelo meu email que responderei assim que possível, ou deixe uma mensagem em nosso grupo de discussão.


Última Atualização: 2018-06-05 18:03