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),
}
}
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) {
// Opcode is the first character, arguments are everything after the first char
let opcode = instruction.chars().collect::<Vec<char>>()[0];
let arguments = &instruction[1..];
let arguments = eval::args_or_comments(&instruction[1..]);
match opcode {
'p' => println!("{}", self.args_or_funcs(&self.args_or_vars(arguments))),
'a' => println!("{}", eval::do_math(self.args_or_vars(arguments), '+')),
's' => 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), '/')),
'l' => self.add_var(arguments),
'f' => self.add_func(arguments),
'#' => {} // Do nothing for comments
_ => panic!("SyntaxError at opcode {}: Unknown opcode {}", self.pc, opcode),
if opcode != '#' {
match opcode {
'p' => println!("{}", self.args_or_funcs(&self.args_or_vars(&arguments))),
'a' => println!("{}", eval::do_math(self.args_or_vars(&arguments), '+')),
's' => 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), '/')),
'l' => self.add_var(&arguments),
'f' => self.add_func(&arguments),
_ => panic!("SyntaxError at opcode {}: Unknown opcode {}", self.pc, opcode),
}
}
}