MAB 471 - Compiladores I

Apresentação

Está é a página da disciplina Compiladores I, MAB 471, do professor Fabio Mascarenhas, para o semestre de 2015.2. 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: 14/12/2015

P2: 02/03/2016

P3: 09/03/2016

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

Cada dupla deverá fazer a especificação de um analisador léxico para a linguagem MiniJava. Baixe o esqueleto do projeto Eclipse para o trabalho aqui, e leia com atenção o arquivo minijava.jpage. O arquivo .zip do projeto já inclui uma cópia do JFlex, com um arquivo .bat para executá-lo.

A entrega do trabalho deverá ser feita até as 23:59 do dia 20/11/2015, usando esse formulário. Mande apenas o arquivo .jflex como anexo. Inclua 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.jflex”).

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

Analisador Sintático

Cada dupla deverá completar a especificação de um analisador sintático para a linguagem MiniJava. Baixe o esqueleto do projeto Eclipse para o trabalho aqui, e leia com atenção o arquivo minijava.jpage. O arquivo .zip do projeto já inclui uma cópia do JACC, com um arquivo .bat para executá-lo.

A entrega do trabalho deverá ser feita até as 23:59 do dia 03/02/2016, usando esse formulário. Mande apenas o arquivo .jacc como anexo. Inclua 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.jacc”).

Se tiver qualquer dúvida sobre a especificação da linguagem ou o funcionamento do analisador sintático é 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é o dia 11/03/2015, uma sexta-feira, esse formulário. Mande apenas um arquivo .zip com os arquivos .java que você modificou ou criou. Inclua os nomes da dupla no assunto do email e 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 “Compiladores: princípios e práticas”, de Kenneth C. Louden. Ele está disponível na biblioteca do CCMN.

Um excelente livro para quem quiser se aprofundar mais sobre o tema é a segunda edição do “Engineering a Compiler”, de Keith D. Cooper e Linda Torczon. Infelizmente ele não está disponível em nenhuma das bibliotecas da UFRJ. Há uma edição em português com o título “Construindo Compiladores”, mas ainda não tive acesso a ela para verificar a qualidade da tradução.

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/10 - Slides, compilador de comandos simples

19/10 - Slides, notas de aula executáveis, compilador de comandos simples

21/10 - Slides

04/11 - Slides, compilador de comandos simples

09/11 - Slides

16/11 - Slides - Gramáticas, Slides - Especificando Sintaxe, notas de aula executáveis

18/11 - Slides, analisador de TINY

23/11 - Slides, analisador de TINY

25/11 - Slides Análise Preditiva, Slides LL(1), analisador de TINY

30/11 - Slides, analisador de TINY

02/12 - Slides, notas de aula executáveis

09/12 - Slides, notas de aula executáveis

04/01 - Slides

06/01 - Slides SLR, Slides Tabela Action/Goto

11/01 - Slides Tabela Action/Goto, Slides JACC, analisador de TINY SLR, analisador de TINY JACC, notas de aula executáveis

13/01 - Slides, AST para TINY

18/01 - Slides, análise de escopo para TINY com variáveis, análise de escopo para TINY com procedimentos

25/01 - Slides, análise de tipos para TINY com variáveis

27/01 - Slides, análise de tipos para TINY com casts int de para real, análise de tipos para TINY com procedimentos

01/02 - Slides análise de tipos, Slides ambiente de execução

03/02 - Slides ambiente de execução, Slides máquina de pilha

15/02 - Slides, gerador de código para TINY com procedimentos

17/02 - Slides, gerador de código para TINY com procedimentos

22/02 - Slides, TINY com registros

24/02 - Slides, TINY com classes

29/12 - Notas de aula

Listas de Exercício

Lista 1 - Cobrindo os assuntos da P1

Lista 2 - Cobrindo os assuntos da P2

Provas

Primeira Prova e gabarito

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 15 às 16 horas. A sala é a E-2013 do DCC.


Última Atualização: 2016-03-01 11:43