DEETC Logo ISEL Logo  
 
 
Semestre de Verão
2006 / 2007

 

 

Compiladores (Cpl)

Resumo

  1. Objectivos
    Qualquer programa escrito numa linguagem de programação tem que ser traduzido antes de ser executado. Esta tradução é tipicamente realizada por um programa designado de compilador. Esta unidade curricular tem como objectivo principal aprofundar os conhecimentos sobre linguagens de programação, através da introdução dos princípios e técnicas utilizadas nessa tradução, das questões associadas à implementação de um compilador e da aplicação de técnicas de resolução de problemas estruturalmente complexos.
     
  2. Resultados de aprendizagem
    Os estudantes que terminam com sucesso esta unidade curricular serão capazes de:
    1. Compreender os princípios de cada uma das fases do processo de compilação
    2. Compreender o papel de cada bloco constituinte de um compilador típico
    3. Mostrar conhecimento dos problemas e técnicas aplicadas em cada uma das fases do processo de compilação
    4. Aplicar técnicas padrão na resolução de problemas típicos que surgem na construção de um compilador
    5. Compreender como um compilador pode tirar partido das características do ambiente de execução (real ou virtual) na geração de código

  3. Avaliação dos resultados de aprendizagem
    Os resultados da aprendizagem (1), (2), (3) e (5) são avaliados individualmente através de teste escrito. Durante as aulas práticas e na discussão final dos trabalhos práticos, realizada em grupo, são avaliados os resultados da aprendizagem (4) e (5).
     
  4. Programa resumido
    Introdução: O que é um compilador?; fases do processe de compilação; estrutura genérica de um compilador. Análise lexicográfica (Scanning): Expressões regulares, autómatos finitos e infinitos; construção de expressões regulares através de autómatos finitos. Análise sintáctica (Parsing): Sintaxe de expressões; gramáticas livres de contexto; BNF; árvores de sintaxe abstractas, Top-Down Bottom-Up parsing. Análise semântica: Tabelas de símbolos; padrão Visitor; verificação de tipos. Optimizações: Constant folding; Tree Rewriting. Geração de código: Estrutura do código; selecção de instruções.