Back-end para geração de código Delégua em .NET.
Segue a mesma arquitetura de delegua-llvm: reaproveita o Lexador e o AvaliadorSintatico de @designliquido/delegua e implementa VisitanteDeleguaInterface para percorrer a AST diretamente. Ao invés de gerar LLVM IR, este compilador gera CIL (Common Intermediate Language) em formato texto, que é então montado por ilasm.
Diferente de delegua-llvm (que usa bindings nativos do LLVM), este back-end usa emissão textual, no mesmo espírito dos Tradutor* de assembly (tradutor-assembly-x64.ts, tradutor-webassembly.ts) já existentes no repositório principal delegua.
Suporta apenas:
varcom literais (inteiro,numero,texto,logico);- leitura de variáveis já declaradas;
- aritmética (
+ - * /) entreinteiro/numero, com promoção parafloat64quando misturados (divisão sempre produznumero, mesmo entre inteiros); escreva(...)com os tipos acima.
Todo o restante da gramática (se/enquanto/para/escolha, funções, classes, vetores, importar, exceções, closures, FFI) ainda não é suportado e lança ErroCompilador — ver fontes/visitante-base-nao-implementado.ts.
| Delégua | CIL |
|---|---|
inteiro |
int32 |
numero |
float64 |
logico |
bool |
texto |
string |
Os tipos são fixos e estaticamente tipados no código gerado — não há BigInt/precisão arbitrária como no interpretador dinâmico (mesma divergência deliberada adotada por delegua-llvm).
yarn executar caminho/para/arquivo.deleguaGera um .il ao lado do arquivo de entrada. Se ilasm estiver disponível no PATH, também monta um .exe.
- .NET SDK instalado (
dotnet --version). ilasm: não é incluído por padrão no SDK do .NET moderno (Core/5+). Para obtê-lo:- Crie um projeto de scratch referenciando o pacote NuGet
runtime.win-x64.Microsoft.NETCore.ILAsm(ou a variante do seu sistema operacional); - Restaure (
dotnet restore) e localize o binárioilasmdentro do cache de pacotes NuGet; - Adicione-o ao
PATH.
- Crie um projeto de scratch referenciando o pacote NuGet
yarn testes-unitariosOs testes verificam o texto CIL gerado diretamente (sem precisar de ilasm instalado), no mesmo estilo de delegua-llvm/testes/compilador-llvm.base.test.ts.