sandwich

A funny programming language written in Rust
git clone https://tilde.team/~karx/sandwich.git
Log | Files | Refs | README | LICENSE

commit f197b1f493a19eef43b04aa0d55986e9f17e9069
parent 66f5f3f9a350cb1071300eafd6c17d692832faf2
Author: ~karx <karx@tilde.team>
Date:   Tue, 16 Feb 2021 18:23:40 +0000

Improve comment parser

Diffstat:
Msrc/eval.rs | 16++++++++++++++++
Msrc/main.rs | 25+++++++++++++------------
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), + } } }