DC-UFRPE/Bacharelado em Ciência da Computação/Projeto de Compiladores
Programa da Disciplina
[editar | editar código-fonte]Nome: | Projeto de Compiladores |
Código: | 14096 |
Departamento: | Departamento de Computação (DC) |
Área: | Fundamentos da Computação |
Carga-horária total: | 60 horas |
Créditos: | 4 |
Pré-requisitos: | 06223 - TEORIA DA COMPUTAÇÃO e 14118 - INTRODUÇÃO A PROGRAMAÇÃO II |
Ementa
[editar | editar código-fonte]- Back-end: Máquina de Combinadores em Dois Arrays. Máquina de Combinadores em Listas. Máquina de Turner sem Garbage Collector. Garbage Collection. A Máquina G: da interpretação à compilação.
- Front-end: LEX e YACC.
Conteúdo
[editar | editar código-fonte]1. Back-end: Máquina de Combinadores implementada em dois arrays.
1.1 Combinadores de Schönfinkel
1.2 Profiling das máquinas em arquiteturas, sistemas operacionais e versões do compilador C diferentes
1.3 Comparação espaço-temporal das diversas arquiteturas/implementações.
1.4 Recompilação para máquina com mesma arquiteturas, sistemas operacionais e versão do compilador C.
1.5 Comparação espaço-temporal das diversas implementações.
1.6 Combinadores de Curry e otimização de código intermediário.
1.7 Otimização de código objeto.
1.8 Profiling de código II.
1.9 Comparação espaço-temporal das diversas implementações II.
1.10 Combinadores de Turner.
1.11 Enriquecimento da máquina com operadores lógicos e aritméticos.
1.12 Profiling de código III.
1.13 Comparação espaço-temporal das diversas implementações III.
2. Back-end: Máquina de Combinadores implementada em listas.
2.1. Comparação espaço-temporal das diversas implementações da máquina em dois arrays com a máquina em listas.
2.2. Combinadores de Curry e otimização de código intermediário.
2.3. Otimização de código objeto.
2.4. Profiling de código.
2.5. Comparação espaço-temporal das diversas implementações.
2.6. Combinadores de Turner.
2.7. Enriquecimento da máquina com operadores lógicos e aritméticos.
2.8. Profiling de código II.
2.9. Comparação espaço-temporal das diversas implementações II.
3. Back-end: Máquina de Redução de Grafos de Turner.
3.1. Comparação espaço-temporal das diversas implementações da máquina em dois arrays com a máquina em listas e máquina de Turner de Redução de Grafos. 3.2. Otimização de código objeto.
3.3. Profiling de código.
3.4. Comparação espaço-temporal das diversas implementações.
3.5. Fechando o nó.
3.6. Enriquecimento da máquina com operadores lógicos e aritméticos.
3.7. Profiling de código II.
3.8. Comparação espaço-temporal das diversas implementações II.
3.9. Otimizando a pilha de recursão.
4. Back-end: Garbage Collection
4.1. Implementação do algoritmo de Mark-Scan
4.2. Implementação do algoritmo de Cópia de Fenichel-Yochelson
4.3. Implementação do algoritmos de Cópia de Cheney.
4.4. Comparação espaço-temporal entre os algoritmos de G.C.
4.5. Profiling Garbage Collectors
4.6. Introduzindo células não-voláteis.
4.7. Otimização de código
5. A Máquina G: da interpretação à compilação.
5.1. Principais esquemas de transformação de código.
5.2. Evitando a geração de células.
5.3. Pilhas de valores booleanos.
5.4. Esquemas de otimização da recursão.
6. Front-end: Geradores de analisadores léxicos
6.1. Especificação da parte léxica de uma linguagem funcional simples.
6.2. Implementação. 7. Front-end: Geradores de analisadores sintáticos
7.1. Especificação da parte sintática de uma linguagem funcional simples.
7.2. Implementação.
7.3. Tradução dirigida por sintaxe.
8. Integração Front/Back-ends.
8.1. Teste da linguagem.
8.2. Geração de mensagens de erros.
8.3. Profiling.
Bibliografia Básica
[editar | editar código-fonte]1. JONES, Richard and LINS, Rafael. Garbage Collection:Algorithms for Dynamic Memory Management, John Wiley & Sons, 1996.
2. NIEMANN, Tom, Lex & Yacc Tutorial, http://epaperpress.com/lexandyacc/
3. Johnson, YACC: Yet Another Compiler Compiler, Manual.
Bibliografia Complementar
[editar | editar código-fonte]1. LINS, Rafael, Notas de Aula.
2. RICARTE, Ivan; Introdução à compilação, Elsevier, 2015.
3. GRUNE, Dick et al. Projeto moderno de compiladores: implementação e aplicações. Rio de Janeiro: Campus, 2001.
4. PARR, Terence. Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages.Pragmatic Bookshelf, 2010.
5. SEBESTA, Robert W. Conceitos de linguagens de programação. 5. ed. Porto Alegre: Book-man, 2003.
6. AHO, Alfred V.; LAM, Monica S.; SETHI, Ravi; ULLMAN, Jeffrey D. Compiladores: princípios, técnicas e ferramentas. Segunda edição. São Paulo: Pearson Addison-Wesley, 2008.