//use std::{env, fs};
//use kabel::{debug::{debug_ast, debug_token_array}, run_lexer, run_parser, run_semantic_analysis};
use vm::{Value, VM};
//use crate::vm::{Value, VM};
mod vm;
mod string;
fn main() {
/*let args: Vec<String> = env::args().collect();
let program =
fs::read_to_string(args[1].clone()).unwrap();
let mut output = "".to_string();
let lexer = run_lexer(program.to_string());
for error in lexer.errors.clone() {
output += &error.to_string();
output += "\n";
}
output += &format!("{:?}", lexer.output);
if lexer.errors.len() != 0 || lexer.output.len() == 0 {
println!("{}", output);
return;
}
//output += &debug_token_array(lexer.output.clone());
output += "\n\n";
let (ast, parser) = run_parser(program.to_string(), lexer.output);
for error in parser.errors.clone() {
output += &error.to_string();
output += "\n";
}
if parser.errors.len() != 0 {
println!("{}", output);
return;
}
//output += &debug_ast(ast.clone(), 0);
output += &format!("{:#?}", ast);
output += "\n\n";
let analyzer = run_semantic_analysis(program.to_string(), ast);
for error in analyzer.errors.clone() {
output += &error.to_string();
output += "\n";
}
println!("{}", output);*/
let mut vm = VM::new(vec![0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x01, 0xFE], vec![(1,6)],
vec![Value::Num(1.),Value::Num(2.)], "print 1-2+2".to_string());
vm.run().unwrap();
}