From b365243a052470f957f819009f3261e824a8b6d0 Mon Sep 17 00:00:00 2001 From: T0b1 Date: Tue, 23 May 2023 13:38:28 +0200 Subject: [PATCH] WIP --- src/lib.rs | 1 + src/tokenize.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/tokenize.rs diff --git a/src/lib.rs b/src/lib.rs index f9205be..63aa4f1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,6 +15,7 @@ extern { mod faenc; mod op_defs; +mod tokenize; use faenc::fe_enc64_1; use faenc::FeReg; diff --git a/src/tokenize.rs b/src/tokenize.rs new file mode 100644 index 0000000..57060c7 --- /dev/null +++ b/src/tokenize.rs @@ -0,0 +1,52 @@ + +pub enum Token<'a> { + String(&'a str), + + Mnem(), + Register(), + Number(i64), + + // Keywords + Byte, + Word, + Dword, + Qword, + Ptr, + Lock, + Rep, + + + // Punctuation + DoubleColon, + Comma, +} + +pub struct CodePos { + line: u32, + col: u32 +} + +pub fn parse_stry<'a>(asm: &'a str) -> Vec<(CodePos, Token<'a>)> { + let mut out = Vec::new(); + + for line in asm.lines() { + let line = line.trim(); + // Remove comments + let line = match line.find(|c: char| c == '#' || c == ';') { + None => line, + Some(idx) => &line[..idx] + }; + let line = match line.find("//") { + None => line, + Some(idx) => &line[..idx] + }; + if line.is_empty() { + continue; + } + + let line = line.trim(); + + } + + out +} \ No newline at end of file