mirror of
https://github.com/Noratrieb/brainfuck.git
synced 2026-01-14 21:35:02 +01:00
interactive brainfuck repl
This commit is contained in:
parent
5cc058267b
commit
c17bea08e0
7 changed files with 168 additions and 43 deletions
|
|
@ -8,13 +8,16 @@
|
|||
use std::io::{Read, stdin, Write};
|
||||
|
||||
use crate::interpreter::{MEM_SIZE, Memory, minify, parse, Statement};
|
||||
use crate::interpreter::optimized::PrintMode;
|
||||
use crate::repl::BrainfuckState;
|
||||
|
||||
pub fn run(pgm: &str) -> String {
|
||||
let pgm = minify(pgm);
|
||||
let pgm = parse(pgm.chars().collect(), false);
|
||||
let pgm = parse(pgm.chars(), PrintMode::ToString);
|
||||
interpret(&pgm)
|
||||
}
|
||||
|
||||
|
||||
fn interpret(pgm: &[Statement]) -> String {
|
||||
let mut out = String::new();
|
||||
let mut pointer: usize = 0;
|
||||
|
|
@ -27,6 +30,12 @@ fn interpret(pgm: &[Statement]) -> String {
|
|||
out
|
||||
}
|
||||
|
||||
pub fn interpret_with_state(pgm: &[Statement], state: &mut BrainfuckState) {
|
||||
for s in pgm {
|
||||
execute(s, &mut state.memory, &mut state.pointer, &mut String::new())
|
||||
}
|
||||
}
|
||||
|
||||
fn execute(statement: &Statement, mem: &mut Memory, pointer: &mut usize, out: &mut String) {
|
||||
match statement {
|
||||
Statement::R => if *pointer == MEM_SIZE - 1 { *pointer = 0 } else { *pointer += 1 },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue