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 ir::IRepr;
|
2024-09-09 01:08:04 +02:00
|
|
|
use lexer::TokenString;
|
2025-09-08 16:04:31 +02:00
|
|
|
use parser::SExpression;
|
|
|
|
|
|
|
|
use crate::{
|
|
|
|
code_gen::{EightBitLang, GenerateCode, Scope},
|
|
|
|
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:04:31 +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:04:31 +02:00
|
|
|
let lexed: TokenString = dbg!((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())?;
|
|
|
|
println!("{parsed:?}");
|
|
|
|
|
|
|
|
let code: IRepr = generate_code(parsed)?;
|
2024-09-09 01:08:04 +02:00
|
|
|
|
2025-09-08 16:04:31 +02:00
|
|
|
// let code: EightBitLang = code.to_code(&mut Scope::new())?;
|
|
|
|
|
|
|
|
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
|
|
|
}
|