BCC328
Construção de Compiladores I


Departamento de Computação
Instituto de Ciências Exatas e Biológicas
Universidade Federal de Ouro Preto
malaquias@ufop.edu.br
Sala 21 – DECOM – ICEB 3

Dados Gerais

Departamento
Computação
Unidade
Instituto de Ciências Exatas e Biológicas
Carga horária semanal
4 aulas teóricas
Duração
18 semanas
Carga horária semestral
72 horas-aula
Pré-requisitos
Cursos
Ciência da Computação: 6º período

Ementa

Objetivos

Ao final do curso é esperado que o aluno:

Metodologia de Ensino

Atividades Discentes

Bibliografia

  1. Introduction to Compiler Design Torben Ægidius Mogensen. Introduction to Compiler Design. Inglês. 2a edição. Springer, 2017. ISBN: 978-3-319-66965-6.

  2. Modern Compiler Implementation in ML Andrew W Appel. Modern Compiler Implementation in ML. Inglês. 1a ed. Cambridge University Press, 1997. ISBN: 0-521-60764-7. Livro-texto.

  3. Compiladores: Princípios, Técnicas e Ferramentas 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.

  4. Compiler Design: Syntactic and Semantic Analysis Helmut Seidl, Reinhard Wilhelm, e Sebastian Hack. Compiler Design: Syntactic and Semantic Analysis. Inglês. Springer, 2013. ISBN: 978-3642175398.

Avaliações

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 Data Peso Assuntos
Prova 1 25/09/2019 qua 2,5 Introdução, gramáticas livre de contexto, análise léxica
Prova 2 04/11/2019 seg 2,5 Análise sintática
Prova 3 09/12/2019 seg 2,5 Análise semântica
Trabalhos 2,5
Exame especial 18/12/2019 qua De acordo com a resolução CEPE 2.880

A nota final dos trabalhos será dada pela média aritmética das notas dos trabalhos individuais.

A nota final será dada pela média ponderada das atividades avaliativas, segundo a tabela acima.

As atividades deverão ser submetidas através da plataforma Moodle da UFOP.

Código de honra do aluno

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.

Ferramentas

Nas aulas será utilizada a linguagem OCaml para implementação das técnicas de construção de compiladores. Também serão utilizadas algumas ferramentas auxiliares na implementação de alguns módulos do compilador, como geradores de analisadores léxicos (ocamllex), geradores de analisadores sintáticos (menhir), e geradores de código (LLVM).

Os trabalhos práticos poderão ser implementados na linguagem de escolha do aluno, com consulta prévia ao professor.

Aulas

Aula Data Assuntos
01 12/08 Seg Apresentação da disciplina
02 14/08 Qua Compilação e interpretação
Introdução
03 19/08 Seg Linguagem de implementação
OCaml
Manual da linguagem OCaml
A Short Introduction to OCaml
Introduction to Functional Programming in OCaml
04 21/08 Qua Gramáticas
Linguagem Straightline
05 26/08 Seg Análise léxica: introdução
06 28/08 Qua Análise léxica: ad hoc
Exemplo: analisador léxico de straightline
07 02/09 Seg Análise léxica: expressões regulares
CS143 Lexical Analysis
08 04/09 Qua Análise léxica: autômatos finitos
09 09/09 Seg Análise léxica: geradores
Aula prática: Análise Léxica
10 11/09 Qua Análise léxica: projeto
11 16/09 Seg Análise sintática: introdução
12 18/09 Qua Análise sintática: análise descendente recursiva
13 23/09 Seg (Continuação)
Gramática 3.12
Gramática 3.10
Gramática 3.15
If then else
If then else 2
14 25/09 Qua Prova 1
15 30/09 Seg Análise sintática: análise ascendente: autômato de pilha
02/10 Qua (Paralisação)
16 07/10 Seg Análise sintática: análise ascendente: tabela LR(0)
17 09/10 Qua Análise sintática: análise ascendente: tabela SLR
18 14/10 Seg Análise sintática: análise ascendente: tabela LR(1)
19 16/10 Qua Análise sintática: análise ascendente: tabela LALR(1)
20 21/10 Seg Análise sintática: análise ascendente: hierarquia de gramáticas
21 23/10 Qua Análise sintática: análise ascendente: resolução de conflitos
28/10 Qua (Dia do servidor público)
22 30/10 Seg Análise sintática: gerador
23 04/11 Qua Prova 2
24 06/11 Seg Análise sintática: projeto
25 11/11 Seg Árvores de sintaxe abstrata
26 13/11 Qua Análise semântica: introdução
27 18/11 Seg Análise semântica: tabelas de símbolo
28 20/11 Qua Análise semântica: tipagem
29 25/11 Seg Análise semântica: regras de análise semântica
30 27/11 Qua Análise semântica: escopo
31 02/12 Seg Análise semântica: projeto
32 04/12 Qua Geração de código: introdução
33 09/12 Qua Prova 3
34 11/12 Seg Geração de código: LLVM
18/12 Qua Exame especial

