Compiladores 1
Bacharelado em Ciência da Computação
- Código: 750008
- Semestre: VIII
- Horário/Sala: 22[1,2]/325, 42[3,4]/sala2-MM
Avisos
- 27/Mar: Notas Finais Consolidadas. Avaliação final, enviada para registro.
- 27/Mar: Notas Finais da turma 2006/2, contemplando notas do Exame.
- 21/Mar: O exame será realizado no dia 26/março, com início as 8h da manhã e duração máxima de 4 horas - Sala 110.
- 20/Mar: As notas da turma 2006/2 foram atualizadas contemplando a avaliação da prova de recuperação e o trabalho optativo 2.
- 20/Mar: Estarei atendendo no gabinete na quarta, dia 21/Mar, durante o horário da aula, para conferência das notas.
- 19/Mar: Atenção: no trabalho optativo 2 o limite é de 1.500 caracteres!!!
- 17/Mar: Notas da turma 2006/2 Atualizado.
- 15/Mar: Notas da turma 2006/2. As notas apresentadas devem ser conferidas em sala de aula. As médias foram computadas considerando os instrumentos de avaliação já finalizados e avaliados.
- 11/Mar: Especificação do Trabalho Opcional 2 disponibilizada.
- 27/Jan: Exame confirmado para 26/mar, das 8 as 12h.
- 5/Jan: Cronograma atualizado.
- 28/Dez: Especificação do trabalho de implementação.
- 11/Dez: Aulas extras: 12/Dez, terça (Sala 225) e 13/Dez, quarta (Sala 304), em ambos dias das 13 às 14h. Material de apoio: Apoio 9.
- 08/Dez: Serão marcados, na aula do dia 11/Dez, dois horários alternativos para apresentação do YACC. Esta atividade diz respeito à recuperação da aula do dia 6/Dez. Quem não puder vir neste dia, comunique aos colegas suas disponibilidades. O material a ser trabalhado durante esta atividade encontra-se em Apoio 9 e no arquivo fonte com exemplos.
- 05/Dez: Aula do dia 6/Dez, quarta: os alunos estão liberados para assistir as apresentações do XV CIC. Horários alternativos serão combinados para aulas extras em laboratório (yacc/bison).
- 20/Nov: Divulgação do trabalho opcional 1
- 17/Nov: Material de apoio disponível na central de cópias Praça XV
- 23/Out: Início do semestre 2006/2
Cronograma
| Data |
Aula |
Assunto |
Material |
| 23/out |
1 |
Apresentação. Introdução ao processo de compilação. Noções introdutórias. |
Aho, Cap. 1. Price, Cap 1. Apoio 1 |
| 25/out |
2 |
Análise Léxica. Gramáticas e Linguagens Regulares. Tokens. |
Aho, Cap. 2. Price, Cap 2. Lesk. Apoio 2 |
| 30/Out |
3 |
Introdução ao Lex |
(Lesk), Apoio 3 |
| 01/Nov |
4 |
Implementação de Analisador Léxico |
Exercício corrigido: Uma calculadora muito simples, Apoio 4 |
| 06/Nov |
5 |
Análise Sintática. Revisão: Gramáticas Livre de Contexto |
Apoio 5 |
| 08/Nov |
6 |
Análise Sintática Top Down |
Apoio 6 |
| 13/Nov |
7 |
Análise Sintática Top Down |
Apoio 7 |
| 15/Nov |
8 |
Análise Sintática Top Down |
Continuação |
| 20/Nov |
9 |
Análise Sintática Top Down |
Continuação |
| 22/Nov |
10 |
Parser top-down LL(k) |
JavaCC, Exemplos de aula |
| 27/Nov |
11 |
Semana Acadêmica |
SACOMP |
| 29/Nov |
12 |
Semana Acadêmica |
SACOMP |
| 04/Dez |
13 |
Análise sintática Bottom-up |
Definição trabalho |
| 06/Dez |
14 |
Participação no Congresso de IC |
Confira programação: XV CIC |
| 11/Dez |
15 |
Análise sintática Bottom-up, Analisadores LR |
Apoio 8, Apoio 10 |
| 13/Dez |
16 |
Analisadores LR |
Continuação |
| 18/Dez |
17 |
Prova 1 (Parte A) |
|
| 20/Dez |
18 |
Prova 1 (Parte B) |
Entrega do Trabalho Opcional 1 |
|
|
Recesso |
|
| 22/Jan |
19 |
Análise semântica |
Apoio 11 |
| 24/Jan |
20 |
Análise semântica |
Execícios |
| 29/Jan |
21 |
Análise de tipos |
Apoio 12, apresentar esboço da linguagem do trabalho |
| 31/Jan |
22 |
Análise de tipos |
| 5/Fev |
23 |
Ambiente de execução |
Apoio 13 |
| 7/Fev |
24 |
Ambiente de execução |
| 12/Fev |
25 |
Código intermediário |
Apoio 14, Exercício: tabela de símbolos |
| 13/Fev |
26 |
Código intermediário |
| 19/Fev |
27 |
Ponto Facultativo |
| 21/Fev |
28 |
Laboratório |
| 26/Fev |
29 |
Prova 2 (Parte A) |
| 28/Fev |
30 |
Otimização |
Apoio 15 |
| 5/Mar |
31 |
Prova 2 (Parte B) |
| 7/Mar |
32 |
Geração de código assembly |
| 12/Mar |
33 |
Entrega do trabalho |
Primeira oportunidade |
| 14/Mar |
34 |
Entrega do trabalho |
Segunda oportunidade |
| 19/Mar |
35 |
Recuperação |
Entrega do trabalho opcional 2 |
| 26/Mar |
37 |
Exame |
Confirmado. Das 8 as 12h |
Avaliações
- Freqüência mínima: 75% (27 horas-aula).
- Avaliação do semestre: (P1+P2+TrabImpl)/3
- Recuperação: A matéria da prova de recuperação (aka optativa) é cumulativa da matéria do semestre e substitui a nota de uma das provas (indicada pelo aluno).
- Aprovação sem exame: média do semestre igual ou superior à 7,0.
- Aprovação com exame: média do semestre igual ou superiorà 5,0.
- Além da freqüência de 75%, nota igual ou superior a 3,0.
- A média do exame será calculada com média aritmética simples entre a média obtida no semestre e a nota obtida no exame.
- O exame será realizado em 4 horas/aula consecutivas (sem intervalos) em data a ser determinada pelo professor dentro do período previsto a efeito no calendario acadêmico da UFPel.
Ementa
Estrutura de um compilador/interpretador: módulos componentes, interfaces, análise léxica, análise sintática, análise semântica e geração de código.
Objetivos da disciplina
Esta disciplina tem o objetivo de propiciar ao aluno a oportunidade de aprender e compreender os vários aspectos relacionados com o projeto e a implementação de programas da categoria dos compiladores de linguagens (compiladores, interpretadores, formatadores de textos, shell de sistema operacional etc). Na construção destes conhecimentos são largamente usados os conceitos relacionados às linguagens de programação e às linguagens formais, particularmente a construção e a transformação de gramáticas, bem como as definições de sintaxe, semântica e ambiente de execução.
Conteúdo programático
- Modelo de um compilador
- Análise léxica
- Autômatos finitos
- Análise léxica
- Análise sintática
- Árvore sintática
- Análises top-down e bottom-up
- Analisador descendente recursivo
- Analisadores preditivos
- Transformações de gramáticas
- Analisador shift-reduce
- Gramática de operadores
- Precedência de operadores
- Parser preditivo não-recursivo
- Tradução orientada à sintaxe
- Analisadores LR (SLR e LALR)
- Análise semântica
- Conversão de tipos implícita e explícita
- Implementação do analisador semântico
- Geração de código intermediário
- Código intermediário de triplas e de quádruplas
- Algoritmo de tradução
- Otimização de código
- Flow-charts
- Análise de data-flow
- Otimização peep-hole
- Geração de código objeto
- Código objeto
- Ambiente de execução
- Algoritmo de tradução
Bibliografia
- Básica:
- Alfred V. Aho, Jeffrey D. Ullman, Revi Sethi. Compiladores: Princípios, Técnicas e Ferramentas. Rio de Janeiro: LTC. 1995.
- Ana Price, Simão Toscani. Implementação de Linguagens de Programação: Compiladores. Porto Alegre: Sagra Luzzato, 2005.
- Complementar:
- D. Grune, H. Bal, K. Langendoen. Projeto moderno de compiladores - Implementação e Aplicações. Rio de Janeiro: Campus, 2001.
- T. Mason, D. Brown. Lex & Yacc. New York: O'Reilly, 1991.
Recursos
<< Volta