Aula 01: Apresentação da Disciplina e Plano de Ensino

Data de Publicação

08/03/2026

Data de Modificação

08/03/2026

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

Fluxo de dados do compilador: Do código fonte ao Bytecode JVM

Fluxo de dados do compilador: Do código fonte ao Bytecode JVM

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

  1. AHO, A. V. et al. Compiladores: princípios, técnicas e ferramentas. 2. ed.
  2. LOUDEN, K. C. Compiladores: princípios e práticas.
  3. SEBESTA, R. W. Conceitos de linguagens de programação. 9. ed.

Materiais da aula

Última atualização: 08/03/2026

De volta ao topo