Planeamento
Aulas Teóricas
Apresentação
Objectivos
Gramáticas
Compiladores
Ambientes de desenvolvimento
Funcionamento da disciplina: Avaliação, Projecto, Corpo docente, Horários, Bibliografia
Introdução
Processo de compilação: Análise lexical, Análise sintáctica, Análise semântica, Interpretação, Geração de código, Optimização de código.
Tratamento e recuperação de erros.
Compiladores de compiladores.
Ferramentas de desenvolvimento
Controlo de versões. Controlo de configurações. Compilador de C. Depuração de código. Ficheiros objecto e executáveis. Bibliotecas.
Linguagens Regulares
Linguagens regulares.
Expressão regular. Operadores de expressões regulares. Extensões.
Diagramas de transição. Autómato finito não determinista (AFND). Algoritmo de Thompson. Autómato finito determinista (AFD).
Construção de um AFD a partir de um AFND. Minimizar os estados de um AFD.
Analisador lexical.
Tempo de computação e ocupação de memória.
Análise Lexical
Analisador lexical. Tarefas do analisador lexical.
Lex: formato do ficheiro lex; expressões regulares; tratamento de expressões regulares; funções; variágeis globais; macros predefinidas; acesso a funções de entrada/saída; substituições; ligação ao yacc; extensões do Flex.
Eficiência de processamento.
Gramática livre de contexto
Definição e compilação de uma linguagem.
Gramática como descrição sintáctica.
Notação BNF.
Gramática livre de contexto.
Gramática dependente de contexto.
Derivações.
Árvores sintácticas.
Recursividade e ambiguidade.
Prioridade e associatividade.
Análise sintáctiva descendente
Conjuntos FIRST, FOLLOW, LOOKAHEAD.
Gramáticas LL(1).
Eliminação de produções não atingíveis. Factorização à esquerda. Substituição de singularidades. Substituição de cantos à esquerda. Eliminação de recursividade à esquerda.
Autómatos de pilha. Construção da tabela de análise. Análise preditiva por tabela.
Gramáticas atributivas
Gramáticas atributivas. Avaliação dirigida pela sintaxe. Grafos de dependências. Eliminação de atributos herdados. Esquemas de avaliação de atributos. Atributos na eliminação da recusividade à esquerda.
Yacc
Yacc:
Formato do ficheiro. Elementos lexicais. Prioridade e associatividade. Acções semânticas. Ambiente do analisador. Tratamento de erros. Depuração gramatical. Conflitos na gramática LALR(1).
Análise ascendente
Acções de um analisador ascendente: exemplo.
Autómato não determinista LR(0), SLR(1) e LALR(1).
Transporte dos LOOKAHEAD no fecho-e do LALR(1).
Tabela LR(0), SLR(1) e LARL(1).
Utilização determinista de gramáticas ambíguas.
Compactação de tabelas LR.
Compactação por propagação de reduções.
Analisadores ascendentes LR.
Semântica
Semântica estática:
Árvore sintáctiva abstracta; constução da árvore sintáctiva abstracta; utilização de árvore sintáctica abstracta; manipulação de nomes; registo de alcance e tabela de símbolos.
Análise Semântica:
Tipos de dados; verificações estáticas; árvores e registos de activação; reserva de memória.
Síntese
Síntese.
Interpretação: linha a linha; dirigida pela sintaxe; dirigida pela árvore sintáctica; por máquina virtual e threading.
Geração de código
Notação postfixada: Postfix.
Postfix: Processador imaginário SL0; Tradução dirigida pela sintaxe; Tradução dirigida por árvore sintáctica.
Directivas de assembler.
Questões práticas.
Guia de geração de código: labels; qualificadores; variáveis; expressões; instruções condicionais; ciclos; funções e procedimentos.
Optimização
Optimização.
Níveis de optimização: optimização pelo utilizador; independente da máquina; dependente da máquina.
Optimização
Optimização.
Níveis de optimização: optimização pelo utilizador; independente da máquina; dependente da máquina.
Geração de código final
Geração de código.
Arquitecturas de computadores: Load-store machines; accumulator machines; stack machines; memory machines.
Exemplo.
Register spilling.
Modos de endereçamento.
Custo das instruções.
Blocos básicos.