CEDIS | Universidade de Brasília (UnB)

Organização e estrutura de compiladores e interpretadores

FGA0003 — Compiladores 1 · Semana 3 · Aula teórica

Prof. Dr. Sergio Antônio Andrade de Freitas
Curso de Engenharia de Software · 2026
símbolo CEDIS logo UnB
símbolo CEDISCEDIS
2/30

Objetivos de aprendizagem

Definir

compilador, interpretador e seus artefatos

Identificar

as fases fundamentais de um compilador

Interpretar

o fluxo do código-fonte ao código-alvo

Comparar

compilação, interpretação e modelos híbridos

Relacionar

a arquitetura às ferramentas Flex e Bison

símbolo CEDISCEDIS
3/30

Mapa da aula

  1. 01Revisão: código-fonte, tokens e gramáticas
  2. 02Conceito central: compilador e interpretador
  3. 03Arquitetura: fases e representações
  4. 04Exemplo guiado: int x = 10;
  5. 05Aplicações e cinco atividades interativas
Parte 1

Compilar ou interpretar?

Duas estratégias, vários modelos reais

símbolo CEDISCEDIS
5/30

Duas estratégias de execução

  • Compilador: traduz antes de executar.
  • Interpretador: executa durante a leitura.
  • Ambos podem usar lexer, parser e representações internas.
Comparação visual entre compilador e interpretador
símbolo CEDISCEDIS
6/30

Uma analogia: receita e cozinheiro

Compilador

  • Traduz a receita inteira previamente
  • Entrega um formato pronto ao cozinheiro
  • O preparo ocorre depois da tradução

Interpretador

  • Lê a receita passo a passo
  • O cozinheiro executa cada instrução
  • O resultado aparece durante a leitura
símbolo CEDISCEDIS
7/30
atividade

Conceito de compilação

Qual opção descreve corretamente um compilador?

  1. Traduzir código-fonte para uma representação-alvo.
  2. Executar cada instrução imediatamente.
  3. Reconhecer somente palavras reservadas.
  4. Verificar apenas a compatibilidade de tipos.
QR Code para acesso à atividade
Parte 2

Arquitetura de um compilador

Fases, representações e responsabilidades

símbolo CEDISCEDIS
9/30
Pipeline do código-fonte ao código-alvo

Pipeline clássico de compilação

  • Front-end: compreende e valida o programa.
  • Middle-end: transforma e otimiza a representação.
  • Back-end: adapta o resultado ao alvo.
símbolo CEDISCEDIS
10/30

Três blocos arquiteturais

Front-end

Análises léxica, sintática e semântica; depende principalmente da linguagem-fonte.

Middle-end

Representações intermediárias e otimizações independentes ou parcialmente dependentes do alvo.

Back-end

Seleção de instruções, alocação de registradores e emissão do código-alvo.

símbolo CEDISCEDIS
11/30

Flex e Bison no front-end

  • Flex reconhece lexemas e retorna tokens.
  • Bison verifica a gramática e executa ações.
  • A integração prepara AST, símbolos e análises posteriores.
Fluxo entre código-fonte, Flex, tokens, Bison e estrutura interna
símbolo CEDISCEDIS
12/30
atividade

Sequência das fases iniciais

Qual é a ordem correta das fases iniciais?

  1. Léxica → sintática → semântica.
  2. Semântica → léxica → geração de código.
  3. Geração de código → sintática → léxica.
  4. Otimização → léxica → interpretação.
QR Code para acesso à atividade
símbolo CEDISCEDIS
13/30

Análise léxica: do texto aos tokens

Responsabilidades

  • Ler caracteres
  • Reconhecer lexemas
  • Classificar tokens
  • Reportar símbolos inválidos

Exemplo

  • Entrada: int x = 10;
  • INT
  • ID(x)
  • ASSIGN · NUM(10) · SEMI
símbolo CEDISCEDIS
14/30
Gramática, tokens e árvore sintática para int x igual a 10

Análise sintática em um exemplo

  • O parser recebe tokens, não caracteres brutos.
  • A gramática descreve formas estruturais válidas.
  • A árvore registra a organização reconhecida.
símbolo CEDISCEDIS
15/30

Como o parser reconhece a declaração

1

Iniciar

partir do símbolo inicial

2

Expandir

selecionar produções compatíveis

3

Consumir

comparar terminais com tokens

4

Reduzir

reconhecer construções completas

5

Produzir

construir árvore ou executar ações

símbolo CEDISCEDIS
16/30
atividade

Saída da análise léxica

Qual é a saída do lexer para int x = 10;?

  1. Tokens: INT, ID, ASSIGN, NUM e SEMI.
  2. Um executável nativo.
  3. Uma tabela apenas com tipos.
  4. A atribuição já executada.
QR Code para acesso à atividade
símbolo CEDISCEDIS
17/30

