CES-41 Teoria Cap Zero - Divisão de Ciência da Computação do ITA
Download
Report
Transcript CES-41 Teoria Cap Zero - Divisão de Ciência da Computação do ITA
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: [email protected], [email protected]
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çã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.