DIM0339 – Compiladores (Engenharia 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

90 horas-aula (15 semanas).
UFRN – Setor III – Sala DA2.
Horário: 24T456

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 nota 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 (conforme combinado com o professor)

A linguagem de programação a ser implementada nos trabalhos práticos será definida 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 prova do dia 05/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

15/08/05

Introdução

(Prof Vicente)

2

17/08/05

Análise Léxica.

(Prof Vicente)

3

22/08/05

Análise Léxica.

(Prof Vicente)

4

24/08/05

Análise Léxica.

(Prof Vicente)

5

29/08/05

Análise Léxica.

(Prof Vicente)

6

31/08/05

Análise Léxica.

(Prof Vicente)

7

05/09/05

Análise Sintática.

(Prof Vicente)

8

07/09/05

Análise Sintática.

(Prof Vicente)

9

12/09/05

Análise Sintática.

(Prof Vicente)

10

14/09/05

Primeira Prova

(Prof Vicente)

11

19/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.

12

21/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. Definição do primeiro trabalho prático junto a cada equipe.

13

26/09/05

Análise Sintática.

Análise sintática descendente. Construção de conjuntos PRIMEIROS, SEGUINTES, e PREDICT. Linguagens LL(1); Analisadores sintáticos descendentes dirigidos por tabela. Definição do primeiro trabalho prático junto a cada equipe.

14

28/09/05

Trabalho pratico

Especificação de um analisador léxico. - Lex: um gerador de analisadores léxicos.
Definição dos tokens do trabalho prático com cada equipe.

15

03/10/05

 

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

16

05/10/05

 

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

17

10/10/05

Trabalho prático.

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

18

12/10/05

Feriado

 

19

17/10/05

Análise Sintática.

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

20

19/10/05

Análise Sintática.

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

21

24/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

26/10/05

Análise Semântica.

Aula pratica: Analisador sintático de cada equipe.

23

31/10/05

Análise Semântica.

 

24

02/11/05

Feriado

 

25

07/11/05

Análise Semântica.

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

26

09/11/05

Análise Semântica.

Tipos e escopo – Verificação estática de tipos.

27

14/11/05

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

Aula pratica: Analisador semântico de cada equipe.

28

16/11/05

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

Geração de código.

29

21/11/05

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

Aula prática.

30

23/11/05

Aula prática.

Consulta sobre o trabalho pratico

31

28/11/05

Vestibular

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

32

30/11/05

Vestibular

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

33

05/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)

34

19/12/05

Quarta 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.