Improve comment parser

This commit is contained in:
~karx 2021-02-16 18:23:40 +00:00
parent 66f5f3f9a3
commit f197b1f493
2 changed files with 27 additions and 11 deletions

View File

@ -19,3 +19,18 @@ pub fn do_math(arguments: String, operator: char) -> u32 {
_ => panic!("SyntaxError: Unknown operator {}", operator), _ => panic!("SyntaxError: Unknown operator {}", operator),
} }
} }
pub fn args_or_comments(arguments: &str) -> String {
let argument_vec: Vec<char> = arguments.chars().collect();
let mut builder: String = String::from("");
for char in argument_vec {
if char == '#' {
break;
} else {
builder.push_str(&char.to_string());
}
}
builder
}

View File

@ -143,18 +143,19 @@ impl Program {
fn parse(&mut self, instruction: &String) { fn parse(&mut self, instruction: &String) {
// Opcode is the first character, arguments are everything after the first char // Opcode is the first character, arguments are everything after the first char
let opcode = instruction.chars().collect::<Vec<char>>()[0]; let opcode = instruction.chars().collect::<Vec<char>>()[0];
let arguments = &instruction[1..]; let arguments = eval::args_or_comments(&instruction[1..]);
match opcode { if opcode != '#' {
'p' => println!("{}", self.args_or_funcs(&self.args_or_vars(arguments))), match opcode {
'a' => println!("{}", eval::do_math(self.args_or_vars(arguments), '+')), 'p' => println!("{}", self.args_or_funcs(&self.args_or_vars(&arguments))),
's' => println!("{}", eval::do_math(self.args_or_vars(arguments), '-')), 'a' => println!("{}", eval::do_math(self.args_or_vars(&arguments), '+')),
'm' => println!("{}", eval::do_math(self.args_or_vars(arguments), '*')), 's' => println!("{}", eval::do_math(self.args_or_vars(&arguments), '-')),
'd' => println!("{}", eval::do_math(self.args_or_vars(arguments), '/')), 'm' => println!("{}", eval::do_math(self.args_or_vars(&arguments), '*')),
'l' => self.add_var(arguments), 'd' => println!("{}", eval::do_math(self.args_or_vars(&arguments), '/')),
'f' => self.add_func(arguments), 'l' => self.add_var(&arguments),
'#' => {} // Do nothing for comments 'f' => self.add_func(&arguments),
_ => panic!("SyntaxError at opcode {}: Unknown opcode {}", self.pc, opcode), _ => panic!("SyntaxError at opcode {}: Unknown opcode {}", self.pc, opcode),
}
} }
} }