Pular para o conteúdo

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.

FaseArquivoEntrega
lexerlexer.py, tokens.pytokens com linha e coluna
parserparser.py, ast_nodes.pya árvore
analisadortypechecker.pyerros e avisos antes de rodar
onde mora um adoptresolucao.pyo caminho — a única cópia da regra
o que um arquivo oferecesuperficie.pya superfície, sem executar — usada pelo check e pela ABI
execuçãointerpreter.pya semântica
compilaçãocompilador.pya árvore vira fechamentos, uma vez
representações do meiohir.py, mir.py, ssa.py, lir.pyo que o compilador vê
bibliotecastdlib/85 módulos
ferramentasformatter.py, linter.py, testrunner.py, lsp.py, dap.pyfmt, 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 mapa

O 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.