4a. feira e 6a. feira, sempre de 11:00 às 12:40 na sala 315.
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 - 25 e 27/04 - Expressões e comandos.
Objetivos:
- Ambientar-se com a linguagem escolhida e suas ferramentas.
- Entender PEG.
- Entender SMC.
- Implementar BPLC-mark0: (i) O tipo de dados SMC, (ii) operações aritméticas, Booleanas e comandos.
- Implementar um parser PEG para operações aritméticas, Booleanas e comandos.
- Implementar um compilador de AST PEG para operações aritméticas, Booleanas e comandos para BPLC-mark0.
P2 - 06 e 08/06 - Definições e declarações
Objetivos:
- Entender a semântica operacional de declarações.
- Especificar a semântica de declarações utilizando SMC. (Interpreting automata)
- Implementar um parser PEG para declarações de variáveis, constantes e inicializações em Imp-mark1.
- Implementar BPLC-mark1: (i) O tipo de dados SMC com ambientes, (ii) declarações de variáveis e constantes.
- Implementar um compilador de Imp-mark1 para BPLC-mark1.
P3 - 04 e 06/07 - Funções e procedimentos (slides)
Objetivos:
- Entender a semântica operacional de procedimentos e funções recursivas.
- Especificar a semântica de procedimentos e funções utilizando SMC. (Interpreting automata)
- Implementar um parser PEG para procedimentos e funções recursivas em Imp-mark2.
- Implementar BPLC-mark2: (i) Declarações de operações e funções recursivas.
- Implementar um compilador de Imp-mark2 para BPLC-mark2.
Linguagens
- Racket, PEG in Racket
- F#, ScanRat a PEG Parser Generator for F#
- Go, Pigeon a PEG Parser Generator for Go
- JavaScript, PEGjs a PEG Parser Generator for JavaScript
- Ruby, Parslet a PEG Parser Generator for Ruby
- Groovy, DSL support.
- Elixir, neotoma PEG/Packrat toolkit and parser-generator.
- Clojure, Unofficial PEG
- Curry, Parser library
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 | Racket | Luis Freitas, João Pedro Abreu e Rafael Leardini | 4a. feira | https://github.com/Grupo-de-compiladores/apresenta-o-de-racket?files=1 |
2 | Ruby | Júlia Falcão, Walace e Raffael Muralha | 4a. feira | https://github.com/wallacebaleroni/DeceptiCompiler |
3 | JavaScript | Caio e Eduardo | 6a. feira | https://github.com/dudu631/Warlock |
4 | F# | Erik, Max e Vitor Lourenço | 6a. feira | https://github.com/MFrat/TCC-00.289-Compiladores |
5 | Elixir | Phelipe, Alysson e Fernando Mendes | 4a. feira | https://github.com/fjmendes1994/george-compiler |
6 | Go | Leonardo Machado, Arthur Ferraz e José Henrique | 6a. feira | https://github.com/leosch92/imperador_golias |
Ordem das apresentações:
- 4a. feira: 1, 2 e 5
- 6a. feira: 3, 4 e 6
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.
- Gordon Plotkin, A structural approach to operational semantics, The Journal of Logic and Algebraic Programming 60–61 (2004) 17–139
- Aho, Sethi, Ullman, Compilers: Principles, Techniques, and Tools, Addison-Wesley, 1986. ISBN 0-201-10088-6
Documentação complementar
- The Maude system
- BPLC library e a linguagem IMP.
- Template para preparação das apresentações.
Page last modified on March 12, 2020, at 06:06 PM