🚀 Capítulo 20: Projeto Final Parte 2: Mini-Compilador (Tema: Tron)

NOTE

Este capítulo finaliza o curso de Hardware e Compiladores. Parabéns por chegar até aqui e dominar a ponte entre o software e o hardware!


1. 🎯 Objetivo da Aula

Consolidar os conceitos de compiladores criando a lógica de um Mini-Compilador que traduz uma linguagem de texto simples para o código numérico que o nosso simulador do capítulo anterior consegue entender.

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

No capítulo anterior, você criou o simulador de CPU que entende os códigos numéricos:

  • 1 = Carregar
  • 2 = Somar
  • 3 = Parar

Mas digitar esses números diretamente é muito difícil para nós, humanos (é linguagem de máquina!). Nós queremos escrever as ordens usando palavras em português, assim:

  • CARREGAR 5
  • SOMAR 10
  • PARAR

Sua missão é criar o Mini-Compilador! Ele deve ler essas palavras em português e gerar a lista de números [1, 5, 2, 10, 3] para que o simulador de Tron possa rodar o programa! Seu desafio final é fazer essa tradução!


🧠 Fundamentos: A Teoria Traduzida

O nosso mini-compilador vai passar por versões simplificadas das fases que aprendemos:

  1. Análise Léxica: Ele lê a palavra CARREGAR e sabe que ela é um comando válido. Ele lê o espaço e ignora. Ele lê o 5 e sabe que é um número.
  2. Análise Sintática: Ele verifica se depois do comando CARREGAR veio um número. Se você escrever apenas CARREGAR sem o número, ele dá erro de sintaxe!
  3. Geração de Código: Ele traduz a palavra CARREGAR para o número 1 e a palavra SOMAR para o número 2.

4. 📖 Exemplo Guiado: O Código do Tradutor

Em C++, o coração do nosso compilador seria um loop que lê as palavras e usa if/else para gerar os números:

// Pseudocódigo do compilador
if (palavra == "CARREGAR") {
    salvar_no_arquivo(1); // Código da instrução
    salvar_no_arquivo(numero_que_veio_depois);
}
else if (palavra == "SOMAR") {
    salvar_no_arquivo(2);
    salvar_no_arquivo(numero_que_veio_depois);
}
else if (palavra == "PARAR") {
    salvar_no_arquivo(3);
}

5. 🛠️ Prática Obrigatória: Compilando o Programa

Você é o compilador! Traduza os programas abaixo escritos na nossa linguagem de alto nível (Português) para a linguagem de máquina do simulador (Sequência de números):

Programa 1:

CARREGAR 20
SOMAR 5
SOMAR 2
PARAR

Resposta do compilador (Números): [ ?, ?, ?, ?, ?, ?, ? ]

Programa 2:

CARREGAR 100
SOMAR 50
PARAR

Resposta do compilador (Números): [ ?, ?, ?, ?, ? ]

Substitua os pontos de interrogação pelos números corretos baseando-se nas regras: CARREGAR = 1, SOMAR = 2, PARAR = 3.


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

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 20 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_20_projeto_p2.md
│   └── codigos/
│       └── cap20/
│           └── compilador.cpp

💡 Checkpoint de Lógica

Parabéns! Você construiu um ecossistema completo de computação em miniatura: criou uma linguagem, fez o compilador para traduzi-la e o simulador de CPU para executá-la. É assim que o mundo digital funciona!

10. 🔥 Desafio de Fixação

Escreva um parágrafo dizendo o que você achou mais interessante neste módulo: entender o hardware físico ou entender como os compiladores traduzem o código.

🔑 Gabarito de Código/Fórmulas

Gabarito do Programa 1:

  • CARREGAR 20 1, 20
  • SOMAR 5 2, 5
  • SOMAR 2 2, 2
  • PARAR 3
  • Resposta: [ 1, 20, 2, 5, 2, 2, 3 ]

Gabarito do Programa 2:

  • CARREGAR 100 1, 100
  • SOMAR 50 2, 50
  • PARAR 3
  • Resposta: [ 1, 100, 2, 50, 3 ]

Capitulo Anterior