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),
|
_ => 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) {
|
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),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue