Print - - Edit

TCC-00.289 Compiladores, 2020.1

4a. feira e 6a. feira, sempre de 11:00 às 12:40 na sala 306.

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

Projeto

O projeto da disciplina é a implementação de um compilador da linguagem Imp para Π IR, a linguagem do Π framework. A especificação do Π framework pode ser obtida aqui. A especificação da linguagem Imp e sua tradução ao Π framework pode ser obtida aqui.

Este projeto tem os seguintes objetivos:

  • Apresentar conceitos básicos de construção de compiladores.
  • Exercitar o desenvolvimento de uma aplicação a partir de uma descrição matemática.
  • Expor os alunos ao desenvolvimento por programação declarativa, em contraposição à imperativa.
  • Exercitar o uso de ferramentas de desenvolvimento colaborativo.

A linguagem Imp é extremamente simples, porém tem o poder computacional de uma linguagem Turing-completa. As entregas do projeto estão organizadas segundo classes sintáticas da linguagem Imp.

Uma vez formados os grupos, de não mais do que 3 alunos, será sorteada a linguagem de programação na qual cada grupo implementará seu projeto.

Cada grupo deverá criar um repositório para seu projeto no Github, com um nome apropriado para o projeto. (Um exemplo muito ruim é "Apresentacao_compiladores". Um bom exemplo é https://github.com/jpsmedeiros/impiler.) A cada entrega, o repositório será clonado e executado o comando make. Cada entrega deverá ter seu branch associado, isto é, P1, P2 e P3. O Makefile no repositório deverá então:

  1. garantir que todas as dependências para o build estão satisfeitas,
  2. construir o compilador,
  3. executar testes apropriados para a entrega.

O projeto deverá ser desenvolvido no sistema operacional Linux Ubuntu 18.04. Será portanto corrigido neste sistema, sendo executado como uma máquina virtual no Virtual Box.

Aulas

As aulas do curso estão organizadas em 3 módulos. As primeiras aulas de cada módulo, usualmente a 1a ou 1a e 2a aulas, são expositivas, quando são apresentados os conceitos associados ao módulo em questão. Aulas seguintes do módulo serão interativas onde cada grupo apresentará o estado atual do seu projeto, levantando principalmente dúvidas a serem discutidas com o restante da classe, e/ou simplesmente atualizando os demais com a evolução de seu trabalho.

Datas importantes

P1 - 06 e 08/05 - Expressões e comandos.

Objetivos:

  • Ambientar-se com a linguagem escolhida e suas ferramentas.
  • Implementar um parser para a linguagem Imp-0, contendo operações aritméticas, Booleanas e comandos.
    • O parser pode ser implementado fazendo-se uso de um gerador de analisador sintático ou manualmente como descrito no LLVM Tutorial. A linguagem fonte do projeto pode ser mudada de Imp para Kaleidoscope. A especificação das Π denotations deverá ser adaptada no entanto.
  • Entender o Π Framework.
  • Implementar Π IR-mark0: (i) Interpreting Automata, (ii) operações aritméticas, Booleanas e comandos.
  • Implementar um compilador de Imp-0 com operações aritméticas, Booleanas e comandos para Π IR-mark0.

P2 - 03 e 05/06 - Definições e declarações

Objetivos:

  • Especificar a semântica de declarações utilizando o Π Framework.
  • Implementar um parser para a linguagem Imp-1 estendendo Imp-0 com declarações de variáveis e constantes.
  • Implementar Π IR-mark1: (i) Interpreting Automata com ambientes, (ii) declarações de variáveis e constantes.
  • Implementar um compilador de Imp-1 para Π IR-mark1.

P3 - 15 e 17/07 - Funções e procedimentos

Objetivos:

  • Especificar a semântica de procedimentos e funções utilizando Π Framework.
  • Implementar um parser para Imp-2 estendendo Imp-1 com procedimentos e funções recursivas.
  • Implementar Π IR-mark2: (i) Declarações de operações e funções recursivas.
  • Implementar um compilador de Imp-2 para Π IR-mark2.

Critério de avaliação

  1. Três provas (P1, P2 e P3) e uma verificação suplementar (VS).
  2. Seja a média das provas (MP) = (P1+P2+P3)/3
    1. Se MP ≥ 6, o aluno está aprovado.
    2. Se MP < 4, o aluno está reprovado.
    3. 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

#LinguagemIntegrantesDia de apresentaçãoLink para o projeto
1C++Nicholas Barcelos4a. feirahttps://github.com/nicholas-barcelos/Cppimp
2IdrisCaio, Ronald e Nicholas4a. feirahttps://github.com/RonaldCamp/ImpCompiler
3JuliaJulia Noce, Gabriela Hecksher4a. feirahttps://github.com/gabihecksher/jupiter
4LuaCaroline Rosa e Henrique Fontenelle6a. feirahttps://github.com/carolinerosa/lobisomen
5OcamlFelipe Assad, Jorge Felipe e Thiago Augusto6a. feirahttps://github.com/sevontheedge/Ocampiler
6Prolog---
7SwiftBeatriz e Vitor6a. feirahttps://github.com/VitorA29/swimft

Referência bibliográfica

  • Aho, Sethi, Ullman, Compilers: Principles, Techniques, and Tools, Addison-Wesley, 1986. ISBN 0-201-10088-6

Documentação complementar

Page last modified on June 19, 2020, at 06:07 PM