Compiladores
ATENÇÃO - Calendário de final de semestre:
- Prova 2: 07/12, segunda-feira, 14:00hs
- Entrega do trabalho: 07/12, 2ª feira, 14:00hs
- Exame final: 11/12, 6ª feira, 17:00hs
Período letivo 2009.2:
Projeto:
Avaliações:
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:
Aula 01 - 04/08
- Motivação
- Linguagens de alto e baixo-nível
- Linguagens fonte e objeto
- Compilação e interpretação
- Tipos de processadores
- Métodos para especificação de linguagens
Aula 02 - 06/08
- Processadores de linguagens
- Diagramas-T
- Representação de processos
Aulas 03 - 11/08
- Compilador portátil
- Bootstrapping
- Desenvolvimento incremental de linguagens
Aula 04 - 13/08
- Especificação de linguagens
- Revisão de gramáticas livres de contexto
- Sintaxe livre de contexto da linguagem mini-Triangle
Aula 05 - 18/08
- Sintaxe livre de contexto x sintaxe dependente de contexto
- Sintaxe dependente de contexto da linguagem mini-Triangle
- Semântica da linguagem mini-Triangle
- Fases de compilação
- Front-end e back-end
Aula 06 - 20/08
- Exemplo em mini-Triangle: programa-fonte, AST, AST decorada e programa-objeto
- Passos de compilação
- Um passo e vários passos: vantagens e desvantagens
Aula 07 - 25/08
- Estrutura léxica
- Símbolos úteis e inúteis
- Tokens, tipo e valor
- Alfabeto1 -> linguagem1 = alfabeto2 -> linguagem2
- Expressões regulares, BNF e EBNF
Aula 08 - 27/08
- Substituição de não-terminais
- Fatoração à esquerda
- Eliminação de recursão à esquerda
- Starter
- Reduções e derivações
- Análise sintática descendente e ascendente
Aula 09 - 01/09
- Gramáticas e linguagens LL(k) e LR(k)
- Definição de gramática LL(1)
- Gamáticas LL(1) sem regras vazias
- Gramáticas LL(1) com regras vazias
Aula 10 - 03/09
- Exemplos e exercícios
- Gramática léxica
- Gramática sintática
Aula 11 - 15/09
- Método recursivo descendente
- Aplicação do método recursivo descendente à construção de analisadores sintáticos
Aula 12 - 17/09
- Aplicação do método recursivo descendente à construção de analisadores léxicos
- Aspectos de implementação:
- class Token;
- class Parser, parseX(), accept(), acceptIt(), currentToken;
- class Scanner, scan(), take(), takeIt(), currentChar;
- etc.
Aula 13 - 22/09
- Desenvolvimento do projeto e esclarecimento de dúvidas
Aula 14 - 24/09
- Montagem da AST
- Análise de contexto: identificação
- Tabela de identificação: atributos e métodos
- Linguagens com estrutura de bloco monolítica
Aula 15 - 01/10
Aula 16 - 06/10
- Linguagens com estrutura de blocos planos
- Linguagens com estrutura de blocos aninhados
- Escopo estático x escopo dinâmico
Aula 17 - 08/10
- Verificação de tipos
- Tipo estático x tipo dinâmico
- Implementação de analisadores de contexto
- Padrão de projeto Visitor
Aula 18 - 13/10
- Representação de dados
- Tipos simples
- Tipos agregados heterogêneos
Aula 19 - 15/10
- Tipos agregados homogêneos
- Verificação de índices
- Origem virtual
- Múltiplas dimensões
Aula 20 - 27/10
- Exemplos de representação de dados
- Avaliação de expressões em máquinas de registradores
- Avaliação de expressões em máquinas de pilha
- Instruções LOAD, LOADL, STORE e CALL
Aula 21 - 29/10
- Alocação de memória - estática
- Alocação de memória - automática
- Estrutura do stack-frame (SB, LB, ST, L1, L2, ..., LD, LE, ER)
Aula 22 -03/11
- Passagem de parâmetros
- Retorno de valor de função
- Exemplo completo
Aula 23 - 05/11
- Instruções CALL, RETURN, LOADA, LOADI, STOREI, PUSH e POP
- Passagem de parâmetros por endereço x por valor
- Exemplo completo
Aula 24 - 10/11
- Cálculo dos registradores de acesso às variáveis e do link estático
- Funções de código
- Padrões de código
- Exemplos de padrões de código
- Instruções JUMP, JUMPIF
Aula 25 - 12/11
- Exemplos de aplicação de funções e padrões de código
- Implementação dos métodos de geração de código
Aula 26 - 17/11
- Padrão de código para declaração de procedimentos e funções, comandos for e switch;
- Organização da memória, pilha e heap.
Aula 27 - 19/11
- Revisão Visitor (slides)
- Exemplo funcional completo com análise sintática, impressão da árvore de sintaxe, análise de contexto e geração de código (códigos fonte e objeto).
Aula 28 - 24/11
Aula 29 - 26/11
- Conclusões:
- Ciclo de vida de linguagens de programação
- Detecção e recuperação de erros
- Eficiência da execução
- Interpretadores
- Geradores de compiladores
Aula 30 - 07/12
Prova final - 11/12