BCC328
Construção de Compiladores I

Prof. José Romildo Malaquias
Departamento de Computação
Instituto de Ciências Exatas e Biológicas
Universidade Federal de Ouro Preto
malaquias@ufop.edu.br
Sala 21 – DECOM – ICEB 3

2020/1

1 Dados gerais



Departamento Computação


Unidade Instituto de Ciências Exatas e Biológicas


Carga horária semanal 4 aulas teóricas


Duração 18 semanas


Carga horária semestral 72 horas-aula


Pré-requisitos
BCC222 – Programação Funcional
BCC244 – Teoria da Computação


Cursos Ciência da Computação: 6o período


2 Ementa

  1. Implementação de linguagens de programação: compilação e interpretação
  2. Análise léxica
  3. Análise sintática
  4. Análise semântica

3 Bibliografia

[1]

PIC
Torben Ægidius Mogensen. Introduction to Compiler Design. Inglês. 2a ed. Springer, 2017. isbn: 978-3-319-66965-6.

[2]

PIC
Andrew W Appel. Modern Compiler Implementation in ML. Inglês. 1a ed. Cambridge University Press, 1997. isbn: 0-521-60764-7. Livro-texto.

[3]

PIC
Alfred V Aho, Monica S Lam, Ravi Sethi e Jeffrey D Ullman. Compiladores: Princípios, Técnicas e Ferramentas. Português. 2a ed. Pearson, 2007. isbn: 9788588639249.

[4]

PIC
Reinhard Wilhelm, Helmut Seidl e Sebastian Hack. Compiler Design: Syntactic and Semantic Analysis. Inglês. Springer, 2013. isbn: 978-3642175398.

4 Objetivos

Ao final do curso é esperado que o aluno:

5 Metodologia de Ensino

6 Atividades Discentes

7 Avaliações

A avaliação será feita por um conjunto de provas escritas e um conjunto de trabalhos práticos. A tabela a seguir enumera as atividades de avaliação previstas, com os respectivos pesos na formação da nota final, e a data de realização da avaliação.






Avaliação Peso Data Assuntos





Prova 1 2,5 22/04/2019 qua Introdução, gramáticas livre de contexto, análise léxica





Prova 2 2,5 27/05/2019 qua Análise sintática (primeira parte)





Prova 3 2,5 29/06/2019 seg Análise sintática (segunda parte), análise semântica





Trabalhos 2,5





Exame especial 15/07/2019 seg De acordo com a resolução CEPE 2.880





As atividades deverão ser submetidas através da plataforma Moodle da UFOP: https://www.moodlepresencial.ufop.br/course/view.php?id=31311

8 Código de honra do aluno

Este assunto deve ser muito simples. Não entregue trabalhos de outra pessoa como sendo seus, e não compartilhe suas soluções com outros alunos.

Você deve se sentir livre para discutir os problemas propostos e os projetos de programação com os colegas, mas todo trabalho que você submeter ao professor deve ser de sua própria autoria. Ou seja, você deve elaborar suas próprias soluções para os problemas e implementar seus projetos de programação você mesmo.

Se você discutir suas idéias com outros estudantes, não tem problema, mas faça uma observação sobre o mesmo na submissão do seu trabalho.

As atividades propostas são para trabalho individual.

9 Ferramentas

Nas aulas será utilizada a linguagem OCaml para implementação das técnicas de construção de compiladores. Também serão utilizadas ferramentas auxiliares na implementação de alguns módulos do compilador, como geradores de analisadores léxicos (), geradores de analisadores sintáticos (menhir), e geradores de código (LLVM).

10 Aulas







#
Data
Assuntos

Atividades







01 02/03 Seg Apresentação da disciplina
OCaml
Lista de exercícios







02 04/03 Qua Compilação e interpretação
Introdução







03 09/03 Seg Linguagem de implementação







04 11/03 Qua Gramáticas
Straightline






05 16/03 Seg (Continuação)







06 18/03 Qua Análise léxica: introdução







07 23/03 Seg Análise léxica: ad hoc
Exemplo







08 25/03 Qua Análise léxica: expressões regulares
CS143 Lexical Analysis







09 30/03 Seg Análise léxica: autômatos finitos







10 01/04 Qua Análise léxica: geradores
Aula prática: Análise Léxica







11 06/04 Seg Análise léxica: projeto







12 08/04 Qua Análise sintática: introdução







13 13/04 Seg Análise sintática: análise descendente recursiva







14 15/04 Qua Análise sintática: tabelas LL(0) e LL(1)







20/04 Seg (Recesso acadêmico)






15 22/04 Qua Prova 1







16 27/04 Seg Análise sintática: análise ascendente: autômato de pilha







17 29/04 Qua Análise sintática: análise ascendente: tabela LR(0)







18 04/05 Seg Análise sintática: análise ascendente: tabela SLR







19 06/05 Qua Análise sintática: análise ascendente: tabela LR(1)







20 11/05 Seg Análise sintática: análise ascendente: tabela LALR(1)







21 13/05 Qua Análise sintática: análise ascendente: hierarquia de gramáticas







22 18/05 Seg Análise sintática: análise ascendente: resolução de conflitos







23 20/05 Qua Análise sintática: gerador







24 25/05 Seg Análise sintática: projeto







25 27/05 Qua Prova 2







26 01/06 Seg Árvores de sintaxe abstrata







27 03/06 Qua Análise semântica: introdução







28 08/06 Seg Análise semântica: tabelas de símbolo







29 10/06 Qua Análise semântica: tipagem







30 15/06 Seg Análise semântica: regras de análise semântica







31 17/06 Qua Análise semântica: escopo







32 22/06 Seg Análise semântica: projeto







33 24/06 Qua Geração de código: introdução







34 29/06 Seg Prova 3







35 01/07 Qua Geração de código: LLVM







06/07 Seg Exame especial







11 Trabalhos




Assunto

Trabalho

Data entrega



12 Avaliações de semestres anteriores

2013–2 Prova 1
2013–2 Prova 2
2013–2 Prova 3
2014–1 Prova 1
2014–1 Prova 2
2017–2 Prova 1
2017–2 Prova 2
2019–1 Prova 1
2019–1 Prova 2

13 Notas e frequências

Resultados de avaliações e frequências

Última atualização: 2020-03-11 16:24:37 por José Romildo Malaquias.