🚀 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= Carregar2= Somar3= 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 5SOMAR 10PARAR
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:
- Análise Léxica: Ele lê a palavra
CARREGARe sabe que ela é um comando válido. Ele lê o espaço e ignora. Ele lê o5e sabe que é um número. - Análise Sintática: Ele verifica se depois do comando
CARREGARveio um número. Se você escrever apenasCARREGARsem o número, ele dá erro de sintaxe! - Geração de Código: Ele traduz a palavra
CARREGARpara o número1e a palavraSOMARpara o número2.
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
PARARResposta do compilador (Números): [ ?, ?, ?, ?, ?, ?, ? ]
Programa 2:
CARREGAR 100
SOMAR 50
PARARResposta 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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 20 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_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 201, 20SOMAR 52, 5SOMAR 22, 2PARAR3- Resposta:
[ 1, 20, 2, 5, 2, 2, 3 ]
Gabarito do Programa 2:
CARREGAR 1001, 100SOMAR 502, 50PARAR3- Resposta:
[ 1, 100, 2, 50, 3 ]