42 auto program = parser.
parse();
45 auto bytecode = codegen.
generate(*program);
52 auto vm = std::make_unique<VM>();
58 vm->setImportHandler([vm_ptr = vm.get()](
const std::filesystem::path &path) {
59 std::ifstream file(path);
61 throw std::runtime_error(
"Could not open imported file: " + path.string());
62 std::stringstream buffer;
63 buffer << file.rdbuf();
64 runSourceString(buffer.str(), *vm_ptr);
Code generator for Phasor VM.
Bytecode generate(const AST::Program &program, const std::map< std::string, int > &existingVars={}, int nextVarIdx=0, bool replMode=false)
Generate bytecode from program.
std::vector< Token > tokenize()
std::unique_ptr< AST::Program > parse()
Repl(int argc, char *argv[], char *envp[])
static void runSourceString(const std::string &source, VM &vm)
std::unique_ptr< VM > createVm()
static void registerFunctions(VM &vm)
Register all standard library functions.
static char ** argv
Command line arguments.
static int argc
Number of command line arguments.
static char ** envp
Environment variables.
void run(const Bytecode &bytecode)
Run the virtual machine.
void runRepl(VM *vm=nullptr)
Run an REPL.
The Phasor Programming Language and Runtime.