📖 Leia em outros idiomas: English | Português (Brasil)
Já se perguntou como Python, JavaScript ou PHP realmente funcionam por baixo dos panos?
JECH é uma linguagem de programação construída do zero para te ensinar exatamente isso — de forma clara, documentada e acessível.
Você é um desenvolvedor que:
- ✅ Conhece Python, JavaScript ou PHP
- ✅ Escreve código todos os dias
- ✅ Se pergunta "como o
print()realmente funciona?" - ❌ Nunca tocou em C ou compiladores
- ❌ Não sabe o que significa "bytecode"
- ❌ Acha "lexer" intimidante
Perfeito! JECH foi construído especificamente para você.
Você sabe usar Python:
print("Olá")
x = 10
if x > 5:
print(x)Mas você não tem ideia de como o Python realmente executa isso. É mágica! ✨
JECH mostra exatamente como funciona, passo a passo:
Seu Código → Tokenizer → Parser → AST → Bytecode → VM → Saída
📝 🔤 🧱 🌳 🔧 ⚡ ✨
Cada estágio é:
- ✅ Documentado com exemplos
- ✅ Explicado em termos que você já conhece
- ✅ Visível - você pode ver acontecer
- ✅ Modular - cada peça é independente
git clone https://github.com/seuusuario/jech
cd jech
make./build/jech>>> keep x = 10;
>>> say(x);
10
>>> keep nome = "JECH";
>>> say(nome);
JECH
>>> keep numeros = [1, 2, 3];
>>> say(numeros[0]);
1
É como o modo interativo do Python!
./build/jech examples/17_arrays_basic.jcVocê conhece isso:
print("Olá")JECH mostra que isso acontece:
1. Tokenizer quebra em: [print] [(] ["Olá"] [)]
2. Parser entende: "Isso é um comando print"
3. Compilador gera: OP_PRINT "Olá"
4. VM executa: Imprime "Olá" na tela
Mesmo processo que o Python usa! (CPython faz exatamente isso)
Você conhece isso:
const x = 10;
console.log(x);JECH mostra:
- Como o V8 tokeniza seu código
- Como o parser constrói uma AST
- Como o bytecode é gerado
- Como a VM executa
Mesmos princípios, sintaxe diferente!
Você conhece isso:
$x = 10;
echo $x;JECH revela:
- Como o Zend Engine processa seu código
- Como os opcodes são gerados
- Como o executor os executa
Mesma arquitetura!
Objetivo: Ficar confortável com a sintaxe do JECH
# Experimente o REPL
./build/jech
# Execute exemplos
./build/jech examples/01_hello_world.jc
./build/jech examples/17_arrays_basic.jcTempo: 15 minutos
Docs: Recursos da Linguagem
Objetivo: Aprenda como linguagens funcionam (sem C necessário!)
Leia: Guia Para Iniciantes
Este guia explica:
- O que é um tokenizer? (com analogias Python)
- O que é um parser? (com exemplos JavaScript)
- O que é bytecode? (como arquivos
.pycdo Python) - O que é uma VM? (como CPython)
Tempo: 30 minutos
Pré-requisitos: Nenhum! Apenas curiosidade
Objetivo: Observe o código se transformar através de cada estágio
Leia: Visão Geral da Arquitetura
Siga uma única linha de código:
say("Olá");
Através de todos os 5 estágios:
- Tokenizer →
[say] [(] ["Olá"] [)] [;] - Parser →
SAY_STATEMENT - AST →
SAY_NODE { value: "Olá" } - Bytecode →
OP_SAY "Olá" - VM →
print("Olá")
Tempo: 45 minutos
Pré-requisitos: Nível 2
Objetivo: Entenda cada componente em detalhes
Leia:
- Tokenizer - Como código vira tokens
- Parser - Como tokens viram estrutura
- AST - Como estrutura vira árvores
- Bytecode - Como árvores viram instruções
- VM - Como instruções viram execução
Tempo: 2-3 horas
Pré-requisitos: Nível 3
Objetivo: Adicione recursos, corrija bugs, melhore docs
Leia: Guia de Contribuição
Você pode contribuir mesmo sem conhecer C:
- Escrever programas de exemplo
- Melhorar documentação
- Reportar bugs
- Sugerir recursos
- Escrever testes
Tempo: Contínuo
Pré-requisitos: Entusiasmo!
keep x = 10;
keep nome = "João";
keep ativo = true;
say(x); // 10
say(nome); // João
say(ativo); // true
Como: x = 10 do Python, const x = 10 do JavaScript, $x = 10 do PHP
keep numeros = [1, 2, 3, 4, 5];
keep nomes = ["Alice", "Bob", "Charlie"];
keep misturado = [42, "texto", true];
say(numeros[0]); // 1
say(nomes[1]); // Bob
say(misturado[2]); // true
Como: Listas do Python, arrays do JavaScript, arrays do PHP
keep idade = 20;
when (idade > 18) {
say("Adulto");
}
else {
say("Menor");
}
Como: if do Python, if do JavaScript, if do PHP
say("Olá, Mundo!");
say(42);
say(true);
say(minhaVariavel);
say(meuArray[0]);
Como: print() do Python, console.log() do JavaScript, echo do PHP
Cada linha de código passa por 5 estágios:
┌─────────────┐
│ Código Fonte│ say("Olá");
└──────┬──────┘
│
▼
┌─────────────┐
│ Tokenizer │ [say] [(] ["Olá"] [)] [;]
└──────┬──────┘
│
▼
┌─────────────┐
│ Parser │ SAY_STATEMENT { value: "Olá" }
└──────┬──────┘
│
▼
┌─────────────┐
│ AST │ SAY_NODE → "Olá"
└──────┬──────┘
│
▼
┌─────────────┐
│ Bytecode │ [OP_SAY "Olá"]
└──────┬──────┘
│
▼
┌─────────────┐
│ VM │ Executa: print "Olá"
└──────┬──────┘
│
▼
Saída: Olá
Isso é exatamente como o Python funciona:
| Estágio JECH | Equivalente Python | O Que Faz |
|---|---|---|
| Tokenizer | módulo tokenize |
Quebra código em pedaços |
| Parser | ast.parse() |
Valida sintaxe |
| AST | ast.AST |
Cria estrutura em árvore |
| Bytecode | arquivos .pyc |
Compila para instruções |
| VM | CPython | Executa instruções |
Mente explodida? 🤯 Agora você sabe como o Python funciona!
JECH tem 70 testes automatizados cobrindo:
- ✅ Tokenizer (32 asserções)
- ✅ Parser (25 asserções)
- ✅ VM (6 asserções)
- ✅ Integração (7 asserções)
./run_tests.shExecute testes automaticamente antes de cada commit:
./install_hooks.shComo: pytest do Python, jest do JavaScript, PHPUnit do PHP
- Guia Para Iniciantes ⭐
- Sem conhecimento de C necessário
- Usa analogias Python/JavaScript
- Explica cada conceito de forma simples
- Visão Geral da Arquitetura
- Explicação completa da pipeline
- Diagramas visuais
- Exemplos passo a passo
- Tokenizer - Análise léxica
- Parser - Análise sintática
- AST - Estruturas em árvore
- Bytecode - Compilação
- VM - Execução
Aprenda como suas linguagens favoritas funcionam:
- Python (CPython)
- JavaScript (V8, SpiderMonkey)
- PHP (Zend Engine)
- Ruby (YARV)
Todas usam os mesmos princípios que o JECH demonstra!
Cada estágio é visível:
# Ver tokens
./build/jech --debug-tokens meuarquivo.jc
# Ver AST
./build/jech --debug-ast meuarquivo.jc
# Ver bytecode
./build/jech --debug-bytecode meuarquivo.jcRecursos reais:
- ✅ Variáveis
- ✅ Arrays
- ✅ Condicionais
- ✅ REPL
- ✅ Mensagens de erro
- ✅ Sistema de tipos (em breve)
Base de código pequena:
- ~3.000 linhas de C
- Bem documentado
- Design modular
- Fácil de entender
JECH existe para ensinar como linguagens de programação funcionam. Cada decisão de design prioriza clareza sobre performance.
Mostrar que construir uma linguagem é alcançável. Você não precisa de PhD ou 10 anos de experiência em C.
JECH não pretende substituir Python, JavaScript ou PHP. É uma ferramenta de aprendizado.
JECH foi criado como:
- Uma jornada de aprendizado - Entendendo como linguagens funcionam
- Uma ferramenta de ensino - Compartilhando esse conhecimento com outros
- Uma homenagem - Aos meus filhos Jonathan Edwards e Charles Haddon (J-E-C-H)
Foi construído com amor, para aprendizes, por um aprendiz.
Aceitamos contribuições de desenvolvedores de todos os níveis de experiência!
- 📝 Escrevendo programas de exemplo
- 📖 Melhorando documentação
- 🐛 Reportando bugs
- 💡 Sugerindo recursos
- 🧪 Escrevendo testes
- 🌍 Traduzindo docs
Sem experiência em C necessária!
Veja CONTRIBUTING.md para detalhes.
- Linguagem: C
- Linhas de Código: ~3.000
- Testes: 70 (100% passando)
- Documentação: 6 guias detalhados
- Exemplos: 22 programas
- Contribuidores: Crescendo!
- Tokenizer
- Parser
- AST
- Compilador de bytecode
- Máquina Virtual
- Variáveis
- Arrays
- Condicionais
- REPL
- Testes abrangentes
- Documentação
- Funções
- Loops
- Sistema de tipos
- Biblioteca padrão
- Coleta de lixo
- Passes de otimização
- Compilação JIT
- Gerenciador de pacotes
Veja roadmap.md para detalhes.
- Para Iniciantes - Comece aqui!
- Arquitetura - Veja o panorama geral
- Tokenizer - Primeiro estágio
- Parser - Segundo estágio
- VM - Estágio final
- Crafting Interpreters - Livro excelente
- CPython Internals - Como Python funciona
- V8 Blog - Como JavaScript funciona
JECH é software livre e de código aberto licenciado sob a Licença Apache 2.0.
- Python - Por inspiração e padrões de design
- Crafting Interpreters - Pela abordagem educacional
- A comunidade - Por feedback e contribuições
Pronto para aprender como linguagens funcionam?
Começar | Documentação | Contribuir
Feito com ❤️ para desenvolvedores curiosos
