280 likes | 604 Views
CES-41 COMPILADORES. Prof. Fábio Carneiro Mokarzel 2014 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
E N D
CES-41 COMPILADORES Prof. Fábio Carneiro Mokarzel 2014 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: mokarzel@ita.br, fabiomokarzel@gmail.com • Telefone no ITA: (12) 3947-5982 ou 3947-5899 • Celular: (12) 9-9714-7538
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çãode 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 - Introdução - 1 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 Cap. VIII - Organização em tempo de execução - 1 sem Cap. IX - Geração de código - 1 sem Cap. X - Otimização de código - 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 – TheTheory and PracticeofCompilerWriting –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 – Prentice-Hall – 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– 2ndEdition – Sebastopol – O’Reilly & Associates – 1992.