Aula 01: Apresentação da Disciplina e Plano de Ensino
Objetivos
Ao final desta aula, você será capaz de:
- Compreender o funcionamento e as regras da disciplina (avaliação, cronograma, entregas).
- Conhecer o Projeto Prático: Mini-Pascal e as ferramentas essenciais (ANTLR4, Git, IDE).
- Diferenciar os modelos de tradução (Compiladores vs. Interpretadores).
- Conectar a disciplina com Estruturas de Dados, Teoria da Computação, Arquitetura e Linguagens de Programação.
Conteúdo
Bem-vindo ao curso de Compiladores. Esta disciplina integra conhecimentos de diversas áreas em um projeto prático: a construção de um compilador para a linguagem Mini-Pascal, gerando bytecode para a JVM.
1. Conceitos Fundamentais
Linguagem de Programação e a IDE
Uma Linguagem de Programação é o conjunto formal de regras sintáticas e semânticas para instruir o computador. Já a IDE (como IntelliJ ou VS Code) é apenas o ambiente de desenvolvimento que facilita a escrita e o debug, oferecendo uma interface para acionar o compilador “nos bastidores”.
Compiladores vs. Interpretadores
Ambos são tradutores, mas com ciclos de vida diferentes: - Compilador (AOT): Traduz o código completo antes da execução, gerando um executável (ex: C, C++, Java). - Interpretador: Traduz e executa o código linha a linha em tempo real (ex: Python, JavaScript).
2. Estrutura do Curso
O curso apoia-se em dois pilares principais:
Visão geral do curso: Fundamentação Teórica (60%) e Projeto Prático (40%)
Cronograma e Logística
- Encontros: Segundas (13:00) e Quintas (16:35).
- Início: 05/03/2026.
- Avaliações principais:
- P1: 27/04 (30 pts)
- P2: 22/06 (30 pts)
- Entrega Final Projeto: 29/06 (40 pts totais)
- Prova Final: 13/07.
3. O Projeto Prático: Mini-Pascal (40 pts)
Construção incremental de um compilador Pascal \(\to\) JVM.
| Etapa | Conteúdo principal | Fase do compilador | Pontos |
|---|---|---|---|
| 1 | Infraestrutura e AST | Padrão Composite e Tabela de Símbolos | 2.0 |
| 2 | Analisador léxico (manual) | Scanner “na unha” (caractere a caractere) | 4.0 |
| 3 | Analisador sintático (manual) | Descida Recursiva e construção da AST | 4.0 |
| 4 | Ferramentas (ANTLR4) | Migração para gramática formal e Visitor | 4.0 |
| 5 | Semântica (escopo) | Gerenciamento de blocos aninhados | 6.0 |
| 6 | Semântica (tipos) | Verificação de tipos e compatibilidade | 12.0 |
| 7 | Geração de código | AST \(\to\) Bytecode JVM (ASM) | 8.0 |
Critérios de Avaliação do Projeto
- Corretude (60%): Suíte de testes automáticos.
- Arquitetura (20%): Uso de padrões (Composite, Visitor).
- Versionamento (20%): Histórico de commits individuais no GitLab.
4. Conexões Interdisciplinares
Estruturas de Dados (AED1 e AED2)
- Pilhas/Filas: Base para parsers e buffers de tokens.
- Árvores (AST): Representação central para transformações.
- Tabelas Hash: Para busca \(O(1)\) na Tabela de Símbolos.
- Grafos: Modelagem de dependências e alocação de registradores.
Linguagens Formais e Autômatos
- Expressões Regulares: Base dos scanners.
- Gramáticas (GLC): Especificação da sintaxe.
- Hierarquia de Chomsky: Limites de poder computacional.
Arquitetura de Computadores
- ISA: Tradução de abstrações para instruções nativas.
- Registradores: Desafio de alocação física de memória.
- ILP/Pipeline: Reordenação de código para performance.
5. Toolkit e Recursos
- Java 21: Uso de Records e Pattern Matching.
- Maven: Automação de build.
- GitLab: Hospedagem obrigatória em
git.juninho.com.br. - ANTLR4 & ASM: Geradores e injeção de bytecode.
Bibliografia Básica
- AHO, A. V. et al. Compiladores: princípios, técnicas e ferramentas. 2. ed.
- LOUDEN, K. C. Compiladores: princípios e práticas.
- SEBESTA, R. W. Conceitos de linguagens de programação. 9. ed.
Materiais da aula
Última atualização: 08/03/2026
