Compiladores 2020.1

Links importantes:

Objetivo

Na disciplina de Compiladores, apresentamos as etapas necessárias para transformar código de uma linguagem de alto nível para código de máquina. Através desse processo, empregamos vários conceitos teóricos e práticos da Ciência da Computação, dentre eles a Teoria dos Autômatos, Linguagens Formais, Estruturas de Dados e Otimização. Os alunos também são motivados a raciocinar sobre um projeto de software com várias etapas com interfaces bem definidas e representações intermediárias de dados.

Metodologia

A disciplina consiste de aulas expositivas sobre as etapas da compilação. O foco está na apresentação dos algoritmos para cada fase, analisando as vantagens e desvantagens de cada solução. Além de exercícios teóricos, atividades de implementação são utilizadas para fixar os conceitos. Dada a necessidade de adaptação da disciplina para a modalidade remota, adotamos os seguintes métodos:

O horário dos encontros será definido com a turma.

Avaliação

Os alunos são avaliados por atividades escritas. As atividades são liberadas semanalmente. A frequência da semana será dada pela entrega da atividade. A cada 3 ou 4 atividades, uma nota é definida. Ao total, temos três notas (ou três conjuntos de atividades), valendo de 0 a 10. Um trabalho de implementação extra valerá como uma quarta nota. Ao final, a média será definida pela média aritmética das três maiores notas.

Material

Programa

Data Assunto Comentários Vídeos Atividades Notas
01/07/2020 Introdução a Disciplina Conteúdo, Avaliação, Ambiente no Slack e Bitbucket
06/07/2020 Introdução a Compiladores Fluxograma geral do processo de compilação Atividade 01 1ª Nota: Introdução, Análise Léxica e Gramáticas Livres de Contexto
08/07/2020 Análise Léxica Processo de Varredura, Expressões Regulares (ER), Autômatos e suas Equivalências
13/07/2020 Análise Léxica Analisador Léxico para TINY e a Ferramenta Lex Atividade 02
15/07/2020 Gramáticas Livres de Contexto Análise Sintática, Gramáticas Livres de Contexto, Árvores
20/07/2020 Gramáticas Livres de Contexto Ambigüidade e Sintaxe da Linguagem TINY Compiladores 16/03/2020 Atividade 03
22/07/2020 Análise Sintática Descendente Análise Sintática Descendente Recursiva Compiladores 18/03/2020
27/07/2020 Análise Sintática Descendente Algoritmo LL(1), Remoção de Recursão à Esquerda e Fatoração Compiladores 23/03/2020 Atividade 04 2ª Nota: Análise Sintática
29/07/2020 Análise Sintática Descendente Conjuntos Primeiro e de Sequência Compiladores 25/03/2020
03/08/2020 Análise Sintática Descendente Um analisador sintático para a linguagem TINY e Recuperação de Erros Compiladores 30/03/2020 Atividade 05
05/08/2020 Análise Sintática Ascendente Introdução a Análise Sintática Ascendente, Itens LR(0) e Análise LR(0). Compiladores 01/04/2020
10/08/2020 Análise Sintática Ascendente Análise Sintática SLR(1) Compiladores 06/04/2020 Atividade 06
12/08/2020 Análise Sintática Ascendente Análise LR(1) e LALR(1) Compiladores 08/04/2020
17/08/2020 Análise Sintática Ascendente YACC Parte Um, até depuração. Compiladores 13/04/2020 Atividade 07
19/08/2020 Análise Sintática Ascendente YACC Parte Dois e Tratamento de Erros. Compiladores 15/04/2020
24/08/2020 Análise Semântica Introdução à Análise Semântica. Compiladores 20/04/2020 Atividade 08 3ª Nota: Análise Semântica.
26/08/2020 Análise Semântica Ordenação Topológica do Grafo de Dependências, Atributos herdados e sintetizados. Compiladores 22/04/2020
31/08/2020 Análise Semântica Introdução aos Algoritmos para Cálculo de Atributos Herdados e Sintetizados Compiladores 27/04/2020 Atividade 09
02/09/2020 Análise Semântica Finalizando Algoritmos para Cálculo de Atributos e iniciando Tabela de Símbolos Compiladores 29/04/2020
07/09/2020 Análise Semântica Continuação sobre Tabela de Símbolos, falando de Escopo e Declarações. Compiladores 04/05/2020 Atividade 10
09/09/2020 Análise Semântica Finalizando Tabela de Símbolos usando Regras Semânticas. Compiladores 06/05/2020
14/09/2020 Análise Semântica Tipos de Dados Primitivos e Estruturados na Tabela de Símbolos Compiladores 11/05/2020 Atividade 11
16/09/2020 Análise Semântica Equivalência de Tipos Compiladores 13/05/2020
21/09/2020 Análise Semântica Analisador Semântico da Linguagem TINY. Compiladores 18/05/2020 Atividade 12
23/09/2020 Ambientes de Execução Introdução a Organização da Memória e Ambientes de Execução Estáticos. Compiladores 20/05/2020
28/09/2020 Ambientes de Execução Introdução a Ambientes de Execução em Pilha Compiladores 25/05/2020 Atividade 13 4ª Nota: Ambientes de Execução.
30/09/2020 Ambientes de Execução Exemplo do crescimento da Pilha no Depurador e Procedimentos Aninhados. Compiladores 27/05/2020
05/10/2020 Ambientes de Execução Finalizando Ambientes de Execução. Compiladores 01/06/2020 Atividade 14
07/10/2020
12/10/2020 Atividade 15
14/10/2020
19/10/2020 Atividade 16