//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 = 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(); }