DIM0306 – Compiladores I (Ciências da Computação)

Folha de Informação

UFRN, Natal, Segundo Semestre de 2005

Objetivos | Professor... | Visão Geral do Curso | Livro-Texto | Avaliação | Programação de Aulas | Listas de Exercicios e Trabalhos Práticos | Referências

NOVO: Notas finais da disciplina.

Para ver a 4ta prova, passar na sala do professor na 6ta-feira (23/12/2005), entre as 10:30 e 11:30 horas.

Objetivos

·         Propiciar o entendimento dos fundamentos de linguagens de programação e dos conceitos que orientam o seu projeto.

·         Estudar métodos e ferramentas para a implementação de processadores de linguagens de programação.

Professor, Carga Horária, Local e Hora

Martin A. Musicante

60 horas-aula (15 semanas).
UFRN – Setor III – Sala DA2.
Horario: 35T34

Visão Geral do Curso

·         Apresentação.

·         Conceitos básicos ao projeto de linguagens de programação.

·         Linguagens e Tradutores; Compiladores e Interpretadores;

·         A Estrutura de um Compilador;

·         Análise Léxica;

·         Análise Sintática;

·         Representação Intermediária;

·         Análise Semântica;

·         Geração e Otimização de Código;

·         Ferramentas de Auxílio à Construção de Compiladores.

Como parte do curso, o aluno (em grupos de duas pessoas) deverá implementar um compilador para uma linguagem de programação simples, a ser definida por cada grupo. A implementação deste compilador será feita mediante um trabalho prático.

Livro Texto

A disciplina não seguirá um livro-texto específico. As referências bibliográficas mais importantes do curso são:

·         Aho,A.V. & Sethi,R. & Ullman,J.D. - Compiladores. Princípios, Técnicas e Ferramentas - Guanabara - Koogan, 1995.

