//! Utility functions for working with the Brainfuck interpreter. use std::path::Path; use crate::{engine::Engine, executor::execute, lex, parse, Error}; /// Utility function to execute a Brainfuck file. Lexes, parses and executes the /// input file. /// /// # Errors /// /// This function will return an error if reading the input file, parsing or /// execution fails. See documentation for [`crate::parser::parse`] and /// [`crate::executor::execute`]. pub fn execute_from_file( path: impl AsRef, tape: &mut [E::TapeInner], ) -> Result<(), Error> { let input = fs_err::read_to_string(path.as_ref())?; let operator_codes = lex(&input); let instructions = parse(&input, &operator_codes)?; let mut data_pointer = 0; execute::(&instructions, tape, &mut data_pointer)?; Ok(()) } /// Utility function to execute Brainfuck code. Lexes, parses and executes the /// input. /// /// # Errors /// /// This function will return an error if parsing or /// execution fails. See documentation for [`crate::parser::parse`] and /// [`crate::executor::execute`]. pub fn execute_from_str(input: &str, tape: &mut [E::TapeInner]) -> Result<(), Error> { let operator_codes = lex(input); let instructions = parse(input, &operator_codes)?; let mut data_pointer = 0; execute::(&instructions, tape, &mut data_pointer)?; Ok(()) }