From f4027cae775e3c9c237675f9df35a744d54f3f2e Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Mon, 28 Oct 2024 19:52:29 +1300 Subject: Rewrite assembler This is an almost complete rewrite of the entire assembler from the ground up, with a different parsing strategy and a whole new symbol resolution mechanism for automatically including library files. The assembly syntax has also been slightly modified, with padding tokens now being prefixed with '#' instead of '$', and a block-style anonymous-label syntax which uses the '{' and '}' characters. --- src/main.rs | 43 ------------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 11ce42b..0000000 --- a/src/main.rs +++ /dev/null @@ -1,43 +0,0 @@ -use std::io::{Read, Write}; -use bedrock_asm::*; - -fn main() { - // Read source code from standard input - let mut source_code = String::new(); - if let Err(err) = std::io::stdin().read_to_string(&mut source_code) { - eprintln!("Could not read from standard input, quitting."); - eprintln!("({err:?})"); - std::process::exit(1); - }; - - let (bytecode, tokens) = assemble(&source_code); - let mut is_error = false; - for token in &tokens { - if token.print_error(&source_code) { is_error = true }; - } - if !is_error { - for token in &tokens { - if let SemanticTokenType::LabelDefinition(def) = &token.r#type { - if def.references.is_empty() { - eprintln!("Unused label definition: {}", def.name); - } - } - } - eprintln!(); - } - - let byte_count = bytecode.len(); - let byte_percentage = (byte_count as f32 / 65536.0 * 100.0).round() as u16; - eprintln!("Assembled program in {byte_count} bytes ({byte_percentage}% of maximum)."); - - if is_error { - std::process::exit(1) - } - - // Write bytecode to standard output - if let Err(_) = std::io::stdout().write_all(&bytecode) { - eprintln!("Could not write to standard output, quitting."); - std::process::exit(1); - } -} - -- cgit v1.2.3-70-g09d2