Make variable notation explicit
This commit is contained in:
parent
088741aba4
commit
026466efac
37
src/main.rs
37
src/main.rs
|
@ -28,19 +28,38 @@ impl Program {
|
||||||
return Program{ data: op_list, pc: 0, vars: HashMap::new() };
|
return Program{ data: op_list, pc: 0, vars: HashMap::new() };
|
||||||
}
|
}
|
||||||
|
|
||||||
fn args_or_vars<'a>(&self, arguments: &'a str) -> String {
|
fn args_or_vars(&self, arguments: &str) -> String {
|
||||||
let mut deconstructed: Vec<char> = arguments.chars().collect();
|
let mut builder = String::from("");
|
||||||
|
let argument_vec: Vec<char> = arguments.chars().collect();
|
||||||
|
|
||||||
for (index, char) in arguments.chars().enumerate() {
|
for index in 0..argument_vec.len() {
|
||||||
let value = self.vars.get(&char);
|
let current_char = argument_vec[index];
|
||||||
|
let str_to_push: String;
|
||||||
|
|
||||||
match value {
|
if index > 0 {
|
||||||
Some(content) => deconstructed[index] = *content,
|
if argument_vec[index-1] == '$' {
|
||||||
None => {}
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if current_char == '$' {
|
||||||
|
let variable = argument_vec[index+1];
|
||||||
|
|
||||||
|
let key = self.vars.get(&variable);
|
||||||
|
match key {
|
||||||
|
Some(value) => str_to_push = value.to_string(),
|
||||||
|
None => panic!("NotFoundError: Variable {} has not been defined", variable)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
str_to_push = current_char.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
builder.push_str(&str_to_push);
|
||||||
}
|
}
|
||||||
|
|
||||||
deconstructed.into_iter().collect()
|
builder
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_var(&mut self, arguments: &str) {
|
fn add_var(&mut self, arguments: &str) {
|
||||||
|
@ -60,7 +79,7 @@ impl Program {
|
||||||
'm' => println!("{}", eval::do_math(self.args_or_vars(arguments), '*')),
|
'm' => println!("{}", eval::do_math(self.args_or_vars(arguments), '*')),
|
||||||
'd' => println!("{}", eval::do_math(self.args_or_vars(arguments), '/')),
|
'd' => println!("{}", eval::do_math(self.args_or_vars(arguments), '/')),
|
||||||
'l' => self.add_var(arguments),
|
'l' => self.add_var(arguments),
|
||||||
_ => panic!("SyntaxError at opcode {}!", self.pc)
|
_ => panic!("SyntaxError: No such opcode: {}", self.pc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue