Add assembler and execution logic
Most everything works, but there's one small bug with the execution involving jumps - still have to figure that one out. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
21
src/main.rs
21
src/main.rs
@@ -21,14 +21,29 @@ fn get_input_string() -> io::Result<String> {
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
use vm::obj::syn::{lexer, parser};
|
||||
use vm::{
|
||||
state::State,
|
||||
obj::{
|
||||
assemble::{Asm, Assemble},
|
||||
syn::{lexer, parser},
|
||||
}
|
||||
};
|
||||
let text = get_input_string()?;
|
||||
let lexerdef = lexer::lexerdef();
|
||||
let lexer = lexerdef.lexer(&text);
|
||||
let (res, errors) = parser::parse(&lexer);
|
||||
for err in errors {
|
||||
for err in errors.iter() {
|
||||
println!("{}", err.pp(&lexer, &parser::token_epp));
|
||||
}
|
||||
println!("{:?}", res);
|
||||
if !errors.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
let res = res.unwrap();
|
||||
let mut asm = Asm::default();
|
||||
let object = res.assemble(&mut asm)?;
|
||||
let mut state = State::new();
|
||||
state.load_object(object, 64 * 1024 * 1024)?;
|
||||
let status = state.exec()?;
|
||||
println!("exit status: {}", status);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user