sandwich

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

commit 7b2fc5a4c86b986083d03bc4f36dea3b6eac06ab
parent 83a8899ff3b6ea88f6995be0a9009c5a30ead677
Author: Yash <nerdstep710@gmail.com>
Date:   Thu,  4 Feb 2021 13:47:55 -0600

Add support for math operations

Diffstat:
Minp.txt | 4+++-
Asrc/eval.rs | 22++++++++++++++++++++++
Msrc/main.rs | 9+++++++--
3 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/inp.txt b/inp.txt @@ -1 +1,3 @@ -pHello pWorld! +pHello pWorld! +a15-16 s19-4 m3-3 d9-3 + diff --git a/src/eval.rs b/src/eval.rs @@ -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) + } +}+ \ No newline at end of file diff --git a/src/main.rs b/src/main.rs @@ -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) } }