4a. feira e 6a. feira, sempre de 11:00 às 12:40 na sala 315.
Monitor: João Pedro Abreu (jp_abreu AT ID . UFF . BR)
Objetivo
Apresentar conceitos básicos da construção de compiladores.
Tópicos
- Análise sintática
- Análise semântica
- Geração de código
Datas importantes
P1 - 19 e 21/09 - Expressões e comandos.
Objetivos:
- Ambientar-se com a linguagem escolhida e suas ferramentas.
- Entender LL, laLR e PEG.
- Entender o Π Framework.
- Implementar Π lib-mark0: (i) Interpreting Automata, (ii) operações aritméticas, Booleanas e comandos.
- Implementar um parser LL, laLR ou PEG para Imp-mark0: operações aritméticas, Booleanas e comandos.
- Implementar um compilador de Imp-mark-0 com operações aritméticas, Booleanas e comandos para Π lib-mark0.
P2 - 24 e 26/08 - Definições e declarações
Objetivos:
- Especificar a semântica de declarações utilizando o Π Framework.
- Implementar um parser LL, laLR ou PEG para Imp-mark1estendendo Imp-mark0 com declarações de variáveis e constantes.
- Implementar Π lib-mark1: (i) Interpreting Automata com ambientes, (ii) declarações de variáveis e constantes.
- Implementar um compilador de Imp-mark1 para Π lib-mark1.
P3 - 05 e 07/12 - Funções e procedimentos
Objetivos:
- Especificar a semântica de procedimentos e funções utilizando Π Framework.
- Implementar um parser LL, laLR ou PEG para Imp-mark2 estendendo Imp-mark1 com procedimentos e funções recursivas.
- Implementar Π lib-mark2: (i) Declarações de operações e funções recursivas.
- Implementar um compilador de Imp-mark2 para Π lib-mark2.
Linguagens
Critério de avaliação
- Três provas (P1, P2 e P3) e uma verificação suplementar (VS).
- Seja a média das provas (MP) = (P1+P2+P3)/3
- Se MP ≥ 6, o aluno está aprovado.
- Se MP < 4, o aluno está reprovado.
- Se 4 ≤ MP < 6, o aluno deve fazer VS. Neste caso, ficará aprovado se VS ≥ 6 e reprovado caso contrário.
Durante as aulas e em cada prova, a avaliação será feita segundo os seguintes critérios:
Em aula 10% | Apresentação 70% | Projeto 20% |
Presença 30%, Participação 70% | Completude 15%, Corretude 15%, Clareza/Qualidade 10%, Participação 60% | Completude 40%, Corretude 40%, Testes 20% |
Grupos
# | Linguagem | Integrantes | Dia de apresentação | Link para o projeto |
1 | Rust | Arthur Silva, João Pedro Sá e André Pereira | 4a. feira | Rust(antigo): https://github.com/jpsmedeiros/impiler_v1, Scala(novo): https://github.com/jpsmedeiros/impiler |
2 | Haskell | Leonardo Almeida, Marcelo Muniz, e Rodrigo Esteves | 4a. feira | https://github.com/mpjmuniz/pilib-hs-c20182 |
3 | Clojure | Daniel Carias | 6a. feira | https://github.com/cariasdaniel/compil_clojure_2018-2/tree/with_insta/comp_clojure |
Referência bibliográfica
- Bryan Ford, Parsing Expression Grammars: A Recognition-Based Syntactic Foundation, Symposium on Principles of Programming Languages, January 14-16, 2004, Venice, Italy.
- Aho, Sethi, Ullman, Compilers: Principles, Techniques, and Tools, Addison-Wesley, 1986. ISBN 0-201-10088-6
Documentação complementar
- Slides do curso
- Π Framework
- Template para preparação das apresentações
- The Maude system
Page last modified on March 12, 2020, at 06:06 PM