commit f197b1f493a19eef43b04aa0d55986e9f17e9069
parent 66f5f3f9a350cb1071300eafd6c17d692832faf2
Author: ~karx <karx@tilde.team>
Date: Tue, 16 Feb 2021 18:23:40 +0000
Improve comment parser
Diffstat:
2 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/src/eval.rs b/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
+}+
\ No newline at end of file
diff --git a/src/main.rs b/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..];
-
- 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),
+ let arguments = eval::args_or_comments(&instruction[1..]);
+
+ 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),
+ }
}
}