CES41 COMPILADORES Prof Fbio Carneiro Mokarzel 2020 http
CES-41 COMPILADORES Prof. Fábio Carneiro Mokarzel 2020 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 n Nome do Professor: Fábio Carneiro Mokarzel n Graduação: Engenharia Elétrica – UNIFEI – Itajubá, MG – 1973 n Mestrado: Ciência da Computação – ITA – São José dos Campos, SP – 1984 n Doutorado: Ciência da Computação – ITA – São José dos Campos, SP – 1995
0. 1 - Professor e Alunos n Professor no ITA: desde 1979 – IEC n Área de Pesquisa: Compiladores para Processamento Paralelo n Sala: No 109 – Prédio da Computação do ITA n E-mail: fabiomokarzel@gmail. com n Telefone no ITA: (12) 3947 -5982 ou 3947 -5899 n Celular: (12) 9 -9714 -7538 - Whats. App
0. 2 – Objetivos da Disciplina 0. 2. 1 – Objetivo Geral n 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 n Conhecimento do contexto onde se insere um compilador n Estudo da organização de compiladores n Estudo de princípios, técnicas e ferramentas para a implementação de cada componente de um compilador n Construção de um compilador para uma linguagem de programação simplificada
0. 3 – Comentários sobre a Disciplina n 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 n Compiladores e interpretadores dessas linguagens são importantes ferramentas para torná-las disponíveis n Na realidade, poucos especialistas em Computação executam tarefas de construir ou manter um
No entanto o estudo do processo de compilação é valioso: n Aprimora muito os conhecimentos sobre linguagens de programação n Ajuda o programador alcançar eficiência em seus programas n Forma uma boa ponte entre os conhecimentos de hardware e de software
E ainda: n Dá boas diretrizes para o projeto de novas linguagens, evitando construções difíceis de serem compiladas e geradoras de código ineficiente n Apresenta ao engenheiro de computação as ferramentas Lex e Yacc, importantes para o desenvolvimento de sistemas de software n 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: n Otimização de código é usada em validação de programas, transformação de programas desestruturados e paralelização de programas sequenciais n 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
n Nos anos 50, a construção de um compilador era uma tarefa extremamente difícil n 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
n Um conjunto de técnicas básicas pode ser usado na construção de compiladores para várias linguagens e várias máquinas n 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 - Introdução - 2 sem Cap. II - Gramáticas e linguagens 0. 5 sem Cap. III - Diagramas de transições -2 sem Cap. IV - Complementos de análise léxica - 0. 5 sem Cap. V - Análise sintática -4 sem Cap. VI - Análise semântica -3 sem Cap. VII - Código intermediário - 2 sem
0. 5 – Metodologia e Carga Horária n Pré-requisitos de CES-41: - CTC-34 Autômata e Linguagens Formais CES-11 Algoritmos e Estruturas de Dados EEA-25 Sistemas Digitais Programáveis n Carga horária semanal: 3 -0 -2 -5 n Aulas teóricas: expositivas e em sala comum n Aulas de laboratório: em sala computadores;
0. 6 – Critérios de Avaliação Os tipos de trabalhos a serem propostos poderão ser: 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 prova-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 n A. V. Aho, M. S. Lam, R. Sethi e J. D. Ullman – Compiladores: Princípios, Técnicas e Ferramentas – 2 a 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 n 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 n P. R. Santos, T. Langlois– Compiladores da Teoria à Prática – Rio de Janeiro – LTC – 2018.
0. 7 – Bibliografia 0. 7. 1 – Bibliografia básica n K. C. Louden – Compiladores: Princípios e Práticas – São Paulo – Thomson – 2004.
0. 7 – Bibliografia 0. 7. 1 – Bibliografia básica n J. P. Tremblay e P. G. Sorenson – Theory and Practice of Compiler Writing – Singapore – Mc. Graw Hill – 1989.
0. 7 – Bibliografia 0. 7. 1 – Bibliografia básica n Slides de CES-41 – Prof. Mokarzel, 2014
0. 7 – Bibliografia 0. 7. 2 – Bibliografia suplementar n A. I. Holub – Compiler Design in C – Englewood Cliffs – Prentice Hall – 1990.
0. 7 – Bibliografia 0. 7. 2 – Bibliografia suplementar n P. Rechenberg e H. Mössenböck – A Compiler Generator for Microcomputers – Englewood Cliffs – Prentice. Hall – 1989.
0. 7 – Bibliografia 0. 7. 2 – Bibliografia suplementar n I. Ricarte – Introdução à Compilação – Rio de Janeiro – Campus/Elsevier – 2008.
0. 7 – Bibliografia 0. 7. 2 – Bibliografia suplementar n J. R. Levine, T. Mason e D. Brown – Lex & Yacc– 2 nd Edition – Sebastopol – O’Reilly & Associates – 1992.
- Slides: 29