CES-41 COMPILADORES Prof. Fábio Carneiro Mokarzel 2017 http://www.comp.ita.br/~mokarzel CES-41 COMPILADORES Capítulo Zero Apresentação Capítulo Zero - Apresentação 0.1 – Professor e alunos 0.2 – Objetivos da disciplina 0.3 – Comentários sobre a disciplina 0.4 – Programa da disciplina 0.5 – Metodologia e carga horária 0.6 – Critérios de avaliação 0.7 – Bibliografia 0.1 - Professor e Alunos Nome do Professor: Fábio Carneiro Mokarzel Graduação: Engenharia Elétrica – UNIFEI – Itajubá, MG – 1973 Mestrado: Ciência da Computação – ITA – São José dos Campos, SP – 1984 Doutorado: Ciência da Computação – ITA – São José dos Campos, SP – 1995 0.1 - Professor e Alunos Professor no ITA: desde 1979 – IEC Área de Pesquisa: Compiladores para Processamento Paralelo Sala: No 109 – Prédio da Computação do ITA E-mail: [email protected], [email protected] Telefone no ITA: (12) 3947-5982 ou 3947-5899 Celular: (12) 9-9714-7538 - WhatsApp 0.2 – Objetivos da Disciplina 0.2.1 – Objetivo Geral Estudo teórico e prático de técnicas para a construção de compiladores de linguagens de programação 0.2.2 – Objetivos específicos Conhecimento do contexto onde se insere um compilador Estudo da organização de compiladores Estudo de princípios, técnicas e ferramentas para a implementação de cada componente de um compilador Construção de um compilador para uma linguagem de programação simplificada 0.3 – Comentários sobre a Disciplina O Engenheiro de Computação deve estar preparado para projetar novas linguagens de programação, bem como para disponibilizar linguagens conhecidas para novas máquinas Compiladores e interpretadores dessas linguagens são importantes ferramentas para torná-las disponíveis Na realidade, poucos especialistas em Computação executam tarefas de construir ou manter um compilador ou um interpretador de uma linguagem de programação No entanto o estudo do processo de compilação é valioso: Aprimora muito os conhecimentos sobre linguagens de programação Ajuda o programador alcançar eficiência em seus programas Forma uma boa ponte entre os conhecimentos de hardware e de software E ainda: Dá boas diretrizes para o projeto de novas linguagens, evitando construções difíceis de serem compiladas e geradoras de código ineficiente Apresenta ao engenheiro de computação as ferramentas Lex e Yacc, importantes para o desenvolvimento de sistemas de software Princípios sobre construção de compiladores são usados também em outras áreas da Computação Exemplos de utilidade em outras áreas: Análise léxica faz reconhecimento de cadeias, também usado em: ■ Editores de texto, sistemas de recuperação de informações e reconhecimento de padrões Gramáticas livres de contexto e definições orientadas pela sintaxe são usadas na implementação de pequenas linguagens tais como: Formatadores de texto, sistemas de computação gráfica, linguagens para banco de dados, linguagens para simulação, etc. Exemplos de utilidade em outras áreas: Otimização de código é usada em validação de programas, transformação de programas desestruturados e paralelização de programas sequenciais Análise sintática orienta a construção da árvore de controle de um programa, que é base para a otimização e paralelização de programas Nos anos 50, a construção de um compilador era uma tarefa extremamente difícil Ao longo do tempo, foram desenvolvidas: - Técnicas bem engenhosas Linguagens bem organizadas Ambientes de programação Ferramentas automáticas Hoje, um pequeno compilador é projetado em disciplinas de um ano Um conjunto de técnicas básicas pode ser usado na construção de compiladores para várias linguagens e várias máquinas Construção de compiladores abrange e integra conhecimentos de: Linguagens de programação - Arquitetura de computadores - Teoria de autômatos - Estruturas de dados - Engenharia de software - 0.4 – Programa da Disciplina Cap. I Cap. II Cap. III Cap. IV Cap. V Cap. VI Cap. VII Cap. VIII Cap. IX Cap. X - Introdução - Gramáticas e linguagens - Diagramas de transições - Complementos de análise léxica - Análise sintática - Análise semântica - Código intermediário - Organização em tempo de execução - Geração de código - Otimização de código - 1 sem - 0.5 sem - 2 sem - 0.5 sem - 4 sem - 3 sem - 2 sem - 1 sem - 1 sem - 1 sem 0.5 – Metodologia e Carga Horária Pré-requisitos de CES-41: CTC-34 Autômata e Linguagens Formais CES-11 Algoritmos e Estruturas de Dados Carga horária semanal: 3-0-2-5 Aulas teóricas: expositivas e em sala comum Aulas de laboratório: em sala com microcomputadores; ferramentas Lex e Yacc 0.6 – Critérios de Avaliação Os tipos de trabalhos a serem propostos são: Séries de exercícios sobre a teoria da disciplina, sem necessidade de programação As questões podem ser práticas ou até teóricas Séries de exercícios envolvendo programação de algoritmos ou técnicas apresentadas Laboratórios visando a implementação de um compilador, usando ferramentas automáticas Não haverá provas bimestrais nem de Exame ■ Os objetivos dos laboratórios poderão ser a implementação de: Analisador léxico Analisador sintático Analisador semântico Gerador de código intermediário Gerador de código objeto Interpretador do código intermediário ■ A nota final da disciplina será uma média ponderada das notas dos trabalhos Os pesos dos trabalhos dependem do esforço exigido e da importância do assunto abordado ■ Trabalhos individuais e em grupos: As análises léxica e sintática são de caráter individual Os outros laboratórios poderão ser feitos em grupos de no máximo dois alunos As séries poderão ou não ser de caráter individual 0.7 – Bibliografia 0.7.1 – Bibliografia básica A.V.Aho, M.S.Lam, R.Sethi e J.D.Ullman – Compiladores: Princípios, Técnicas e Ferramentas – 2a Edição – São Paulo – Pearson/Addison Wesley – 2008. É a 2ª edição, traduzida para Português, do conhecido livro do dragão 0.7 – Bibliografia 0.7.1 – Bibliografia básica A.V.Aho, R.Sethi e J.D.Ullman – Compilers: Principles, Techniques and Tools – Reading – Addison Wesley – 1986. É a 1ª edição do livro do dragão 0.7 – Bibliografia 0.7.1 – Bibliografia básica K.C.Louden – Compiladores: Princípios e Práticas –São Paulo – Thomson – 2004. 0.7 – Bibliografia 0.7.1 – Bibliografia básica J.P.Tremblay e P.G.Sorenson – The Theory and Practice of Compiler Writing – Singapore – McGraw Hill – 1989. 0.7 – Bibliografia 0.7.1 – Bibliografia básica Slides de CES-41 – Prof. Mokarzel, 2014 0.7 – Bibliografia 0.7.2 – Bibliografia suplementar A.I.Holub – Compiler Design in C – Englewood Cliffs – Prentice Hall – 1990. 0.7 – Bibliografia 0.7.2 – Bibliografia suplementar P.Rechenberg e H.Mössenböck – A Compiler Generator for Microcomputers – Englewood Cliffs – PrenticeHall – 1989. 0.7 – Bibliografia 0.7.2 – Bibliografia suplementar I.Ricarte – Introdução à Compilação – Rio de Janeiro – Campus/Elsevier – 2008. 0.7 – Bibliografia 0.7.2 – Bibliografia suplementar J.R. Levine, T. Mason e D. Brown – Lex & Yacc– 2nd Edition – Sebastopol – O’Reilly & Associates – 1992.