Compiladores - Programa

  1. Introdução: Avaliação: um grande trabalho (implementação de um compilador simples para uma linguagem simples) feito em partes, com notas para as várias partes. Material, bibliografia. Conceitos básicos - compilação versus interpretação; fases de um compilador típico; "front end" e "back end"; representação intermediária (IR).
  2. Análise Léxica. Estrutura léxica "convencional"; o conceito de token; conteúdo sintático e conteúdo semântico; estruturas léxicas não convencionais;
  3. Especificação da estrutura léxica: expressões regulares; conceitos e notação básica para expressões regulares; exemplos (identificadores, comentários, constantes numéricas, etc.);
  4. A ferramenta Lex.
  5. Introdução a Análise Sintática. Gramáticas Livres de Contexto; BNF; árvores de derivação;
  6. Ambiguidade e não-determinísmo em gramáticas.
  7. Construindo a árvore de derivação: o método LL.
  8. Construindo a árvore de derivação: o método LR.
  9. A ferramenta Yacc.
  10. Construindo analisadores léxicos e sintáticos a mão; o método descendente-recursivo; expressões aritméticas.
  11. Ações semânticas; Árvores de Sintaxe Abstrata.
  12. Tabelas de Símbolos e ASTs costuradas.
  13. Tipagem. Tipagem bottom-up; overloading e inferência de tipos.
  14. Código Intermediário: expressões simples
  15. Código Intermediário: estruturas de controle (if, while, switch)
  16. Código Intermediário: expressões complexas (curto-circuito, chamadas de funções)
  17. Blocos básicos e o formato SSA
  18. A linguagem intermediária do LLVM
  19. Código LLVM para variáveis e expressões inteiras
  20. Código LLVM para expressões float, casts e curto-circuito
  21. Código LLVM para estruturas de controle básicas e atribuição
  22. Uma introdução à otimização de código