LRM Prof. Mantovani ← Plano de ensino

Material das aulas

Da teoria das linguagens à construção de um compilador: percorremos as fases de análise (léxica, sintática, semântica) e de síntese (representação intermediária e geração de código), sempre com simulações e laboratório.

📘 14 aulas🧪 Simuladores interativos👥 Atividades em grupo🎯 Simulado ENADE
Trilha de 14 aulas

Aulas

Cada aula traz teoria didática, simulações, atividade em grupo e um mini-quiz. Siga na ordem ou vá direto ao tema.

1 Introdução à compilaçãoO que é um compilador, em que ele difere de um interpretador e o panorama completo das fases que transformam o código-fonte em um programa executável, com a tabela de símbolos e o tratamento de erros como apoios transversais. 👥 grupo Aula 1 → 2 Linguagens, gramáticas e estrutura do compiladorOs níveis de abstração entre o problema humano e o hardware, a organização do compilador em front-end e back-end ligados por uma representação intermediária, e a hierarquia de Chomsky que classifica as linguagens formais e justifica os reconhecedores de cada fase. 🧪 Hierarquia de Chomsky👥 grupo Aula 2 → 3 Análise léxica I — tokens e expressões regularesA primeira fase do compilador: agrupar a torrente de caracteres do código-fonte em unidades com significado, os tokens. Estudamos a tríade lexema, token e padrão, a especificação de padrões por expressões regulares e o funcionamento de um analisador léxico real. 🧪 Padrão × lexema × token🧪 Expressões regulares🧪 Análise léxica👥 grupo Aula 3 → 4 Análise léxica II — autômatos finitosComo a especificação por expressão regular vira código executável: autômatos finitos determinísticos (AFD) e não determinísticos (AFN), o pipeline ER→AFN→AFD→código e o funcionamento interno de um scanner como uma máquina de estados. 🧪 A quíntupla (Q, Σ, δ, q0, F) com as mãos🧪 Da ER ao scanner, etapa por etapa🧪 AFN × AFD por dentro🧪 Scanner por dentro🧪 Análise léxica👥 grupo Aula 4 → 5 Gramáticas livres de contextoA linguagem da sintaxe: gramáticas livres de contexto (GLC), derivações, árvores sintáticas, o problema da ambiguidade e sua solução via precedência e associatividade, e as notações BNF e EBNF que descrevem a estrutura das linguagens de programação. 🧪 Oficina de gramáticas🧪 A quádrupla (N, T, P, S) com as mãos🧪 Derivação passo a passo🧪 BNF ⇄ EBNF🧪 Mesa de precedência e associatividade🧪 Caçador de ambiguidade🧪 O else pendente👥 grupo Aula 5 → 6 Análise sintática descendenteParsing recursivo-descendente: como percorrer a gramática, da raiz às folhas, para reconstruir a árvore sintática a partir dos tokens. Estudamos por que a recursão à esquerda quebra o método, como eliminá-la, e como a fatoração à esquerda prepara a gramática. 🧪 A trilha das seis aulas: o que cada uma entrega🧪 Descida recursiva ao vivo🧪 Gerar × reconhecer: a aula 5 e a aula 6 lado a lado🧪 A porta giratória — recursão à esquerda🧪 Fatoração à esquerda, com as mãos🧪 Analisador preditivo com a pilha à mostra🧪 Saneamento: o que esta gramática precisa?👥 grupo Aula 6 → 7 LL(1), FIRST/FOLLOW · RevisãoOs conjuntos FIRST e FOLLOW, que guiam o parser preditivo; a construção e o uso da tabela LL(1); e a revisão geral das aulas 1 a 6. 🧪 Aulas 5, 6 e 7 lado a lado: a mesma gramática, o mesmo programa🧪 FIRST e FOLLOW rodada a rodada: o ponto fixo🧪 Treino de FIRST e FOLLOW com correção🧪 A mesa LL(1): conjuntos, tabela e conflitos🧪 Monte a tabela LL(1): correção coluna a coluna🧪 Analisador preditivo com a pilha à mostra🧪 Caça ao conflito: FIRST/FIRST ou FIRST/FOLLOW?👥 grupo Aula 7 → 8 Análise semântica I — gramáticas de atributosDepois da estrutura, o significado: atributos sintetizados e herdados, gramáticas de atributos e a tradução dirigida pela sintaxe (SDT) que executa ações ao longo da árvore. 🧪 Gramática de atributos🧪 Ordem de avaliação dos atributos👥 grupo Aula 8 → 9 Tabela de símbolos e verificação de tiposA memória do compilador: a tabela de símbolos com escopos aninhados e o sistema de tipos que detecta incompatibilidades antes da execução. 🧪 Tabela de símbolos e pilha de escopos🧪 Verificação de tipos com coerção👥 grupo Aula 9 → 10 Representação intermediáriaA ponte entre front-end e back-end: por que uma RI existe, o código de três endereços e a tradução dirigida pela sintaxe que o gera a partir da árvore. 🧪 m × n ou m + n: o que a RI economiza🧪 O meio do caminho: quem depende de quem🧪 Três endereços: a anatomia e o juiz🧪 Do fonte ao código de três endereços🧪 A SDT em câmera lenta: lugar e cod subindo pela árvore🧪 Quádruplas × triplas × indiretas👥 grupo Aula 10 → 11 Ambiente de execuçãoComo o programa traduzido se organiza na memória em tempo de execução: registros de ativação, a pilha de chamadas (e a recursão) e a distinção entre pilha e heap. 🧪 A pilha de ativação na recursão🧪 Registro de ativação🧪 O protocolo de chamada, passo a passo🧪 Pilha × heap: vazamento e ponteiro pendente👥 grupo Aula 11 → 12 Geração de código e organização do computadorA fase final: traduzir a RI para a máquina-alvo, com seleção de instruções, alocação de registradores e a influência da organização do computador. 🧪 Da RI ao assembly: seleção de instruções🧪 Registradores por coloração de grafos👥 grupo Aula 12 → 13 Projeto integrador — mini-compiladorJuntando as fases: do código-fonte aos tokens, à árvore e ao código de três endereços, em um projeto único que exercita o front-end ponta a ponta. 🧪 O mini-compilador ponta a ponta👥 grupo Aula 13 → 14 Apresentações · Revisão geralFechamento da disciplina: apresentação dos projetos, revisão conectada de todas as fases do compilador e preparação para a Avaliação 2 (e exame). 🧪 Revisão calculada de Compiladores👥 grupo Aula 14 →