Compiladores - 2008.1

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)


Objetivos

Listas de Exercícios

Programa

Descrição do Projeto Compiladores

Plano de aulas

Notas dos Alunos

Bibliografia

Lista de Discussão

Critérios de avaliação

Material do Curso

Datas importantes

 

 


Objetivos

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]


 Programa

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]


Plano de Aulas

 

 

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]


Bibliografia 

·         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]


Critérios de Avaliação

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]


 

Datas Importantes 

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