DC-UFRPE/Bacharelado em Ciência da Computação/Compiladores
Programa da Disciplina
editarNome: | Compiladores |
Código: | 14090 |
Departamento: | Departamento de Computação (DC) |
Área: | Computação |
Carga-horária total: | 60 horas |
Créditos: | 4 |
Pré-requisitos: | 06223 - TEORIA DA COMPUTAÇÃO
14117 - INTRODUÇÃO À PROGRAMAÇÃO I 14118 - INTRODUÇÃO À PROGRAMAÇÃO II 14203 - MATEMÁTICA DISCRETA I 14204 - MATEMÁTICA DISCRETA II |
Ementa
editarEspecificação da sintaxe de linguagens de programação com expressões regulares e gramáticas livres de contexto. Análise léxica. Análise sintática: ascendente e descendente. Geradores automáticos de lexers e parsers. Análise semântica. Geração de código intermediário e final.
Objetivos
editarGeral:
editar- Apresentar os principais conceitos da área de compiladores, motivando os alunos a aprofundarem-se na disciplina.
Específicos:
editar- Capacitar os alunos a entender linguagens de programação, suas características, particularidades, de maneira a possibilitar a adoção das melhores práticas de programação gerando código correto, seguro e eficiente, na linguagem adequada à solução do problema.
Conteúdo
editar1. Revisão de Linguagens de Programação
- Origem e histórico das linguagens de alto-nível
- Linguagens de alto nível e de baixo nível
- Tipos de tradutores de linguagens de programação
2. Análise Léxica
- Objetivo
- Desenvolvendo de forma manual
- Geração de lexers a partir de expressões regulares
- Geradores automáticos de lexers
3. Análise Sintática
- Objetivo
- Tratando ambiguidades nas gramáticas livres de contexto
- Parser descendente recursivo
- Parsers ascendente LR(0) e SLR
4. Tradução dirigida por sintaxe
- Definição dirigida por sintaxe
- Esquemas de tradução
- Usando esquemas de tradução nos parsers estudados e na árvore
5. Análise Semântica
- Tabela de símbolos
- Verificações de escopo
- Verificações de tipo
- Outras verificações
6. Geração de código intermediário
- Motivação
- Código de três endereços
- Alguns exemplos de tradução
7. Geração de código final
- Organização da memória de tempo de execução
- Um tipo de código final
- Exemplos de tradução
Bibliografia
editarBásica
editar1. LOUDEN, Kenneth C. Compiladores: princípios e práticas. São Paulo: Thomson Learning, 2004.
2. AHO, Alfred V.; SETHI, Ravi; ULLMAN, Jeffrey D. Compiladores: principios, tecnicas e fer-ramentas. Rio de Janeiro: LTC, c1995.
3. COOPER, Keith; TORCZON, Linda. Construindo Compiladores (trad. da 1ª edição). Campus Elsevier, 2013.
Complementar
editar1. 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.
2. WATT, David; BROWN, Deryck. Programming Language Processors in Java: Compilers and Interpreters. Prentice Hall, 2000.
3. SEBESTA, Robert W. Conceitos de linguagens de programação. 5. ed. Porto Alegre: Book-man, 2003.
4. PARR, Terence. Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages.Pragmatic Bookshelf, 2010.
5. GRUNE, Dick et al. Projeto moderno de compiladores: implementação e aplicações. Rio de Janeiro: Campus, 2001.