·         Notas sobre construção de compiladores de Universidade de Manitoba (disponíveis em http://www.cs.umanitoba.ca/~pgraham/429.html ).

 

Avaliação

A avaliação do aluno será em função das notas (de 0 a 100) obtidas nos seguintes exercícios:

·         Dois testes de avaliação (individuais, escritos, valendo para a primeira e segunda notas do semestre).

·         Um trabalho prático de implementação (em grupos de no máximo duas pessoas, valendo para a terceira nota do semestre):

o        Implementação de um analisador léxico.

o        Implementação de um analisador sintático e verificador de tipos ou gerador de código

A linguagem de programação a ser implementada nos trabalhos práticos será definida, junto a cada equipe no decorrer do curso.

A média da disciplina será calculada como a média ponderada das notas obtidas nos itens acima. O cálculo da nota será feito usando a seguinte fórmula: Média = (4*p1 + 5*p2 + 6*t1)/15, onde p1, p2 e t1 correspondem respectivamente às notas da primeira e segunda prova escrita e à nota do trabalho prático.

Importante:

 

1.      As equipes de trabalhos práticos estão definidas neste link.

  1. Cada equipe deverá implementar o trabalho segundo o combinado em sala de aula.

  2. O trabalho deverá ser entregue, em mãos, ao professor no horário da aula do dia 06/12/2005.

  3. O trabalho deverá ser entregue em disquete ou CD de dados, e deve conter um manual de instruções e um descritivo simples da linguagem a ser executada. O manual deve conter, também, a descrição de quaisquer restrições que tenham sido feitas à linguagem, assim como instruções de compilação dos programas fontes do compilador e instruções de uso do compilador.

  4. Cada trabalho deve ser identificado com o nome dos autores em todos os programas.

  5. Apenas programas fontes serão avaliados. O trabalho deve ser acompanhado de um manual de instruções no qual apareça claramente dito como gerar o compilador a partir dos fontes. Não serão considerados programas executáveis entregues junto ao trabalho.

7.      Trabalhos entregues fora do prazo serão aceitos, porém, tendo uma redução de 33% da nota por cada dia de atraso.

Programação de Aulas

Aula

Data Prevista

Conteúdo

Observações

1

16/08/05

Introdução

(Prof Vicente)

2

18/08/05

Análise Léxica.

(Prof Vicente)

3

23/08/05

Análise Léxica.

(Prof Vicente)

4

25/08/05

Análise Léxica.

(Prof Vicente)

5

30/08/05

Análise Léxica.

(Prof Vicente)

6

01/09/05

Análise Léxica.

(Prof Vicente)

7

06/09/05

Análise Sintática.

(Prof Vicente)

8

08/09/05

Análise Sintática.

(Prof Vicente)

9

13/09/05

Análise Sintática.

(Prof Vicente)

10

15/09/05

Análise Sintática.

(Prof Vicente)

11

20/09/05

Primeira Prova

(Prof Vicente)

12

22/09/05

Revisão de conceitos

Apresentação do curso. Visão histórica; Processadores de Linguagens; Tipos de tradutores; Arquitetura de um compilador. Análise Léxica: Necessidade desta fase; Conceitos: Expressões regulares e autômatos finitos. Implementação de analisadores léxicos. Definição dos grupos de trabalhos práticos.

13

27/09/05

Revisão de conceitos

A função do analisador sintático; Gramáticas. Gramáticas para linguagens de programação. Tipos de análise sintática. Eliminação da recursão à esquerda e eliminação da ambigüidade em gramáticas livres de contexto. Análise Sintática LL – Condição LL(1).Construção de analisadores sintáticos recursivos descendentes. Análise sintática descendente. Construção de conjuntos PRIMEIROS, SEGUINTES, e PREDICT.
Definição do trabalho prático junto a cada equipe.

14

29/09/05

 

Evento de planejamento do CCET

15

04/10/05

 

XI CIENTEC & IV Workshop Técnico Científico do DIMAp

16

06/10/05

 

XI CIENTEC & IV Workshop Técnico Científico do DIMAp

17

11/10/05

Análise Sintática.

Linguagens LL(1); Analisadores sintáticos descendentes dirigidos por tabela.
Especificação de um analisador léxico. - Lex: um gerador de analisadores léxicos.
Definição do trabalho prático junto a cada equipe.

18

13/10/05

Trabalho pratico

Definição da gramática da linguagem do trabalho prático com cada equipe.

19

18/10/05

Análise Sintática.

Análise sintática ascendente. Método LR. Linguagens LR(1). Método SLR(1);

20

20/10/05

Análise Sintática.

Análise sintática ascendente. Método LR. Linguagens LR(1). Método SLR(1);

21

25/10/05

Análise Sintática.

Yacc/Bison: um gerador de analisadores sintáticos. Definição do analisador sintático de cada equipe de trabalho.

22

27/10/05

Análise Sintática.

Aula pratica: Analisador sintático de cada equipe.

23

01/11/05

Análise Sintática.

Aula pratica: Analisador sintático de cada equipe.

24

03/11/05

Análise Semântica.

Tradução dirigida por sintaxe. Gramáticas de Atributos.

25

08/11/05

Análise Semântica.

Tipos e escopo – Verificação estática de tipos. Geração de código.

26

10/11/05

Geração e otimização de Código.

Aula pratica: Analisador semântico de cada equipe.

27

17/11/05

Geração e otimização de Código.

Aula prática.

28

22/11/05

Geração e otimização de Código.

Aula prática.

29

24/11/05

Aula prática.

Consulta sobre o trabalho prático e listas de exercícios.

30

29/11/05

Vestibular

Consulta sobre o trabalho prático e listas de exercícios. (sala do professor)

31

01/12/05

Vestibular

Consulta sobre o trabalho prático e listas de exercícios. (sala do professor)

32

06/12/05

Segunda Prova.
Sala e horário da disciplina – Prova com consulta e com tempo bem definido (100 minutos).

Entrega do trabalho. (vale como 3ra avaliação)

33

15/12/05

Prova Final.

Sala e horário da disciplina – Prova SEM consulta e com tempo bem definido (100 minutos). Cobre toda a matéria, inclusive o trabalho prático.



Referências

1.     Aho,A.V. & Sethi,R. & Ullman,J.D. Compiladores. Princípios, Técnicas e Ferramentas. Guanabara-Koogan, 1995.

2.     P.D.Terry. Compilers and Compiler Generators. 1996. Disponível em http://www.scifac.ru.ac.za/compilers/ .

3.     V.Paxon. Flex - Version 2.5. Disponível em http://www.inf.ufpr.br/~mam/disciplinas/ci211/flex.pdf.

4.     C.Donnelly & R.Stallman. Bison. Disponível em http://www.inf.ufpr.br/~mam/disciplinas/ci211/bison.pdf.