Análise semântica: estrutura não basta

Verificações

  • Declaração e redeclaração
  • Escopo e visibilidade
  • Compatibilidade de tipos
  • Chamadas e argumentos

Estruturas de apoio

  • AST anotada
  • Tabela de símbolos
  • Informações de tipo
  • Referências às declarações
símbolo CEDISCEDIS
18/30

Da AST ao código executável

Código intermediário

Lineariza ou reorganiza a estrutura em TAC, SSA, bytecode ou outra RI.

Otimização

Melhora custo, tamanho ou consumo sem alterar o comportamento observável.

Código final

Mapeia a RI para instruções, objetos, assembly ou bytecode de destino.

Parte 3

Estrutura de um interpretador

Analisar e executar sem gerar um executável nativo como produto principal

símbolo CEDISCEDIS
20/30

Fluxo típico de interpretação

  • O front-end pode ser semelhante ao de um compilador.
  • O executor percorre AST, bytecode ou comandos.
  • O resultado surge durante a execução.
Pipeline de um interpretador com lexer, parser e executor
símbolo CEDISCEDIS
21/30

Compilação e interpretação na prática

Compilação

  • Execução tende a ser mais rápida
  • Distribuição por artefato
  • Ciclo editar–compilar–executar
  • Otimizações antecipadas

Interpretação

  • Retorno mais imediato
  • Ambiente de execução necessário
  • Boa para scripts e protótipos
  • Maior flexibilidade em tempo de execução
símbolo CEDISCEDIS
22/30

Modelos híbridos são comuns

Bytecode + VM

O código é compilado para uma máquina virtual portátil.

JIT

Trechos são compilados dinamicamente durante a execução.

AOT + runtime

Código nativo convive com bibliotecas e serviços de tempo de execução.

Transpilação

Código-fonte é traduzido para outra linguagem de alto nível.

símbolo CEDISCEDIS
23/30
atividade

Papel do parser

Qual é o papel principal do parser do Bison?

  1. Validar tokens conforme a gramática.
  2. Gerar instruções de máquina.
  3. Reconhecer lexemas por expressões regulares.
  4. Alocar registradores.
QR Code para acesso à atividade
Parte 4

Por que isso importa na engenharia de software?

Compiladores aparecem em mais lugares do que parece

símbolo CEDISCEDIS
25/30

Aplicações práticas

DSLs

SQL, VHDL e linguagens de configuração especializadas.

Análise estática

Linters, segurança, qualidade e detecção de defeitos.

IDEs

Refatoração, navegação, autocompletar e diagnósticos.

CI/CD

Validação automática, geração e transformação de artefatos.

IA e dados

Compilação de grafos, kernels e pipelines para diferentes back-ends.

símbolo CEDISCEDIS
26/30

Quando cada abordagem tende a ser adequada?

Preferir compilação quando...

  • Desempenho é prioritário
  • Há alvo bem definido
  • O artefato será distribuído
  • Otimizações antecipadas são úteis

Preferir interpretação quando...

  • Retorno imediato é valorizado
  • O uso é exploratório
  • Scripts devem ser simples
  • O ambiente de execução é controlado
símbolo CEDISCEDIS
27/30
atividade

Escolha arquitetural

Quando a interpretação direta tende a ser adequada?

  1. Experimentação rápida e execução imediata.
  2. Executável nativo sem ambiente de execução.
  3. Ausência total de sobrecarga.
  4. Sistema sem interpretador ou máquina virtual.
QR Code para acesso à atividade
símbolo CEDISCEDIS
28/30

Síntese da aula

Estratégias

Compilar traduz; interpretar executa durante o processamento.

Pipeline

Cada fase recebe, valida ou transforma uma representação.

Flex + Bison

O lexer gera tokens; o parser reconhece estruturas.

Semântica

AST e tabela de símbolos suportam regras contextuais.

Engenharia

Os mesmos conceitos sustentam IDEs, DSLs e análise estática.

símbolo CEDISCEDIS
29/30

Referências

  1. Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, techniques, and tools (2nd ed.). Addison-Wesley.
  2. Cooper, K. D., & Torczon, L. (2012). Engineering a compiler (2nd ed.). Morgan Kaufmann.
  3. Tremblay, J. P., & Sorenson, P. G. (1985). The theory and practice of compiler writing. McGraw-Hill.
  4. Wirth, N. (2005). Compiler construction. ETH Zürich.
  5. Singh, R. (2009). Design and implementation of compiler. New Age International.
símbolo CEDISCEDIS
30/30

Da arquitetura à implementação

Próxima etapa: aplicar essa visão ao projeto incremental em Flex e Bison. FGA0003 — Compiladores 1 · CEDIS/UnB

→ avançar · ← voltar · deslize (touch) · n notas · f tela cheia · p imprimir