L’IR (Intermediate Representation) de Vitte est la couche intermédiaire entre le parsing (AST) et la génération de bytecode (VITBC).
Elle fournit une représentation abstraite mais proche de la machine, permettant des optimisations, des transformations et un passage clair vers l’exécution.
opcode
: opération (LOAD, STORE, ADD, CALL, RETURN, etc.)operands
: registres, constantes, labelsspan
: info de debug (ligne, colonne)LOAD_CONST r1, #0 ; charge constante 0 dans r1
STORE_GLOBAL g0, r1 ; g0 = r1
FUNC add(a, b):
LOAD_ARG r1, a
LOAD_ARG r2, b
ADD r3, r1, r2
RETURN r3
END
for
, while
, if-else
) en instructions IR simples.Étape | Représentation | Objectif principal |
---|---|---|
AST | Arbre syntaxique | Fidèle au code source |
IR | Suite d’instructions abstraites | Optimisations, analyse |
Bytecode | Instructions compactes | Exécution par la VM |
.ir
).irb
)Exemple JSON :
{
"funcs": [
{
"name": "add",
"ops": [
{"op": "LOAD_ARG", "dst": "r1", "src": "a"},
{"op": "LOAD_ARG", "dst": "r2", "src": "b"},
{"op": "ADD", "dst": "r3", "lhs": "r1", "rhs": "r2"},
{"op": "RETURN", "src": "r3"}
]
}
]
}
flowchart TD
A[AST] --> B[IR: RawProgram/RawOp]
B --> C[Optimisations]
C --> D[VITBC Compiler]
D --> E[Bytecode]
Commandes associées via vitte-cli
:
vitte build main.vit --emit-ir=main.ir
vitte run main.vit --dump-ir
Outils prévus :
ir-viewer
: visualisation graphiqueL’IR est le cœur de la compilation Vitte.
C’est à ce niveau que se joue la performance, la clarté et la robustesse du langage.