Departamento | Computação |
Unidade | Instituto de Ciências Exatas e Biológicas |
Carga horária semanal | 4 teóricas |
Duração | 18 semanas |
Carga horária semestral | 72 horas-aula |
Pré-requisitos | POO, Teoria da Computação |
Cursos | Ciência da Computação: obrigatória 6o período |
Torben Ægidius Mogensen. Introduction to Compiler Design. Inglês. 2a ed. Springer, 2017. isbn:
978-3-319-66965-6.
Andrew W Appel. Modern Compiler Implementation in Java. Inglês. 1a ed. Cambridge University
Press, 1997. isbn: 0-521-58388-8. Livro-texto.
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.
Compiler Design: Syntactic and Semantic Analysis. Inglês. Springer, 2013. isbn: 978-3642175398.
Ao final do curso é esperado que o aluno:
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 |
70% | 24/09/2018 | segunda-feira | Introdução, gramáticas livre de contexto, análise léxica |
Prova 2 | 29/10/2018 | segunda-feira | Análise sintática 1 | |
Prova 3 | 12/12/2018 | quarta-feira | Análise sintática 2, análise semântica | |
Trabalhos | 30% | |||
Exame especial | 19/12/2018 | quarta-feira | 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=21713
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.
Existe um grupo de discussão sobre o conteúdo do curso no Google Groups que deverá ser utilizado ativamente pelos alunos e professor durante o curso. O professor poderá propor questões para discussão no grupo, bem como problemas para serem resolvidos.
Caberá aos alunos discutir as questões e problemas propostos, apontando soluções básicas e/ou soluções alternativas ou comentando o assunto. Os alunos poderão também propor algum problema ou levantar alguma questão para discurtir que julgar interessante.
O endereço do grupo de discussão é http://groups.google.com/group/bcc328.
Cada aluno deverá se inscrever imediatamente no grupo e começar a participar das discussões.
Nas aulas será utilizada a linguagem Java para implementação das técnicas de construção de compiladores. Também serão utilizadas ferramentas auxiliares na implementação das diversas fases da compilação, como geradores de analisadores léxicos (JFlex), geradores de analisadores sintáticos (Java CUP), e geradores de código (LLVM).
Para desenvolvimento dos projetos recomenda-se a IDE IntelliJ IDEA.
# | Data | Assuntos | Atividades |
||
01 | 13/08 | Seg | Apresentação da disciplina |
|
|
02 | 15/08 | Qua | Compilação e interpretação Introdução |
|
|
03 | 20/08 | Seg | Gramáticas |
|
|
04 | 22/08 | Qua | Análise léxica: introdução |
|
|
05 | 27/08 | Seg | Análise léxica: ad hoc Exemplo |
|
|
06 | 29/08 | Qua | Análise léxica: expressões regulares CS143 Lexical Analysis |
|
|
07 | 03/09 | Seg | Análise léxica: autômatos finitos |
|
|
08 | 05/09 | Qua | Análise léxica: geradores Aula prática: Análise Léxica |
|
|
09 | 10/09 | Seg | Análise léxica: projeto |
|
|
10 | 12/09 | Qua | Análise sintática: introdução |
|
|
11 | 17/09 | Seg | Análise sintática: análise descendente recursiva |
|
|
12 | 19/09 | Qua | (Continuação) |
|
|
13 | 24/09 | Seg | Prova 1 |
|
|
14 | 26/09 | Qua | Análise sintática: análise ascendente: autômato de pilha |
|
|
15 | 01/10 | Seg | Análise sintática: análise ascendente: tabela LR(0) |
|
|
16 | 03/10 | Qua | Análise sintática: análise ascendente: tabela SLR |
|
|
17 | 08/10 | Seg | Análise sintática: análise ascendente: tabela LR(1) |
|
|
18 | 10/10 | Qua | Análise sintática: análise ascendente: tabela LALR(1) |
|
|
19 | 15/10 | Seg | Análise sintática: análise ascendente: hierarquia de gramáticas |
|
|
20 | 17/10 | Qua | Análise sintática: análise ascendente: resolução de conflitos |
|
|
21 | 22/10 | Seg | Análise sintática: gerador |
|
|
22 | 24/10 | Qua | Análise sintática: projeto |
|
|
23 | 29/10 | Seg | Prova 2 |
|
|
24 | 31/10 | Qua | Árvores de sintaxe abstrata |
|
|
25 | 05/11 | Seg | Análise semântica: introdução |
|
|
26 | 07/11 | Qua | Análise semântica: tabelas de símbolo |
|
|
27 | 12/11 | Seg | Análise semântica: tipagem |
|
|
28 | 14/11 | Qua | Análise semântica: regras de análise semântica |
|
|
29 | 19/11 | Seg | Análise semântica: escopo |
|
|
30 | 21/11 | Qua | Análise semântica: projeto |
|
|
31 | 26/11 | Seg | Geração de código: introdução |
|
|
32 | 28/11 | Qua | Geração de código: LLVM |
|
|
33 | 03/12 | Seg | (Continuação) |
|
|
34 | 05/12 | Qua | (Continuação) |
|
|
35 | 10/12 | Seg | (Continuação) |
|
|
36 | 12/12 | Qua | Prova 3 |
|
|
19/12 | Qua | Exame especial |
|
||
Assunto | Trabalho | Data entrega |
Análise léxica
| Implementar um analisador léxico para a linguagem de programação apresentada por Torben em seu livro de compiladores, no capítulo 4 (gramática 4.1). Você pode usar a seguinte estrutura de projeto: https://github.com/romildo/torben-java/tree/5e04d18234f519520690cf977a37ceeb27f2913b, bastanto implementar as regras de análise léxica, testes, e documentação. Na documentação é essencial descrever a estrutura léxica da linguagem. Você deverá criar um projeto no github contendo a documentação e a implmentação do analisador léxico.
| 16/09/2018 (domingo) |
Análise sintática descendente recursiva
| Implementar um analisador sintático preditivo para a linguagem de programação apresentada por Torben em seu livro de compiladores, no capítulo 4 (gramática 4.1), usando o o analisador léxico do trabalho anterior. Na documentação é essencial descrever a estrutura sintática da linguagem. Inclua também o procedimento desenvolvido para obter o analisador sintático (tabelas do nullable, first, follow, e LL(1)). Você deverá atualizar o seu projeto no github contendo a documentação e a implmentação do analisador sintático.
| 29/10/2018 (segunda) |
Interpretador
| Implementar um interpretador para a linguagem de programação apresentada por Torben em seu livro de compiladores, no capítulo 4 (gramática 4.1), aqui chamada de Picnic. Você deverá implementar o interpretador a partir do projeto disponibilizado em https://github.com/romildo/picnic-java. Estenda Picnic com:
Documente:
| 12/10/2018 (quarta) |
|
Equipes de estudo:
Prova | Soluções |
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 | |
Resultados de avaliações e frequências
Última atualização: 2018-12-03 16:13:53 por José Romildo Malaquias.