sandwich

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

commit da5958a125a7bb48ae76521fac2299bdfa6c6893
parent f197b1f493a19eef43b04aa0d55986e9f17e9069
Author: ~karx <karx@tilde.team>
Date:   Tue, 16 Feb 2021 18:42:06 +0000

Add basic support for running external programs

Diffstat:
M.gitignore | 2+-
Msrc/main.rs | 8++++++++
2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore @@ -1,2 +1,2 @@ /target -inp.txt +*.txt diff --git a/src/main.rs b/src/main.rs @@ -140,6 +140,13 @@ impl Program { builder } + fn run_external(&mut self, filename: String) { + // Read contents of the provided file and construct a symbolic Program from it + let contents = fs::read_to_string(filename).expect("Something went wrong reading the file"); + let mut prog = Program::from_string(contents); + prog.run(); + } + 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]; @@ -154,6 +161,7 @@ impl Program { 'd' => println!("{}", eval::do_math(self.args_or_vars(&arguments), '/')), 'l' => self.add_var(&arguments), 'f' => self.add_func(&arguments), + 'i' => self.run_external(arguments), _ => panic!("SyntaxError at opcode {}: Unknown opcode {}", self.pc, opcode), } }