Pular para conteúdo

Resumo do Conteúdo do Semestre

Organização e Estrutura

Um compilador é um sistema complexo dividido em fases que transformam código de alto nível (humano) em baixo nível (máquina).

  • Front-end (Análise): Focado na linguagem de origem. Verifica se o código está correto.
  • Back-end (Síntese): Focado na máquina de destino. Otimiza e gera o executável.
  • Middle-end: Onde ocorrem as otimizações independentes de hardware.

Análise Léxica e Expressões Regulares

A primeira etapa é a leitura dos caracteres. O Analisador Léxico (Scanner) agrupa caracteres em unidades chamadas Tokens.

  • Expressões Regulares (Regex): São as regras que definem o que é um token.
    • Exemplo: Uma Regex define que um "Identificador" deve começar com letra e pode conter números.
  • Exemplo Prático: soma = 10 + 5; Vira os tokens: [ID: soma], [OP: =], [NUM: 10], [OP: +], [NUM: 5], [SYM: ;].

Autômatos

Os autômatos são os "motores" por trás da análise. Eles processam os caracteres um a um para validar se a sequência pertence à linguagem.

  • DFA (Autômatos Finitos Determinísticos): Usados para implementar scanners ultra-rápidos que reconhecem palavras-chave e símbolos sem ambiguidade.

Análise Sintática e Gramáticas

Aqui, o compilador verifica a estrutura da "frase".

  • Gramáticas Livres de Contexto (CFG): Definem as regras de aninhamento (ex: parênteses, escopo de funções).
  • Parser: O componente que constrói a árvore de derivação. Se você esquece um ; ou fecha um parêntese a menos, o erro ocorre aqui.

Estruturas de Dados e Árvore de Sintaxe Abstrata (AST)

O compilador converte o texto plano em uma AST. É uma representação em árvore que remove detalhes irrelevantes (como espaços em branco) e foca na lógica.

  • Importância: Ferramentas como ESLint, Prettier e Babel funcionam manipulando a AST do seu código.

Análise Semântica

Esta fase verifica se o código "faz sentido", além de estar bem escrito.

  • Verificação de Tipos: "Posso somar uma String com um Inteiro?".
  • Escopo: "Esta variável que estou usando foi declarada?".
  • Tabela de Símbolos: Uma estrutura de dados (geralmente Hash Table) que armazena informações sobre todas as variáveis e funções.

Geração de Código e Máquinas Abstratas

O compilador traduz a AST para o código final.

  • Geração de Código: Transforma a lógica em Assembly ou código de máquina.
  • Máquinas Abstratas (VMs): Como a JVM ou o Node.js. Elas permitem que o código rode em qualquer CPU através de um Bytecode, que é um código intermediário.

Compiladores vs. Interpretadores

Na Engenharia de Software moderna, a linha é tênue:

Conceito Descrição Exemplo
Compilador Traduz tudo antes da execução (AOT - Ahead of Time). C, C++, Rust, Go
Interpretador Lê e executa linha por linha em tempo real. Python, PHP (antigo)
JIT (Just-in-Time) Compila partes críticas durante a execução para ganhar performance. JavaScript (V8), Java, C#