A arquitetura em arquivos
Onde mora cada fase: do lexer ao interpretador, e as ferramentas que leem as mesmas estruturas.
A linguagem inteira mora em dataforge/, em Python, sem dependência externa em tempo de execução. Cada fase é um arquivo, e as ferramentas leem as mesmas estruturas que o interpretador — uma segunda leitura divergiria da primeira, e aí duas respostas para a mesma pergunta passariam a discordar.
| Fase | Arquivo | Entrega |
|---|---|---|
| lexer | lexer.py, tokens.py | tokens com linha e coluna |
| parser | parser.py, ast_nodes.py | a árvore |
| analisador | typechecker.py | erros e avisos antes de rodar |
onde mora um adopt | resolucao.py | o caminho — a única cópia da regra |
| o que um arquivo oferece | superficie.py | a superfície, sem executar — usada pelo check e pela ABI |
| execução | interpreter.py | a semântica |
| compilação | compilador.py | a árvore vira fechamentos, uma vez |
| representações do meio | hir.py, mir.py, ssa.py, lir.py | o que o compilador vê |
| biblioteca | stdlib/ | 85 módulos |
| ferramentas | formatter.py, linter.py, testrunner.py, lsp.py, dap.py | fmt, lint, test, editor, depurador |
dataforge
adopt Arcane.Ecossistema as E
conferido := E.conferir()
assert conferido["ok"] // nenhum caminho citado sumiu
assert len(conferido["orfaos"]) is 0 // nenhum arquivo ficou fora do mapaO fluxo de um arquivo: texto → tokenize → parse → [check] → Interpreter.run. O interpretador despacha por nome de classe — um nó GivenBlock procura exec_GivenBlock —, e por isso acrescentar um recurso à linguagem é mexer em cinco lugares: tokens, lexer, nós e parser, interpretador, analisador. O guia está em Contribuir.