From 3923b278fc5887ca805a4fec2837035feb5bc3ab Mon Sep 17 00:00:00 2001 From: aaron Date: Mon, 20 Sep 2021 14:04:07 +0200 Subject: [PATCH] try to implement parser --- src/machine.rs | 10 +++++++--- src/main.rs | 20 +++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/machine.rs b/src/machine.rs index 04ad5e4..a9f3779 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -29,18 +29,22 @@ pub struct Machine<'a> { } impl<'a> Machine<'a> { - pub fn new(code: Vec, input: &'a mut BufReader>, output: &'a mut BufWriter>) -> Self { + pub fn new(code: &str, input: &'a mut BufReader>, output: &'a mut BufWriter>) -> Self { Machine { ip: 0, mp: 0, - buf: [0;1], + buf: [0; 1], memory: [0; 50000], - code, + code: parse(code), input, output, } } + pub fn parse(code: &str){ + return; + } + pub fn execute(&mut self){ // prevent ip from getting out of bounds while self.ip < self.code.len() { diff --git a/src/main.rs b/src/main.rs index 2c384b6..10aa188 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,11 @@ use std::env; use std::fs; -use std::io::{stdin, stdout, BufReader, Read}; +use std::io::{stdin, stdout, BufReader, BufWriter, Read, Write}; use rbfckr::machine::Machine; fn main() { + // try to read from file let file_name = match env::args().nth(1){ None => { println!("Usage: rbfckr "); @@ -12,14 +13,23 @@ fn main() { } Some(file_name) => file_name, }; - - let bf_code = match fs::read_to_string(file_name) { - Ok(bf_code) => bf_code, + + // try to copy brainfuck code to string + let code = match fs::read_to_string(file_name) { + Ok(code) => code, Err(e) => { println!("Error reading file: {}", e); return; } }; + + // create reader and writer objects + let mut reader: BufReader> = BufReader::new(Box::new(stdin())); + let mut writer: BufWriter> = BufWriter::new(Box::new(stdout())); + + // create machine + let mut machine = Machine::new(code, &mut reader, &mut writer); - println!("{}", bf_code); + // execute code + machine.execute(); }