Symbol-less assembler

This commit is contained in:
Hazem Krimi
2024-03-13 19:25:38 +01:00
parent 615575655a
commit 29b0babd19
+20 -15
View File
@@ -11,13 +11,13 @@ pub fn parse(instruction: &String) -> Instruction {
decimal: cloned.trim().to_string(), decimal: cloned.trim().to_string(),
}); });
} else { } else {
let re_dest_and_comp = Regex::new(r"=").unwrap(); let re_dest = Regex::new(r"=").unwrap();
let re_comp_and_jump = Regex::new(r";").unwrap(); let re_jump = Regex::new(r";").unwrap();
let dest_and_comp_exist = re_dest_and_comp.is_match(&cloned); let dest_exists = re_dest.is_match(&cloned);
let comp_and_jump_exist = re_comp_and_jump.is_match(&cloned); let jump_exists = re_jump.is_match(&cloned);
let dest = match dest_and_comp_exist { let dest = match dest_exists {
true => { true => {
let slice: Vec<&str> = cloned.split("=").collect(); let slice: Vec<&str> = cloned.split("=").collect();
@@ -26,22 +26,27 @@ pub fn parse(instruction: &String) -> Instruction {
false => None, false => None,
}; };
let comp = match comp_and_jump_exist { let comp = match (dest_exists, jump_exists) {
true => { (true, false) => {
let slice: Vec<&str> = cloned.split("=").collect(); let slice: Vec<&str> = cloned.split("=").collect();
// if jump_exist {
// let another_slice: Vec<&str> = slice.as_slice()[1].split(";").collect();
// Some(another_slice.as_slice()[0].to_string());
// }
Some(slice.as_slice()[1].to_string()) Some(slice.as_slice()[1].to_string())
} }
false => None, (false, true) => {
let slice: Vec<&str> = cloned.split(";").collect();
Some(slice.as_slice()[0].to_string())
}
(true, true) => {
let slice: Vec<&str> = cloned.split("=").collect();
let another_slice: Vec<&str> = slice.as_slice()[1].split(";").collect();
Some(another_slice.as_slice()[0].to_string())
}
(false, false) => None,
}; };
let jump = match comp_and_jump_exist { let jump = match jump_exists {
true => { true => {
let slice: Vec<&str> = cloned.split(";").collect(); let slice: Vec<&str> = cloned.split(";").collect();