Prof. José Romildo Malaquias
Ao final do curso é esperado que o aluno:
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.
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.
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.
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 |
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
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
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.
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
Teste o compilador de OCaml:
which ocaml
ocaml -version
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
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.