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.
· 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
· 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 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.
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 prova do dia 05/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 |
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. |
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. |
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. |
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.