From 2a6991fe4af898c5eef0c2aba997fd6da03fc8b3 Mon Sep 17 00:00:00 2001 From: zxq5 Date: Tue, 24 Jun 2025 19:34:45 +0100 Subject: [PATCH] idk, i refactored some stuff ig --- assembler/brainf.bf | 61 ++++++++++++--------------- assembler/src/assembler/lexer.rs | 6 ++- assembler/src/image_builder/mod.rs | 0 assembler/src/lib.rs | 4 +- assembler/src/main.rs | 5 ++- assembler/src/{ => tooling}/brainf.rs | 0 assembler/src/tooling/mod.rs | 1 + 7 files changed, 40 insertions(+), 37 deletions(-) create mode 100644 assembler/src/image_builder/mod.rs rename assembler/src/{ => tooling}/brainf.rs (100%) diff --git a/assembler/brainf.bf b/assembler/brainf.bf index 42e73cc..4adf535 100644 --- a/assembler/brainf.bf +++ b/assembler/brainf.bf @@ -1,34 +1,29 @@ -++++++++++++++++++++++++++++++++++++++++++++ c1v44 : ASCII code of comma ->++++++++++++++++++++++++++++++++ c2v32 : ASCII code of space ->++++++++++++++++ c3v11 : quantity of numbers to be calculated -> c4v0 : zeroth Fibonacci number (will not be printed) ->+ c5v1 : first Fibonacci number -<< c3 : loop counter -[ block : loop to print (i)th number and calculate next one ->> c5 : the number to be printed - - block : divide c5 by 10 (preserve c5) -> c6v0 : service zero ->++++++++++ c7v10 : divisor -<< c5 : back to dividend -[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<] c5v0 : divmod algo; results in 0 n d_n%d n%d n/d ->[<+>-] c5 : move dividend back to c5 and clear c6 ->[-] c7v0 : clear c7 - ->> block : c9 can have two digits; divide it by ten again ->++++++++++ c10v10: divisor -< c9 : back to dividend -[->-[>+>>]>[+[-<+>]>+>>]<<<<<] c9v0 : another divmod algo; results in 0 d_n%d n%d n/d ->[-] c10v0 : clear c10 ->>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]c12v0 : print nonzero n/d (first digit) and clear c12 -<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]] c11v0 : print nonzero n%d (second digit) and clear c11 - -<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-] c8v0 : print any n%d (last digit) and clear c8 -<<<<<<<.>. c1c2 : print comma and space - block : actually calculate next Fibonacci in c6 ->>[>>+<<-] c4v0 : move c4 to c6 (don't need to preserve it) ->[>+<<+>-] c5v0 : move c5 to c6 and c4 (need to preserve it) ->[<+>-] c6v0 : move c6 with sum to c5 -<<<- c3 : decrement loop counter +++++++++++++++++++++++++++++++++++++++++++++ +>++++++++++++++++++++++++++++++++ +>++++++++++++++++ +> +>+ +<< +[ +>> +> +>++++++++++ +<< +[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<] +>[<+>-] +>[-] +>> +>++++++++++ +< +[->-[>+>>]>[+[-<+>]>+>>]<<<<<] +>[-] +>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]] +<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]] +<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-] +<<<<<<<.>. +>>[>>+<<-] +>[>+<<+>-] +>[<+>-] +<<<- ] -<<++... c1 : output three dots +<<++... diff --git a/assembler/src/assembler/lexer.rs b/assembler/src/assembler/lexer.rs index 0150309..f5adfb5 100644 --- a/assembler/src/assembler/lexer.rs +++ b/assembler/src/assembler/lexer.rs @@ -12,7 +12,7 @@ pub fn lexer(mut program: String, module: u64) -> Result, AssembleErr let mut literal = String::new(); for line in lines { - for token in line.split_whitespace() { + for (i, token) in line.split_whitespace().enumerate() { if token.starts_with("//") { break; } @@ -23,7 +23,9 @@ pub fn lexer(mut program: String, module: u64) -> Result, AssembleErr if !literal.is_empty() { if !token.starts_with('"') { - literal.push(' '); + if i > 0 { + literal.push(' '); + } literal.push_str(token); } diff --git a/assembler/src/image_builder/mod.rs b/assembler/src/image_builder/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/assembler/src/lib.rs b/assembler/src/lib.rs index bdc132f..1278fbc 100644 --- a/assembler/src/lib.rs +++ b/assembler/src/lib.rs @@ -13,11 +13,13 @@ )] pub mod assembler; -pub mod brainf; +pub mod image_builder; pub mod tooling; mod util; pub mod prelude { pub use crate::assembler::CompilerEngine; + pub use crate::image_builder; + pub use crate::tooling::brainf; pub use crate::tooling::project; } diff --git a/assembler/src/main.rs b/assembler/src/main.rs index aee5ff3..6a5fb35 100644 --- a/assembler/src/main.rs +++ b/assembler/src/main.rs @@ -1,4 +1,7 @@ -use assembler::{brainf, prelude::*}; +use assembler::{ + prelude::*, + tooling::{brainf, project}, +}; use std::{fs, io::Write, path::PathBuf}; fn main() { diff --git a/assembler/src/brainf.rs b/assembler/src/tooling/brainf.rs similarity index 100% rename from assembler/src/brainf.rs rename to assembler/src/tooling/brainf.rs diff --git a/assembler/src/tooling/mod.rs b/assembler/src/tooling/mod.rs index 36df406..294e630 100644 --- a/assembler/src/tooling/mod.rs +++ b/assembler/src/tooling/mod.rs @@ -1 +1,2 @@ +pub mod brainf; pub mod project;