Print - - Edit

TCC-00.289 Compiladores

(Pós AAE)

4a. feira e 6a. feira, sempre de 11:00 às 12:40 no Google Meets.

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.

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.
  • Entender o Π Framework.
  • Implementar Π IR-mark0: (i) Π autômato, (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.

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) Π autômato com ambientes, (ii) declarações de variáveis e constantes.
  • Implementar um compilador de Imp-1 para Π IR-mark1.

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

Avaliação continuada no Google Classroom.

  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.

A avaliação será feita segundo os seguintes critérios:

Em aula 10%Apresentação 70%Projeto 20%
Presença 100%Completude 15%, Corretude 15%, Clareza/Qualidade 10%, Participação 60%Completude 40%, Corretude 40%, Testes 20%

Grupos

A serem definidos.

#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, 2nd. ed., 2007. ISBN 0-321-48681-1

Documentação complementar

Page last modified on February 25, 2021, at 05:43 PM