🚀 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 comandoif).
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:
int x = 10;x 10 = int;while (x < 10) x++;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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 11 Hardware) e clique em Commit to main. - 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:
- Não (Sintaxe perfeita).
- Sim (Ordem totalmente errada das palavras).
- Não (Sintaxe válida para loops de uma única linha).
- Sim (Faltam os parênteses obrigatórios no
while). Gabarito da Prática 2: - 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)!