Compiladores
Período letivo 2018.2:
Calendário de final de período:
- 12/03 (3ª) - Aula 27
- 14/03 (5ª) - Aula 28
- 19/03 (3ª) - Aula 29
- 21/03 (5ª) - Prova 02
- 26/03 (3ª) - Aula extra e entrega do projeto
- 28/03 (5ª) - Prova final
Projeto:
Avaliações:
Slides:
Exemplo completo:
Site do livro:
Literatura complementar:
Mini-Triangle:
Outras referências:
- AWK:
- Algol 68:
- Compiladores:
- História das linguagens de programação:
- História dos sistemas operacionais:
- Linguagens de programação:
Aulas ministradas:
Aula 01 - 25/10/2018 - Apresentação e motivação.
Aula 02 - 30/10/2018 - Linguagens de alto e baixo nível. Linguagens fonte e objeto. Tipos de processadores de linguagens. Especificação de linguagens de programação com gramáticas livres de contexto.
Aula 03 - 01/11/2018 - Especificação de linguagens de programação. Método formal e informal. Sintaxe livre de contexto, sintaxe dependente de contexto e semântica. Uso de gramáticas livres de contexto. Exemplo mini-Triangle.
Aula 04 - 06/11/2018 - Processadores de linguanges (cap. 2). Compilação e interpreptação. Diagramas-T. Bootstrapping.
Aula 05 - 08/11/2018 - Fases de compilação. Exemplo completo.
Aula 06 - 13/11/2018 - Otimização independente e dependente de máquina. Front e back-end. Passos de compilação.
Aula 07 - 20/11/2018 - Conceitos e técnicas de análise léxica.
Aula 08 - 22/11/2018 - Implementação de analisadores léxicos.
Aula 09 - 04/12/2018 - Orientação de projeto (análise léxica).
Aula 10 - 06/12/2018 - Análise sintática. Derivações e reduções. Mais à esquerda e mais à direita. Conjunto first_k. LL(k) e LR(k). Análise descendente.
Aula 11 - 11/12/2018 - Análise ascendente. Descendente x Ascendente. Estratégias para verificar a condição LL(k).
Aula 12 - 13/12/2018 - Estratégias para verificar a condição LL(k). follow_k. Casos particulares. Recursão à esquerda.
Aula 13 - 18/12/2018 - Exemplos. Manipulação gramatical. Exercícios.
Aula 14 - 20/12/2018 - Implementação de analisadores sintáticos. Método recursivo descendente.
Aula 15 - 15/01/2019 - Revisão para a prova e orientação de projetos.
Aula 16 - 17/01/2019 - Prova 1.
Aula 17 - 22/01/2019 - Montagem da árvore de sintaxe abstrata.
Aula 18 - 24/01/2019 - Visualização da árvore de sintaxe abstrata. Visitor.
Aula 19 - 29/01/2019 - Análise de contexto, identificação. Blocos monolíticos.
Aula 20 - 31/01/2019 - Análise de contexto, identificação. Blocos planos e aninhados.
Aula 21 - 05/02/2019 - Verificação de tipos. Operadores e assinaturas. Tipos estáticos x dinâmicos, tipos fortes x fracos. Algoritmo para verificação de tipos.
Aula 22 - 07/02/2019 - Exemplo de verificação de tipos. Ambientes de execução, representação de dados (tipos simples).
Aula 23 - 12/02/2019 - Representação de dados (tipos agregados).
Aula 24 - 14/02/2019 - Exemplos e exercícios. Avaliação de expressões.
Aula 25 - 21/02/2019 - Alocação de memória. Alocação estática (para variáveis globais e "static") e automática (para variáveis locais apenas).
Aula 26 - 26/02/2019 - Exemplos. Alocação automática (para variáveis não-locais). Exemplos.
Aula 27 - 12/03/2019 - Sub-rotinas. Passagem de parâmetros e retorno de valor de função. Exemplos.
Aula 28 - 14/03/2019 - Geração de código. Code functions, code templates, exemplos e exercícios.
Aula 29 - 19/03/2019 - Alocação dinâmica de memória.
Aula 30 - 21/03/2019 - Prova 2.
Aula 31 - 26/03/2019 - Implementação de linguagens orientadas à objetos. Conclusões finais.