Add support for math operations

This commit is contained in:
Yash 2021-02-04 13:47:55 -06:00
parent 83a8899ff3
commit 7b2fc5a4c8
No known key found for this signature in database
GPG Key ID: A794DA2529474BA5
3 changed files with 31 additions and 3 deletions

View File

@ -1 +1,3 @@
pHello pWorld!
pHello pWorld!
a15-16 s19-4 m3-3 d9-3

21
src/eval.rs Normal file
View File

@ -0,0 +1,21 @@
pub fn do_math(arguments: &str, operator: char) -> u32 {
let split_args = arguments.split("-").collect::<Vec<&str>>();
let num1: u32 = match split_args[0].parse() {
Ok(num) => num,
Err(_e) => panic!("ArgumentError: Not a number: {}", split_args[0])
};
let num2: u32 = match split_args[1].parse() {
Ok(num) => num,
Err(_e) => panic!("ArgumentError: Not a number: {}", split_args[1])
};
match operator {
'+' => num1 + num2,
'-' => num1 - num2,
'*' => num1 * num2,
'/' => num1 / num2,
_ => panic!("SyntaxError: Unknown operator {}", operator)
}
}

View File

@ -3,6 +3,8 @@ use std::env;
use std::fmt;
use std::usize;
mod eval;
struct Program {
data: Vec<String>,
pc: usize
@ -24,12 +26,15 @@ impl Program {
}
fn eval(&self, instruction: &String) {
let instruction_vec: Vec<char> = instruction.chars().collect();
let opcode = instruction_vec[0];
let opcode = instruction.chars().collect::<Vec<char>>()[0];
let arguments = &instruction[1..];
match opcode {
'p' => println!("{}", arguments),
'a' => println!("{}", eval::do_math(arguments, '+')),
's' => println!("{}", eval::do_math(arguments, '-')),
'm' => println!("{}", eval::do_math(arguments, '*')),
'd' => println!("{}", eval::do_math(arguments, '/')),
_ => panic!("SyntaxError at opcode {}!", self.pc)
}
}