Central Docs
Catálogo Inicio

MIR externo

El MIR externo es un programa lineal cuyo primer token selecciona una Rule:

mov rax, 1
add rbx, 2

Los tokens restantes son consumidos por la Rule. Si una línea deja tokens sin consumir, la compilación falla.

Línea de comandos

rif main.rif program.asm
rif main.pack program.asm
rif main.rif program.asm -o build/program.bin

La extensión debe coincidir con .ext en @linker. Sin -o, la salida usa la misma ruta del MIR con extensión .bin.

API directa

from MIR import compile_mir_source

result = compile_mir_source("main.rif", "mov rax\n")
binary_data = result.binary

Para reutilizar el target:

from MIR import compile_mir_source, prepare_target

target = prepare_target("main.pack")
first = compile_mir_source(target, "mov rax\n")
second = compile_mir_source(target, "add rbx\n")

Para archivo o tokens ya producidos por otro compilador:

from MIR import compile_mir_file, compile_mir_tokens, tokenize_mir

result = compile_mir_file("main.rif", "program.asm")
tokens = tokenize_mir("mov rax\n", "generated.asm")
result = compile_mir_tokens("main.pack", tokens)

compile_mir_tokens evita volver a tokenizar y parsear el MIR.

Secciones

La sección predeterminada es .entrysection. Una API directa puede elegir otra sección configurada:

result = compile_mir_source(target, source, section="text")

MIRCompilation expone binary, image, executions, program, context, section_binary y el nombre de la sección seleccionada. compile_mir acepta texto o un iterable de tokens.

También está disponible el pipeline de bajo nivel:

from MIR import compile_definition, compile_project, execute_rule

program = compile_definition("main.rif")
project = compile_project("main.rif")
execution = execute_rule(project, "mov", tokens)

parse_source expone el parseo de Gram y compile_source devuelve el target resuelto sin crear una imagen de salida.