1 |
19/01 |
Início das aulas – Apresentação do curso (síncrono)
- Linguagens e tecnologias adotadas.
- Métodos de avaliação.
- Materiais suplementares.
|
21/01 |
Introdução ao Python I (síncrono)
- Variaveis e tipos básicos.
- Comandos básicos (if/for/while/def).
- Strings
- Compilador de Brainf*ck.
|
2 |
26/01 |
Introdução ao Python II (síncrono)
- Ambientes do tipo notebook e interpretador.
- Estruturas de dados: dicionários, listas e tuplas
- Manipulação de strings
- Lidando com erros
|
28/01 |
Laboratório de Python: Leitor de JSON
- Especificação do formato.
- Listas, dicionários e tipos atômicos.
- Descida recursiva.
- Testes automatizados.
Vídeo: https://www.youtube.com/watch?v=ub5nrnWyWvk
|
3 |
02/02 |
Programação orientada a objetos
- Encapsulando estado.
- Métodos de uma classe.
- O parâmetro "self".
- Métodos especiais.
Vídeo: https://www.youtube.com/watch?v=mr0MqOZEvaI
|
04/02 |
Combinadores de parsers I
- Representação de um parser como função.
- Operações atômicas de leitura.
- Operações de segunda ordem: mapa, sequência e alternativa.
- Lendo objetos atômicos.
Vídeo: https://www.youtube.com/watch?v=mJnVTIU7Bdg
|
4 |
09/02 |
Combinadores de parsers II
- Outras operações de segunda ordem.
- Operações recursivas e estruturas de dados.
- Parser de JSON.
- Opcional: DSL com sobrecarga de operadores.
Vídeo: https://www.youtube.com/watch?v=0MGpJAqr3N0
|
11/02 |
Gramáticas gerativas
- Linguagens naturais vs formais.
- Léxico, sintaxe e semântica.
- Símbolos terminais e não-terminais.
- Gramática e representação BNF.
- Enumeração de expressões da linguagem.
- Árvores sintáticas concretas e abstratas.
- Gerador de lero-lero.
Vídeo: em elaboração
|
5 |
16/02 |
Gramáticas livres de contexto
- Regras de produção.
- Declarando regras da gramática utilizando o Lark.
- Operadores estendidos.
- Leitor de JSON.
Vídeo: https://www.youtube.com/watch?v=mr0MqOZEvaI
|
18/02 |
Derivações
- Análise léxica e símbolos terminais.
- Derivações intuitivas.
- Estratégias Top-down vs bottom-up.
- Redução à esquerda ou à direita.
- Gramáticas ambíguas vs não-ambíguas.
Vídeo: em elaboração
|
6 |
23/02 |
Operadores
- Operações matemáticas básicas.
- Ordem infixa, sufixa e prefixa.
- Precedência e associatividade de operadores.
- Árvore sintática e avaliação de expressões.
- Operadores como funções.
Vídeo: https://www.youtube.com/watch?v=OpRkhkqS6tg
|
25/02 |
Interpretador simples
- Operações lógicas e hierarquia de operadores.
- Chamada de funções.
- Variáveis e ambiente de execução.
- Execução condicional.
- Listas de expressões.
Vídeo: https://www.youtube.com/watch?v=0G0axJCX-J4
|
7 |
02/03 |
Feriado: Carnaval |
04/03 |
Estudo dirigido: Linguagem Twine (assíncrono)
- Definições da linguagem.
- Interpretação de funções.
Vídeo: em elaboração
|
8 |
09/03 |
Avaliação
- Gramáticas livre de contexto e linguagens formais.
- Interpretadores.
- Etapas de análise sintática e compilação
|
11/03 |
Expressões regulares
- Linguagens regulares vs gramáticas livres de contexto.
- Expressões regulares.
- Ortografia e léxico de uma linguagem.
- Utilizando expressões regulares no Lark.
- Estensões comuns para expressões regulares.
Vídeo: https://www.youtube.com/watch?v=qV8pvyWDo0I
|
9 |
16/03 |
Linguagens regulares
- Ortografia e léxico de uma linguagem.
- Linguagens regulares.
- Expressões regulares.
- Operadores não-regulares comuns.
Vídeo: https://www.youtube.com/watch?v=5K7-lFdz_2s
|
18/03 |
Laboratório de regex (síncrono)
- Detecção de padrões.
- Expressões regulares em ferramentas de código.
- Regex101 e teste de padrões.
- Palavras cruzadas.
|
10 |
23/03 |
Análise léxica
- Tokens.
- Implementando um analizador léxico com regex.
- Analizador léxico no Lark.
Vídeo: https://www.youtube.com/watch?v=qfE9-723Lh0
|
25/03 |
Estudo dirigido: Compilador de Twine (assíncrono)
- Usando expressões regulares no analizador léxico.
- Representação interna.
- Emissão de código C.
Vídeo: em elaboração
|
11 |
30/03 |
Autômatos
- Introdução a autômatos.
- Símbolos, estados e regras de transição.
- Autômato determinístico finito (DFA).
- Implementação de um DFA.
- Autômato não-determinístico.
Vídeo: https://www.youtube.com/watch?v=xSufZUBt2iM
|
01/04 |
Autômatos não-determinísticos
- Modelos de execução e representação de um NFA.
- Implementando um NFA.
- Regras epsilon.
- Construção de Thompson.
- Problemas com construções intuitivas para regex.
Vídeo: https://www.youtube.com/watch?v=P9wbMGj8hpA
|
12 |
06/04 |
Simplificando NFAs
- Eliminação de transições epsilon.
- Propagação de estados iniciais e de aceite.
- Eliminação de estados desnecessários.
- Conversão de um NFA para um DFA.
- Tabela de conversão.
- Exercícios.
- Vídeos:
-
|
08/04 |
Descida recursiva e o LL(1)
- Tipos atômicos (numerais, strings, etc).
- Símbolos.
- Operadores e delimitadores.
- Descida como uma tabela de transição.
- Implementação da tabela de transição.
Vídeo: em elaboração
|
13 |
13/04 |
Parser LL(1)
- Construções FIRST e FOLLOW.
- Construção da tabela de transição.
- Gramáticas sem epsilon.
- Gramaticas com epsilon.
- Conflitos na construção.
Vídeo: em elaboração
|
15/04 |
Feriado: Paixão de Cristo |
14 |
20/04 |
Linguagens de programação
- História das linguagens de programação.
- Paradigmas de programação.
- Famílias de sintaxe.
- Ambiente de execução e semântica de uma linguagem.
Vídeo: em elaboração
|
22/04 |
Feriado: Tiradentes |
15 |
27/04 |
Entrega de trabalhos e exercícios |
29/04 |
Revisão de notas |