Add parser, vm, objects

Big ol thing. You should check it out sometime

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2022-01-07 20:30:55 -08:00
parent 946a927b09
commit 9e20dcf59c
17 changed files with 712 additions and 84 deletions

View File

@@ -1,15 +1,24 @@
mod compile;
mod object;
mod syn;
mod vm;
use std::io::Read;
use std::path::PathBuf;
use structopt::StructOpt;
use syn::lexer::Lexer;
use syn::parser::Parser;
use vm::machine::MachineBuilder;
#[derive(Debug, StructOpt)]
struct Opt {
#[structopt(name = "PATH", parse(from_os_str))]
path: Option<PathBuf>,
#[structopt(long)]
max_stack_size: Option<usize>,
#[structopt(long)]
max_arena_objects: Option<usize>,
}
type Result<T = (), E = Box<dyn std::error::Error>> = std::result::Result<T, E>;
@@ -25,10 +34,16 @@ fn main() -> Result {
input
};
let mut lexer = Lexer::new(&text);
while let Some(token) = lexer.next()? {
println!("{:?}", token);
let mut parser = Parser::from(text.as_str());
let mut exprs = Vec::new();
while !parser.is_eof() {
exprs.extend(parser.next_expr_list()?);
}
let machine = MachineBuilder::default()
.max_stack_size(opt.max_stack_size)
.max_arena_objects(opt.max_arena_objects)
.finish();
Ok(())
}