PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS PRÓ-REITORIA DE GRADUAÇÃO DEPARTAMENTO DE COMPUTAÇÃO PLANO DE ENSINO Disciplina: Compiladores Curso: Engenharia de Computação/ Ciência da computação Professor/Responsável: Carmen Cecília Centeno Código Nº de Créditos CMP1220 06 Pré-requisitos: Có-requesito Estudo dos métodos para resolução de problemas e modelagem da solução por meio de algoritmo. Estruturação, depuração, testes e documentação. • • • • Ensinar ao aluno a entender o processo de tradução e compilação das linguagens de alto nível de abstração para linguagens de baixo nível de abstração. Ensinar ao aluno as técnicas/ferramentas utilizadas para construção de um compilador, com senso crítico das vantagens e desvantagens de cada abordagem. Possibilitar ao aluno compreender a ligação do processo de compilação com as disciplinas correlatas. • Capacitar o aluno a implementar analisadores de expressão para uma ampla utilização nos problemas da Computação. Capacitar o aluno a implementar o protótipo de um tradutor e sua efetiva interpretação dos comandos de alto nível, a fim de criar suas própria linguagem ou complementar a funcionalidade de um software já existente. • • • • • • • • • Introdução Análise Léxica Tabelas de Símbolos Análise Sintática Tradução dirigida pela sintaxe (esquemas de tradução) Verificação de tipos Ambientes em tempo de execução Geração de código intermediário Otimização de código • • • • Aulas expositivas; Formação de grupos para definição, discussão e solução de problemas; Estudo dirigido- resolução de exercícios em classe. Construção passo a passo do compilador em módulos que evoluem deste a revisão dos fundamentos de programação na linguagem C até a construção de uma linguagem de programação (interpretador) que implementa a tradução de um português estruturado. A nota final, NF, da disciplina será resultante da média ponderada de dois conjuntos de notas, N1 e N2, conforme a expressão NF = 0,4.N1+ 0,6.N2, sendo que tanto N1 quanto N2 serão compostos por no mínimo duas notas resultantes de duas avaliações individuais com todo o conteúdo do período correspondente. A frequência será computada em cada encontro ou através de chamada feita durante as aulas. Será considerado aprovado na disciplina o aluno que obtiver a freqüência mínima de 75% e Nota Final igual ou superior a cinco. AED 1, 2: Revisão LFA AED 3 – 6: Implementação de um analisador léxico da gramática proposta em sala de aula. AED 7 - 10: Implementação de um analisador sintático da gramática proposta em sala de aula. AED 11,12: Implementação dos procedimentos de erro para a gramática proposta em sala de aula. 1. PRICE, Ana Maria de Alencar; TOSCANI, Simão Sirineo. Implementação de linguagens de programação: compiladores. 3. ed. Porto Alegre: Bookman, 2008. 2. AHO, Alfred V.; SETHI, Ravi; ULLMAN, Jeffrey D. Compilers: principles, techinques, and tools. New York: Addison-Wesley, 1988. 3. LOUDEN, Kenneth C. Compiladores. São Paulo: Thomson Learning, 2004. 1. AHO, Alfred V. Compiladores: princípios, técnicas e ferramentas. 2. ed. São Paulo: Pearson Addison Wesley, 2008. 634 p. 2. APPEL, Andrew W.; GINSBURG, Maia. Modern compiler implementation in C. Cambridge: Cambridge University, c1998. 544 p. 3. KERNIGHAN, Brian W.; RITCHIE, Dennis M. C A linguagem de programação ANSI. Rio de Janeiro: Campus, 1990. 4. KOWALTOWSKY, Thomaz. Implementação de linguagens de programação. Rio de Janeiro: Guanabara Dois, 1983. 5. SCHILDT, Herbert. C completo e total. 4. ed., New York: McGraw Hill, 2000. 1. Apresentação do professor, do Plano de Ensino e Motivação (06/02) 2. Introdução a Compiladores. Tradução x Interpretação (programa fonte, programa alvo). Processo de Compilação (tipos de análise). (07/02) 3. As fases de um compilador. Gramáticas e Linguagens (ênfase em Regular). (10/02) 4. Análise Léxica. Autômatos Finitos Deterministicos e Não Deterministicos. Minimização do AFD. (13/02) 5. Definição de Tokens, Padrões e Lexemas. Representação e Categoria de Tokens. Convertendo um AFND em um AFD. Expressões Regulares. (20/02) 6. Tabela de Símbolos. Tabela Hash.Convertendo ER em AFND. (21/02) 7. Especificação de um Analisador Léxico. Convertendo um AFD em Programa. Definição do alfabeto e formação de tokens para a implementação de um analisador léxico. (24/02) 8. Análise sintática (introdução) Gramáticas Livres de Contexto. Derivações e Árvores de Derivações. Exercícios. (27/02) 9. Transformações em GLC’s (28/02) 10. Autômatos de Pilha. (03/03) 11. Revisão para Prova (06/03) 12. Prova 1 (07/03) 13. Entrega e Correção da Prova 1 (10/03) 14. Análise Sintática Top Down Recursiva com Retrocesso. Definição da gramática a ser implementada. (13/03) 15. Análise Sintática Top Down Recursiva Preditiva. Analise Preditiva Tabular (14/03) 16. Construção da tabela preditiva. Exercícios.(17/03) 17. Gramáticas LL(1). Correção Exercícios. (20/03) 18. Lista de Exercícios sobre Análise Sintática Preditiva Tabular (21/03) 19. Análise Sintática Bottom-Up.Gramática de Operadores. Exercícios (24/03) 20. Análise Sintática por Precedência de Operadores. Construção da Tabela de Precedência de Operadores (Método Intuitivo). (27/03) 21. Lista de Exercícios. (28/03) 22. Construção da Tabela de Precedência de Operadores (Método Mecânico). Exercícios. (31/03) 23. Lista de Exercícios de Revisão para Prova(07/04) 24. Correção da Lista de Revisão (10/04) 25. Prova 2 (11/04) 26. Entrega e Correção da Prova 2 (14/04) 27. Analisadores LR (17/04) 28. Analisadores SLR (18/04) 29. Lista de Exercícios SLR (24/04) 30. Correção da Lista de Exercícios SLR. (25/04) 31. Analisadores LR Canônicos (28/04) 32. Lista de Exercícios LR Canônica. (05/05) 33. Correção Lista LR Canônica. (08/05) 34. Tabela Sintáticas LALR (09/05) 35. Exercícios - Tabela Sintáticas LALR (12/05) 36. Correção Exercícios. (15/05) 37. Lista de Exercícios de Analise Sintática (16/05) 38. Correção da Lista de Exercícios.(19/05) 39. Revisão para a Prova 3 (22/05) 40. Prova 3 (23/05) 41. Entrega e correção da Prova 3 (26/05) 42. Recuperação de erros na análise LL - modo pânico. (29/05) 43. Recuperação de erros na análise LL - recuperação local. Precedência de Operadores (30/05) 44. Recuperação de Erros na Análise LR, modo pânico e recuperação local (02/06) 45. Lista de Exercícios (09/06) 46. Tradução Dirigida Pela Sintaxe. Esquemas de Tradução: Agregando regras semânticas a uma GLC. Árvores Gramaticais Anotadas. Verificações Semânticas através de ações semânticas. (12/06) 47. Tradução Dirigida Pela Sintaxe. Grafo de Dependência, árvores de sintaxe. Implementação de Esquemas. (13/06) 48. Lista de Exercícios de Revisão. (16/06) 49. Prova 4 (19/06) 50. Correção Prova 4 (20/06) 50. Entrega de Notas e Discussão de Resultados (23/06) 51. Entrega de Notas e Discussão de Resultados (26/06) 52. Entrega de Notas e Discussão de Resultados (27/06) 53. 54. Quadro Branco com pincéis, Laboratório de Computadores com acesso à Internet, IDE de desenvolvimento para a linguagem C.