🚀 Capítulo 10: Análise Léxica (Tema: Sherlock Holmes)

NOTE

Este capítulo utiliza a temática de Sherlock Holmes para explicar a Análise Léxica. Investigue o código caractere por caractere e divida-o em pistas menores chamadas Tokens!


1. 🎯 Objetivo da Aula

Compreender a primeira fase de um compilador, a Análise Léxica (ou Scanner), entendendo como o código-fonte em texto é quebrado em pequenos pedaços significativos chamados Tokens.

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

O detetive Sherlock Holmes chega a uma cena de crime. Ele não tenta adivinhar o culpado logo de cara. Primeiro, ele pega sua lupa e procura por pequenas pistas isoladas:

  • Um fio de cabelo no chão.
  • Uma pegada na lama.
  • Cinzas de um charuto específico.

Ele quebra o cenário complexo em pequenos pedaços de evidência. O compilador faz exatamente a mesma coisa na sua primeira fase! Ele recebe o seu código (que é apenas um arquivo de texto gigante) e, usando uma “lupa”, o lê caractere por caractere para identificar as pequenas pistas da linguagem, que chamamos de Tokens. Seu desafio é ser o detetive do código!


🧠 Fundamentos: A Teoria Traduzida

A Análise Léxica é o processo de converter uma sequência de caracteres (o código que você digitou) em uma sequência de Tokens.

🔍 O que é um Token?

É a menor unidade com significado para o compilador. Pense nele como as palavras de uma frase. Se você escrever este código em C++: int idade = 25;

O Analisador Léxico vai quebrá-lo nas seguintes pistas (Tokens):

  1. int Palavra Reservada (Tipo de dado).
  2. idade Identificador (Nome que você deu para a variável).
  3. = Operador de Atribuição.
  4. 25 Valor Numérico Inteiro.
  5. ; Caractere Especial (Fim de linha).

❌ Erro Léxico:

Acontece quando o analisador encontra um caractere que não pertence ao alfabeto da linguagem.

  • Exemplo: Se você usar o símbolo @ no meio de um nome de variável em C++ (int id@de = 25;), o analisador léxico vai parar e dizer: “Não conheço essa pista!“.

4. 📖 Exemplo Guiado: O Espaço em Branco

O analisador léxico é muito inteligente: ele geralmente ignora os espaços em branco e as quebras de linha que nós usamos para deixar o código bonito. Para o compilador, estes dois códigos são exatamente iguais:

  • Código A: x=5;
  • Código B: x = 5 ; Ambos geram a mesma sequência de 4 tokens: [Identificador] [Operador] [Número] [PontoEVírgula].

5. 🛠️ Prática Obrigatória 1: Quebrando em Tokens

Diga quantos tokens existem na linha de código abaixo e classifique o primeiro e o último: if (nota >= 7)

6. 🛠️ Prática Obrigatória 2: O Detetive de Erros

Diga se as situações abaixo geram um Erro Léxico (caractere inválido que a linguagem não conhece) ou não:

  1. Em Python, você escreveu media = 10 (Tudo certo).
  2. Em C++, você escreveu float valor = 10.5$; (com o símbolo de cifrão no final).
  3. Você escreveu um comentário gigante no código: // Isso é um comentário.

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

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 10 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_10_lexica.md
│   └── codigos/
│       └── cap10/
│           └── scanner_output.txt

💡 Checkpoint de Lógica

A Análise Léxica não tenta entender se a frase faz sentido (isso é trabalho das próximas fases). Ela apenas garante que todas as palavras usadas pertencem ao dicionário da linguagem!

10. 🔥 Desafio de Fixação

Pesquise o que significa o termo Regex (Expressões Regulares) e como os criadores de compiladores usam Regex para definir o que é um Token válido.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1: Existem 6 tokens:

  1. if (Palavra reservada).
  2. ( (Símbolo especial).
  3. nota (Identificador).
  4. >= (Operador relacional).
  5. 7 (Número).
  6. ) (Símbolo especial). Gabarito da Prática 2:
  7. Não (Tudo válido).
  8. Sim (O símbolo $ não é um operador válido em C++ e causará um erro léxico).
  9. Não (O analisador léxico ignora comentários, pois eles servem apenas para humanos).

Capitulo Anterior | Proximo Capitulo