
Como funciona o tradutor do Pyrtugues
Tempo de leitura: ~6 minutos
Spots 

Tempo de leitura: ~6 minutos

No meu primeiro post eu apresentei o Pyrtugues: uma linguagem de programação em português que traduz código para Python real. Muita gente perguntou como isso funciona por dentro. Esse post responde. Vou mostrar os desafios técnicos de traduzir código entre linguagens e como resolvi cada um. Se você nunca escreveu um tradutor, esse post é pra você. Se já escreveu, talvez encontre algo interessante. Traduzir mostrar("Olá") para print("Olá") parece simples. E é — se você só tem uma linha. O problema começa quando o código tem strings, comentários e f-strings. Veja esse exemplo: Se você fizer uma tradução ingênua (substituir toda palavra-chave), o resultado vira uma bagunça: Três problemas apareceram: O "e" dentro da string virou "and" O comentário foi traduzido O Python não entende isso A solução: proteger strings antes de traduzir
A primeira coisa que o tradutor faz é esconder todas as strings e comentários antes de mexer no código. Uso um scanner que percorre caractere por caractere:
Cada string/comentário vira um placeholder único tipo __PYRT_STR_0__. Depois o tradutor roda em paz, e no final os placeholders são restaurados. Resultado: as strings ficam intocadas. ✅ O caso mais difícil: f-strings F-strings são strings especiais que contêm expressões Python dentro de chaves: Não traduzir o texto normal da f-string ("Olá, ...") Traduzir as expressões dentro das chaves ({idade mais 1} → {idade + 1}) A solução é processar cada f-string separadamente, identificando onde começa e termina cada {...}: Isso funciona mesmo com f-strings aninhadas ou expressões complexas como {minha_lista[0] mais 10}. O truque das palavras contextuais Palavras como se, em, e, ou são ambíguas.
Podem ser: Palavra-chave (se idade > 10:) Nome de variável (se = 10) Parte de outra palavra (sete, sempre, tema) Uso regex com contexto específico pra cada caso: se só traduz no início de linha Isso garante que se idade > 10: vira if idade > 10:, mas se = 10 continua sendo variável. e / ou só entre expressões Isso evita que "bom dia e boa tarde" vire "bom dia and boa tarde". Métodos: só depois do ponto Em Python, métodos são chamados depois de um ponto: Em Pyrtugues, usamos palavras em português nos mesmos lugares: A tradução usa lookbehind pra garantir que só traduz depois do ponto: Isso evita que uma variável chamada maiúsculas seja traduzida por engano. O tradutor completo faz isso em sequência: Linha 1 do Python gerado: E funciona com código complexo: Os "e" dentro das strings ficam preservados. ✅ O que aprendi nesse projeto Fazer um tradutor parece simples até você tentar.
Aprendi três lições: Contexto é tudo. Substituir palavra por palavra não funciona. Precisa entender onde cada uma está. Strings são sagradas. Proteja antes de qualquer coisa. Teste com código real. Bug só aparece quando você tenta casos extremos. O código completo tá no GitHub. Se você quiser contribuir com melhorias no tradutor, abre uma issue ou manda PR. O Pyrtugues tá disponível em:
Ficou alguma dúvida sobre o tradutor? Quer saber mais sobre alguma parte específica? Comenta aqui embaixo que eu respondo! Pyrtugues — Programação em português. Lógica de Python. Uma ponte para aprender. Criado por Vinicius Caracciolo (12 anos) For further actions, you may consider blocking this person and/or reporting abuse
