Professor: Marcus Salerno de Aquino (salerno@dsc.ufcg.edu.br)
Horário: Segunda - 07h - 10 h / Qua - 07 h -
08 h
Sala: RE-08 (REENGE)
Listas de Exercícios |
|
Notas dos Alunos |
|
|
Objetivos Gerais
Dar ao aluno uma visão geral (teórica e prática)
de um compilador, seus módulos componentes e dos problemas relacionados com
cada módulo. Ao final do curso o aluno deverá ser capaz de projetar e
desenvolver um compilador.
Objetivos Específicos
· Apresentar os conceitos básicos relativos aos compiladores.
· Apresentar os módulos componentes de um compilador.
· Apresentar a forma de implementação dos módulos de um
compilador: analisador léxico, analisador sintático, analisador semântico,
tratador de tabela de símbolos, tratador de erros, gerador de código.
· Permitir ao aluno a implementação de um pequeno
compilador, dando-lhe a oportunidade de colocar em prática os ensinamentos
teóricos vistos em sala de aula, bem como proporcionar-lhe a oportunidade de
escrever um programa de computador de razoável complexidade e tamanho.
[INÍCIO]
1. Introdução
·
Tradutores e
Compiladores
·
Outros Tradutores
·
Estrutura de um
Compilador
2. Autômato Finito e Análise Léxica
·
Conceitos Básicos
em Gramáticas e Linguagens
·
Analisador Léxico
·
Descrição de
Símbolos com Gramáticas Regulares
·
Descrição de
Símbolos com Autômatos Finitos
·
Implementação do
Analisador Léxico
3. Análise Sintática
·
Introdução
·
Analisador
Sintático Descendente: recursivo e preditor
·
Problemas com
Análise Sintática Descendente
·
Análise Sintática
Ascendente: precedência simples, precedência de operadores
4. Tabela de Símbolos e Análise Semântica
·
Introdução
·
Entradas na
Tabela de Símbolos
·
Alocação de
Posições de Memória
·
Implementação da
Tabela de Símbolos
·
Verificação
Semântica de Tipos de Variáveis
·
Verificação
Semântica em Comandos
5. Detecção e Recuperação de Erros
·
Erros
·
Acusando Erros
·
Erros Léxicos,
Sintáticos e Semânticos
·
Métodos de
Recuperação de Erros Sintáticos
6. Geração de Código
·
Geração de Código
Intermediário
·
Arvore Sintática
·
Triplas de Código
Intermediário
·
Expressões
Aritméticas e Atribuições
·
Comandos de
Controle de Fluxo
·
Declarações
[INÍCIO]
|
|
2008 |
Aula
No |
Data |
Assunto
Planejado |
01 |
23/04 |
Apresentação do plano de curso. Introdução:
Tradutores e Compiladores; Outros tradutores; Estrutura de um Compilador |
02 |
28/04 |
Autômatos Finitos e Análise Léxica:
Conceitos básicos em gramáticas e linguagens |
03 |
30/04 |
Analisador léxico; Descrição de símbolos
com gramáticas regulares; descrição de símbolos com autômatos finitos |
04 |
05/05 |
Apresentação do projeto de Compiladores.
Definição da estrutura de implementação do analisador léxico |
05 |
07/05 |
Analisador Sintático: Introdução;
Analisador sintático descendente recursivo |
06 |
12/05 |
Analisador sintático descendente recursivo
- exemplos |
07 |
14/05 |
Analisador sintático descendente preditor
(LL(1)) |
08 |
19/05 |
Avaliação da 1ª etapa do projeto –
Analisador Léxico |
09 |
21/05 |
Analisador sintático descendente preditor -
Exercícios |
10 |
26/05 |
Analisador sintático ascendente – conceitos
básicos |
11 |
28/05 |
Analisador sintático ascendente de
precedência simples e sua implementação |
12 |
02/06 |
Analisador ascendente de precedência de
operadores |
13 |
04/06 |
Analisador sintático ascendente –
Exercícios |
14 |
11/06 |
Prova 1 |
15 |
09/06 |
Tabela de Símbolos & Análise Semântica:
Introdução; Entradas na tabela de símbolos; Alocação de posições de memória |
16 |
16/06 |
Implementação da tabela de símbolos |
17 |
18/06 |
Verificação de tipos em variáveis e análise
semântica de expressões |
18 |
23/06 |
Avaliação 2ª etapa do projeto – Analisador
Sintático |
19 |
25/06 |
Verificação de tipos em comandos + exemplos |
20 |
30/06 |
Verificação de Tipos em expressões
aritméticas e relacionais + exemplos |
21 |
02/07 |
Detecção e Recuperação de Erros: Erros;
Acusando erros; Erros léxicos, sintáticos e semânticos |
22 |
07/07 |
Recuperação de erros sintáticos: método do
pânico |
23 |
09/07 |
Recuperação de erros sintáticos: método
formal p/ LL(1) |
24 |
14/07 |
Seminários – Tratamento e Recuperação de
Erros |
25 |
16/07 |
Avaliação 3ª etapa do projeto – Análise
Semântica |
26 |
21/07 |
Geração de código: Geração de código
intermediário; Árvore de derivação sintática |
27 |
23/07 |
Geração de código: Triplas de código
intermediário; tipos de triplas |
28 |
28/07 |
Geração de código: Expressão aritmética e
atribuição |
29 |
30/07 |
Geração de código: Comando condicional |
30 |
04/08 |
Geração de código: Comandos de repetição |
31 |
06/08 |
Aula de exercícios |
32 |
11/08 |
Prova 2 |
33 |
13/08 |
Avaliação 4ª etapa do Projeto – Geração de
Código + Tratamento Erros |
34 |
18/08 |
Reposição |
35 |
25/08 |
Final |
[INÍCIO]
·
Aho, Alfred V.;
Lam, Monica S.; Sethi, Ravi & Ullman, Jeffrey D.
Compiladores: Princípios, técnicas e ferramentas. Addison-Wesley, 2ª edição, 2008
·
Louden,
Kenneth C.
Compiladores: Princípios e Práticas. Ed. Thomson Learning,
2004
·
Aho, Alfred V.; Lam, Monica S.; Sethi, Ravi &
Ullman, Jeffrey D.
Compilers, Principles, Techniques and Tools. Addison-Wesley, 2nd
edition, 2006
·
Appel, Andrew W.; Palsberg, Jens.
Modern Compiler Implementation in Java.
Cambrige University Press, 2002
·
Grune,
H. Bal,
D.; Jacobs, C.; Langendoen, K.
Modern
Compiler Design, Addison-Wesley, 2000
[INÍCIO]
Nota 1: Prova 1 - 30%
Nota 2: Prova 2 - 30%
Nota 3: Projeto - 40%
O projeto será dividido em 06 partes:
- Parte 1: Especificação
- Parte 2: Analisador Léxico
- Parte 3: Analisador Sintático
- Parte 4: Analisador Semântico
- Parte 5: Tratamento e Recuperação de Erros
- Parte 6: Geração de Código
[INÍCIO]
1. Entrega do projeto: Especificação – 16/05/2008
2. Entrega do
projeto: Analisador Léxico – 01/06/2008
3. Prova 1 – 16/06/2008
4. Entrega do projeto: Analisador Sintático – 30/06/2008
5. Entrega do projeto: Análise Semântica – 28/07/2008
6. Prova 2 – 11/08/2008
7. Entrega do projeto: Tratamento de Erros e Geração de
Código – 13/08/2008
8. Prova de Reposição – 18/08/2008
9. Exame Final – 25/08/2008
[INÍCIO]
Horários de Atendimento
aos Alunos:
Segunda 14-16h
Quarta 14-16h
Monitor: Mariana Romão (mari.ufcg@gmail.com)
Sugestões e comentários sobre esta página
podem ser enviados para salerno@dsc.ufcg.edu.br