lisp-8bit/src/main.rs

49 lines
882 B
Rust
Raw Normal View History

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
}