2024-09-09 01:08:04 +02:00
|
|
|
// mod assembler;
|
2025-09-08 16:04:31 +02:00
|
|
|
mod code_gen;
|
|
|
|
mod ir;
|
2024-09-09 01:08:04 +02:00
|
|
|
mod lexer;
|
2025-09-08 16:04:31 +02:00
|
|
|
mod parser;
|
2024-08-08 21:53:27 +02:00
|
|
|
|
|
|
|
mod error;
|
|
|
|
|
2024-09-09 01:08:04 +02:00
|
|
|
use color_eyre::eyre::Result;
|
|
|
|
// pub use error::*;
|
2025-09-08 16:04:31 +02:00
|
|
|
|
|
|
|
use crate::{
|
2025-09-08 16:47:18 +02:00
|
|
|
code_gen::Code,
|
|
|
|
lexer::TokenString,
|
|
|
|
parser::SExpression,
|
2025-09-08 16:04:31 +02:00
|
|
|
ir::generate_code,
|
|
|
|
};
|
2024-08-08 21:53:27 +02:00
|
|
|
|
2024-09-09 01:08:04 +02:00
|
|
|
fn main() -> Result<()> {
|
|
|
|
// let code = "(+ 1 (+ 5 5))".to_string();
|
|
|
|
color_eyre::install()?;
|
2024-08-08 21:53:27 +02:00
|
|
|
|
2025-09-08 16:04:31 +02:00
|
|
|
// let code = r#"(mul 2 (add 3 4))"#.to_string();
|
2024-09-09 01:08:04 +02:00
|
|
|
|
2025-09-08 16:47:18 +02:00
|
|
|
let code = "(add 3 4) (add 1 2)";
|
|
|
|
// let code = "(let ((a 3)) (out (add 1 a)) (out (add 2 a)))";
|
2024-09-09 01:08:04 +02:00
|
|
|
|
2025-09-08 16:47:18 +02:00
|
|
|
let lexed: TokenString = code.parse()?;
|
2024-09-09 01:08:04 +02:00
|
|
|
|
2025-09-08 16:04:31 +02:00
|
|
|
let parsed: Vec<SExpression> = (lexed.try_into())?;
|
2025-09-08 16:47:18 +02:00
|
|
|
for instruction in parsed.clone() {
|
|
|
|
println!("{instruction}");
|
|
|
|
}
|
2025-09-08 16:04:31 +02:00
|
|
|
|
2025-09-08 16:47:18 +02:00
|
|
|
let code = generate_code(parsed)?;
|
2024-09-09 01:08:04 +02:00
|
|
|
|
2025-09-08 16:47:18 +02:00
|
|
|
let code: Code = code.into();
|
2025-09-08 16:04:31 +02:00
|
|
|
|
|
|
|
dbg!(code);
|
2024-09-09 01:08:04 +02:00
|
|
|
/*
|
2024-08-11 04:25:14 +02:00
|
|
|
|
|
|
|
for byte in assembled {
|
|
|
|
print!("{byte:#X}, ");
|
|
|
|
}
|
|
|
|
|
2024-09-09 01:08:04 +02:00
|
|
|
println!(""); */
|
2025-09-08 16:04:31 +02:00
|
|
|
Ok(())
|
2024-08-08 21:53:27 +02:00
|
|
|
}
|