Improve comment parser
This commit is contained in:
parent
66f5f3f9a3
commit
f197b1f493
15
src/eval.rs
15
src/eval.rs
|
@ -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
|
||||
}
|
23
src/main.rs
23
src/main.rs
|
@ -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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue