DC-UFRPE/Bacharelado em Ciência da Computação/Projeto de Compiladores

Programa da Disciplina editar

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

  • 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

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

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

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.