2024-10-21 17:30:43 +03:00
|
|
|
#![feature(let_chains)]
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-21 17:30:43 +03:00
|
|
|
use std::{env, fs, io::Write, path::PathBuf};
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-21 17:30:43 +03:00
|
|
|
mod asm_gen;
|
|
|
|
mod compiler;
|
|
|
|
mod interpreter;
|
|
|
|
mod tokenizer;
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-21 17:30:43 +03:00
|
|
|
fn main() {
|
|
|
|
let program: Vec<u8> = load_program();
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-21 17:30:43 +03:00
|
|
|
let tokens = tokenizer::Tokenizer::default().tokenize(program);
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-21 17:30:43 +03:00
|
|
|
let asm = asm_gen::generate(tokens);
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-21 17:30:43 +03:00
|
|
|
let mut file = fs::File::create("./demo.asm").unwrap();
|
|
|
|
file.write_all(asm.as_bytes()).unwrap();
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-21 17:30:43 +03:00
|
|
|
// interpreter::run(program);
|
2024-10-20 00:40:01 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
fn load_program() -> Vec<u8> {
|
2024-10-20 13:36:51 +03:00
|
|
|
let args: Vec<String> = env::args().collect();
|
2024-10-20 14:26:25 +03:00
|
|
|
let input = args.get(1).expect("malformed arguments");
|
2024-10-20 13:36:51 +03:00
|
|
|
|
|
|
|
let path: PathBuf = input.into();
|
2024-10-20 14:26:25 +03:00
|
|
|
let input = fs::read_to_string(path).expect("failed to read the program file");
|
2024-10-20 00:40:01 +03:00
|
|
|
input.as_bytes().to_vec()
|
|
|
|
}
|