Avaliações de semestres anteriores

Instalação do OCaml

Instalação do OCaml no Ubuntu

  1. Alguns programas serão necessários para a programação em OCaml. Comece instanlando m4, um processador de macro de uso geral que é usado por vários componentes do OCaml:

    sudo apt install m4

    Instale também rlwrap, um pequeno utilitário que usa a biblioteca readline para permitir a edição da entrada do teclado para qualquer comando:

    sudo apt install rlwrap

  2. Instale OPAM, o gerenciador de pacotes do OCaml:

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)

    Este comando vai:

    Caso o comando curl não esteja disponível, instale o pacote curl usando o gerenciador de pacotes do sistema operacional, ou ainda faça o download do scripit e execute-o com o comando sh install.sh

    Será perguntado onde instalar o arquivo executável opam. Sugiro o diretório /home/nome-do-usuario/.local/bin, ou seja, .local/bin dentro do seu dietório home.

    Outra opção é instalar opam usando o gerenciador de pacotes do sistema operacional a partir de um repositório que contém a versão mais atualizada do opam. Isto só poderá ser feito usando uma conta de administrador.

    sudo add-apt-repository ppa:avsm/ppa
    sudo apt update
    sudo apt install opam

  3. O opam precisa inicializar seu estado interno no diretório ~/.opam para funcionar:

    opam init --bare

    Quando perguntado se você deseja modificar ~/.profile, eu sugiro aceitar as modificações.

  4. Instale a versão 4.07.1 do compilador de OCaml:

    opam switch create 4.07.1
    eval $(opam env) # aplica as alterações para o shell atual
  5. Teste o compilador de OCaml:

    which ocaml
    ocaml -version

  6. Instale algumas bibliotecas em OCaml e programas que serão usados nas atividades:

                
    opam install dune          # sistema de construção para OCaml
    opam install merlin        # serviço de editor que fornece recursos IDE modernos para o OCaml
    opam install ppx_import    # extensão de sintaxe que permite extrair tipos ou assinaturas de outros arquivos de interface compilados
    opam install ppx_deriving  # extensão de sintaxe que facilita geração de código baseada em tipos em OCaml
    opam install ppx_expect    # extensão de sintaxe para escrita de testes em OCaml
    opam install camomile      # biblioteca unicode para OCaml
    opam install menhir        # gerador de analisador sintático para OCaml
    opam install utop          # ambiente interativo alternativo para OCaml
                
              

Instalação do editor VSCode no Ubuntu

O Visual Studio Code é um editor de código multiplataforma de código aberto desenvolvido pela Microsoft. Possui suporte a depuração embutido, controle Git incorporado, destaque de sintaxe, completação de código, terminal integrado, refatoração de código e templates de código.

Para instalar o VSCode:

      
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt install apt-transport-https
sudo apt update
sudo apt install code #
      
    

Instale a extensão OCaml and Reason IDE para obter suporte para OCaml no VSCode.

Trabalhos

Compilador de Tigris

Repositório git

  1. Análise léxica: branch lexer-start
  2. Análise sintática: branch parser-start 29/10/2019
  3. Análise semântica: branch master 11/12/2019

Notas e Frequência

Notas e frequências