Try using an existing VM framework like WebAssembly runtime or build on a simple stack machine. Your intermediate representation looks like three-address code, which works great with bytecode interpreters. I built something similar with a basic C++ interpreter that keeps a symbol table for variables and a jump table for labels. Pattern matching for assignments, arithmetic, and conditional jumps is pretty straightforward. You could also generate assembly code and use an assembler, but that’s more complex. For quick prototyping, a Python interpreter would handle your variable assignments and control flow just fine.
This looks really interesting! What made you pick this IR format? Have you thought about writing a simple C interpreter or checking out LLVM IR? Also curious about performance - does it need to be fast or just working for now?