Files
grassmudhorse.rs/src/main.rs
2020-05-08 08:03:19 +08:00

47 lines
1.3 KiB
Rust

mod err;
mod ins;
mod parser;
mod context;
mod vm;
use err::*;
use parser::*;
use context::*;
use vm::*;
// https://playsecurity.org/rawfile/grass_mud_horse_language_specification.md
// https://p.rogram.me/grassmudhorse.js/grassmudhorse.js
fn main() {
let input = "草草草泥马 马草草草泥草草草草泥泥马 草马草 泥马草泥 草草草泥草泥草马 泥马草草 草草草泥马 泥草草草 草马草 草草草泥草泥泥马 泥草草泥 马泥草草泥草草草泥草泥马 马草马草泥草草草草泥泥马 马草草草泥草草草泥草泥马 草马马 马马马";
let instructions = match parse_lang(input) {
Ok(i) => i, Err(err) => {
println!("Parse error: {}", err);
return;
},
};
let mut context = Context::new(false);
if context.is_debug() {
println!("[DEBUG] parsed instructions:");
for (ptr, ins) in instructions.iter().enumerate() {
println!("{} {:?}", ptr, ins);
}
}
let vm = Vm::new(instructions);
vm.defint_labels(&mut context);
match vm.execute(&mut context) {
Err(RuntimeError::EndVm) => (),
Err(err) => println!("Vm error: {}", err),
Ok(_) => (),
}
if context.is_debug() {
println!("[DEBUG] Vm ended, context: {:?}", context);
}
}