From f98a6567bcf940514101626de65c881389715ecd Mon Sep 17 00:00:00 2001 From: Marli Frost Date: Thu, 15 Apr 2021 17:23:56 +0100 Subject: [PATCH] add a basic frontend for experimentation --- src/main.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main.rs diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..70e19cf --- /dev/null +++ b/src/main.rs @@ -0,0 +1,23 @@ +use passerine::{ + common::{closure::Closure, source::Source}, + compiler::{lex, parse, desugar, gen, hoist}, + vm::vm::VM, +}; + +pub fn main() -> Result<(), String> { + let path = std::env::args_os().nth(1).expect("Usage: "); + + let source = Source::path(path.as_ref()) + .map_err(|_| format!("Could not find source entrypoint {:?}", path))?; + + let tokens = lex(source).map_err(|e| e.to_string())?; + let ast = parse(tokens).map_err(|e| e.to_string())?; + let cst = desugar(ast).map_err(|e| e.to_string())?; + let sst = hoist(cst).map_err(|e| e.to_string())?; + let bytecode = gen(sst).map_err(|e| e.to_string())?; + + let mut vm = VM::init(Closure::wrap(bytecode)); + vm.run().map_err(|e| e.to_string())?; + + Ok(()) +} \ No newline at end of file