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:
23
src/main.rs
23
src/main.rs
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user