2024
Compiladores
Nome: Compiladores
Cód.: INF13213L
6 ECTS
Duração: 15 semanas/156 horas
Área Científica:
Informática
Língua(s) de lecionação: Português
Língua(s) de apoio tutorial: Português, Inglês
Regime de Frequência: Presencial
Objetivos de Desenvolvimento Sustentável
Objetivos de Aprendizagem
* Discutir o conceito de compilador. [Familiaridade]
* Compreender como se dispõem os dados, na memória, em tempo de execução. [Familiaridade]
* Traduzir Árvores de Sintaxe Abstracta para Árvores de Representação Intermédia. [Aplicação]
* Usar máquinas abstractas na geração de código. [Aplicação]
* Compreender as diferentes formas de optimização possíveis de aplicar a um programa durante a sua compilação [Familiaridade]
* Identificar a necessidade e as vantagens ou desvantagens de incorporar garbage collection numa linguagem de programação. [Avaliação]
* Determinar as diferenças entre os processos de compilação de linguagens imperativas, funcionais e orientadas a objectos. [Aplicação]
* Escrever um compilador de Árvores de Sintaxe Abstractas que faça uso de várias técnicas de optimização e que produza código para uma máquina abstracta, começando pela tradução para Representação Intermédia. [Avaliação]
* Compreender como se dispõem os dados, na memória, em tempo de execução. [Familiaridade]
* Traduzir Árvores de Sintaxe Abstracta para Árvores de Representação Intermédia. [Aplicação]
* Usar máquinas abstractas na geração de código. [Aplicação]
* Compreender as diferentes formas de optimização possíveis de aplicar a um programa durante a sua compilação [Familiaridade]
* Identificar a necessidade e as vantagens ou desvantagens de incorporar garbage collection numa linguagem de programação. [Avaliação]
* Determinar as diferenças entre os processos de compilação de linguagens imperativas, funcionais e orientadas a objectos. [Aplicação]
* Escrever um compilador de Árvores de Sintaxe Abstractas que faça uso de várias técnicas de optimização e que produza código para uma máquina abstracta, começando pela tradução para Representação Intermédia. [Avaliação]
Conteúdos Programáticos
1. Modelos de execução
1.1. Registos de activação
1.2. Organização da memória
2. Representação intermédia
3. Geração de código
3.1 Máquinas abstractas
3.2 Compilação "just-in-time"
4. Optimizações
4.1. Blocos básicos e traços
4.2. Selecção de instruções
4.3. Análise de vivacidade
4.4 Alocação de registos
5. Tópicos avançados
5.1. "Garbage collection"
5.2. Compilação de linguagens orientadas a objectos
5.3. Compilação de linguagens funcionais
5.4. Tipos polimórficos
5.5. Ligação dinâmica
1.1. Registos de activação
1.2. Organização da memória
2. Representação intermédia
3. Geração de código
3.1 Máquinas abstractas
3.2 Compilação "just-in-time"
4. Optimizações
4.1. Blocos básicos e traços
4.2. Selecção de instruções
4.3. Análise de vivacidade
4.4 Alocação de registos
5. Tópicos avançados
5.1. "Garbage collection"
5.2. Compilação de linguagens orientadas a objectos
5.3. Compilação de linguagens funcionais
5.4. Tipos polimórficos
5.5. Ligação dinâmica
Métodos de Ensino
Aulas Teóricas com apresentação de conteúdos, explicação de aplicações e ilustração de exemplos. Aulas práticas com resolução de exercícios e desenvolvimento de exemplos.
A avaliação consiste num conjunto de testes quinzenais ou duas frequências ou um exame final.
A avaliação consiste num conjunto de testes quinzenais ou duas frequências ou um exame final.
Bibliografia
- Modern Compiler Implementation in C, Andrew W. Appel. Cambridge University Press, 1998. (557 páginas)
- Compilers: Principles, Techniques and Tools, Alfred V. Aho, Ravi Sethi e Jeffrey D. Ullman. Addison Wesley, 1986. (1038 páginas)
- Compilers: Principles, Techniques and Tools, Alfred V. Aho, Ravi Sethi e Jeffrey D. Ullman. Addison Wesley, 1986. (1038 páginas)
Equipa Docente
- Salvador Luís de Bethencourt Pinto de Abreu [responsável]