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.
· 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
· 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.
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 ).
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.
Cada equipe deverá implementar o trabalho segundo o combinado em sala de aula.
O trabalho deverá ser entregue, em mãos, ao professor no horário da aula do dia 06/12/2005.
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.
Cada trabalho deve ser identificado com o nome dos autores em todos os programas.
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.
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. |
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. |
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. |
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. |
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.