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() };
|
||||
}
|
||||
|
||||
fn args_or_vars<'a>(&self, arguments: &'a str) -> String {
|
||||
let mut deconstructed: Vec<char> = arguments.chars().collect();
|
||||
fn args_or_vars(&self, arguments: &str) -> String {
|
||||
let mut builder = String::from("");
|
||||
let argument_vec: Vec<char> = arguments.chars().collect();
|
||||
|
||||
for (index, char) in arguments.chars().enumerate() {
|
||||
let value = self.vars.get(&char);
|
||||
for index in 0..argument_vec.len() {
|
||||
let current_char = argument_vec[index];
|
||||
let str_to_push: String;
|
||||
|
||||
match value {
|
||||
Some(content) => deconstructed[index] = *content,
|
||||
None => {}
|
||||
if index > 0 {
|
||||
if argument_vec[index-1] == '$' {
|
||||
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) {
|
||||
|
@ -60,7 +79,7 @@ impl Program {
|
|||
'm' => println!("{}", eval::do_math(self.args_or_vars(arguments), '*')),
|
||||
'd' => println!("{}", eval::do_math(self.args_or_vars(arguments), '/')),
|
||||
'l' => self.add_var(arguments),
|
||||
_ => panic!("SyntaxError at opcode {}!", self.pc)
|
||||
_ => panic!("SyntaxError: No such opcode: {}", self.pc)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue