1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| impl BF { pub fn run_cmd(&mut self, cmd: String) -> Result<(), String> { self.cmds_str = cmd; self.parse_cmd()?; self.run(); Ok(()) }
pub fn parse_cmd(&mut self) -> Result<(), String> { let mut stack = vec![]; for (i, c) in self.cmds_str.as_bytes().iter().enumerate() { match c { b'[' => stack.push(i), b']' => match stack.pop() { Some(start) => { self.jumps.insert(start, i); self.jumps.insert(i, start); } None => { return Err(format!( "Syntax error: There is no '[' corresponding to ']' at {}", i )) } }, _ => {} } } if stack.is_empty() { Ok(()) } else { Err(format!( "Syntax error: There is no ']' corresponding to '[' as the end" )) } } }
|