🚀 Capítulo 12: Análise Semântica (Tema: Inception)

NOTE

Este capítulo utiliza a temática de Inception para explicar a Análise Semântica. As palavras podem estar na ordem certa, mas se a ação não fizer sentido no contexto do sonho, a realidade entra em colapso!


1. 🎯 Objetivo da Aula

Compreender a terceira fase de um compilador, a Análise Semântica, entendendo como o compilador verifica se o significado do código faz sentido (compatibilidade de tipos, variáveis declaradas, etc.).

2. 🏢 O Cenário Prático (Seu Desafio)

No filme Inception (A Origem), os personagens constroem mundos dentro de sonhos. No sonho, as leis da física podem ser alteradas: você pode andar pelas paredes ou dobrar uma cidade ao meio.

  • Porém, existem regras de coerência. Se você tentar colocar um elefante dentro de uma caixa de sapatos, a mente do sonhador percebe que aquilo não faz sentido e o sonho entra em colapso!

No compilador, a Análise Semântica é a polícia do sentido! As fases anteriores já garantiram que:

  1. As palavras existem (Léxica).
  2. As palavras estão na ordem correta (Sintática). Agora, a Análise Semântica verifica se a frase tem lógica! Seu desafio é não deixar o sonho entrar em colapso!

🧠 Fundamentos: A Teoria Traduzida

A Análise Semântica conecta as definições de variáveis aos seus usos e verifica se os tipos de dados são compatíveis.

❌ Exemplo de Colapso Semântico:

Imagine que você escreve este código: int idade = "vinte";

  1. Análise Léxica: OK! Todas as palavras e símbolos existem no dicionário.
  2. Análise Sintática: OK! A ordem está perfeita: Tipo Variável = Valor;.
  3. Análise Semântica: ERRO! Você está tentando guardar um texto (String) dentro de uma gaveta que só aceita números inteiros (int). Isso não faz sentido!

🔍 O que a Análise Semântica verifica?

  • Compatibilidade de Tipos: Você está tentando somar um texto com um número?
  • Declaração de Variáveis: Você está tentando usar a variável x, mas esqueceu de criá-la antes?
  • Divisão por Zero: O compilador avisa que a conta matemática é impossível.

4. 📖 Exemplo Guiado: A Tabela de Símbolos

Para não se perder no sonho, o analisador semântico usa um diário chamado Tabela de Símbolos. É uma lista de todas as variáveis que você criou e o tipo delas. Se o código for: int x; x = 10; A tabela guarda:

  • Nome: x | Tipo: Inteiro | Escopo: Global

Quando o compilador lê x = 10, ele consulta a tabela para ver se x existe e se aceita o número 10!


5. 🛠️ Prática Obrigatória 1: Qual o tipo de Erro?

Diga se o erro em cada linha de código C++ é Léxico (caractere inválido), Sintático (ordem errada) ou Semântico (falta de sentido/tipo errado):

  1. int x = 10 @ 2; (O símbolo @ não existe na linguagem).
  2. int x = 10 (Faltou o ponto e vírgula no final).
  3. int x = 10; string y = "olá"; int z = x + y; (Tentando somar número com texto).

6. 🛠️ Prática Obrigatória 2: Variável Fantasma

Se você escrever em C++: resultado = 10 + 5; sem ter colocado a linha int resultado; antes:

  1. Qual fase do compilador vai dar o erro avisando que a variável resultado não foi declarada?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 12 Hardware) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_14_hardware_e_compiladores/
├── capitulos/
│   ├── capitulo_12_semantica.md
│   └── codigos/
│       └── cap12/
│           └── tabela_simbolos.txt

💡 Checkpoint de Lógica

A análise semântica é a fase mais “inteligente” do front-end do compilador. Ela garante que o programa não quebre na hora de rodar por tentar fazer operações impossíveis!

10. 🔥 Desafio de Fixação

Pesquise o que significa o termo Strongly Typed (Fortemente Tipada) em linguagens de programação e como isso ajuda o analisador semântico.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Léxico (Caractere inválido).
  2. Sintático (Falta de estrutura/símbolo obrigatório).
  3. Semântico (Operação inválida entre tipos diferentes). Gabarito da Prática 2:
  4. A Análise Semântica (Ela busca o nome da variável na Tabela de Símbolos e não encontra).

Capitulo Anterior | Proximo Capitulo