ces-41 compiladores - IEC

Propaganda
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.
Download