🚀 Capítulo 11: Análise Sintática (Tema: Yoda)

NOTE

Este capítulo utiliza a temática de Yoda para explicar a Análise Sintática. As palavras podem estar corretas, mas se a ordem delas na frase violar as regras da gramática Jedi, o compilador vai reclamar!


1. 🎯 Objetivo da Aula

Compreender a segunda fase de um compilador, a Análise Sintática (ou Parser), entendendo como os tokens são organizados em uma estrutura de árvore para verificar as regras gramaticais da linguagem.

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

O Mestre Yoda fala de um jeito muito peculiar. Ele diz:

  • “O medo para o lado negro guia.”

Se analisarmos palavra por palavra (Análise Léxica), todas as palavras existem no dicionário da língua portuguesa. Sherlock Holmes não acharia nenhum erro léxico! Porém, a ordem das palavras na frase viola as regras da gramática padrão da nossa língua. O correto seria: “O medo guia para o lado negro.”

O compilador faz exatamente isso na segunda fase: a Análise Sintática. Ele pega a lista de tokens que veio da fase anterior e verifica se a ordem deles segue as regras gramaticais da linguagem de programação. Seu desafio é corrigir as frases do Yoda!


🧠 Fundamentos: A Teoria Traduzida

A Análise Sintática verifica se a sequência de tokens forma uma frase válida na gramática da linguagem.

🌳 A Árvore Sintática (Parse Tree):

Para verificar a ordem, o compilador monta uma árvore genealógica do seu código. Se você escrever: A = B + C O compilador monta uma árvore assim:

graph TD
    A["Atribuição (=)"] --> B["Variável (A)"]
    A --> C["Operação (+)"]
    C --> D["Variável (B)"]
    C --> E["Variável (C)"]

Se estiver faltando o sinal de +, a árvore quebra e o compilador avisa que há um erro!

❌ Erro Sintático:

Acontece quando os tokens estão na ordem errada ou falta algum símbolo obrigatório.

  • Código C++ Correto: if (x > 5) { ... }
  • Código C++ com Erro Sintático: if x > 5 { ... } (Faltam os parênteses obrigatórios do comando if).

4. 📖 Exemplo Guiado: O Parênteses Esquecido

Um dos erros sintáticos mais comuns no mundo é esquecer de fechar um parênteses ou uma chave.

  • Se você escrever: resultado = (5 + 2 * 3; O analisador sintático vai ler até o final e dizer: “Espera aí! Você abriu um parênteses, mas colocou o ponto e vírgula sem fechá-lo antes! Erro de Sintaxe!“.

5. 🛠️ Prática Obrigatória 1: Yoda ou Programador?

Diga se as linhas de código abaixo têm Erro Sintático em linguagens como C/C++ ou Java:

  1. int x = 10;
  2. x 10 = int;
  3. while (x < 10) x++;
  4. while x < 10 { x++; }

6. 🛠️ Prática Obrigatória 2: O Poder da Gramática

A análise sintática não quer saber se a conta está certa. Se você escrever int x = 5 / 0; (divisão por zero), o analisador sintático vai aprovar ou dar erro? Por quê?


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

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

💡 Checkpoint de Lógica

Os compiladores usam algoritmos complexos (como LL ou LR) para ler os tokens e montar a árvore sintática de forma extremamente rápida, mesmo para arquivos com milhares de linhas de código!

10. 🔥 Desafio de Fixação

Pesquise o que significa a sigla AST (Abstract Syntax Tree), que é a versão simplificada da árvore sintática usada pelos compiladores modernos.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Não (Sintaxe perfeita).
  2. Sim (Ordem totalmente errada das palavras).
  3. Não (Sintaxe válida para loops de uma única linha).
  4. Sim (Faltam os parênteses obrigatórios no while). Gabarito da Prática 2:
  5. O analisador sintático vai aprovar! Ele só quer saber se a ordem das palavras está correta (Variável = Número / Número). A regra matemática de que não se pode dividir por zero será checada apenas na próxima fase (Análise Semântica)!

Capitulo Anterior | Proximo Capitulo