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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
//! ## Basic usage //! //! ### Run program with interpreter //! //! ```no_run //! # use std::error::Error; //! # fn main() -> Result<(), Box<dyn Error>> { //! use cranefack::{parse, optimize_with_config, OptimizeConfig, Interpreter}; //! //! // Parse program //! let mut program = parse("++[<].")?; //! //! // Optimize with optimization level 2 //! optimize_with_config(&mut program, &OptimizeConfig::o2()); //! //! // Create new interpreter reading from stdin and writing to stdout //! let mut interpreter = Interpreter::new(std::io::stdin(), std::io::stdout()); //! //! // Execute program //! interpreter.execute(&program); //! //! # Ok(()) //! # } //! ``` //! ### Run program with jit //! //! ```no_run //! # use std::error::Error; //! # fn main() -> Result<(), Box<dyn Error>> { //! use cranefack::{parse, optimize_with_config, OptimizeConfig, CompiledJitModule}; //! //! // Parse program //! let mut program = parse("++[<].")?; //! //! // Create optimization config for level 2 //! let opt_level = OptimizeConfig::o2(); //! //! // Optimize with optimization level 2 //! optimize_with_config(&mut program, &opt_level); //! //! // Compile program into module //! let module = CompiledJitModule::new(&program, &opt_level)?; //! //! // Execute compiled module reading from stdin and writing to stdout //! module.execute(std::io::stdin(), std::io::stdout()); //! //! # Ok(()) //! # } //! ``` mod parser; mod errors; mod optimizations; mod backends; mod analyzer; mod ir; pub use backends::interpreter::Interpreter; pub use backends::cranelift::CompiledJitModule; pub use backends::rust::compile_to_rust; pub use errors::{CraneFackError, ParserError, RuntimeError, CompilerError}; pub use analyzer::{analyze, Warning, WarningType}; pub use optimizations::{optimize, optimize_with_config, OptimizeConfig}; pub use parser::{parse, Program};