2024-10-21 17:30:43 +03:00
|
|
|
#![feature(let_chains)]
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-22 14:12:01 +03:00
|
|
|
use std::{env, fs, 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() {
|
2024-10-22 14:12:01 +03:00
|
|
|
let args: Vec<String> = env::args().collect();
|
|
|
|
let input = args.get(1).expect("malformed arguments");
|
|
|
|
let program: Vec<u8> = load_program(input);
|
|
|
|
let name = args
|
|
|
|
.get(2)
|
|
|
|
.map(|s| s.to_string())
|
|
|
|
.unwrap_or_else(|| "program".to_string());
|
2024-10-20 00:40:01 +03:00
|
|
|
|
2024-10-22 14:12:01 +03:00
|
|
|
compiler::compile(program, name);
|
2024-10-21 17:30:43 +03:00
|
|
|
// interpreter::run(program);
|
2024-10-20 00:40:01 +03:00
|
|
|
}
|
|
|
|
|
2024-10-22 14:12:01 +03:00
|
|
|
fn load_program(input: &str) -> Vec<u8> {
|
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()
|
|
|
|
}
|