complexpr/examples/bf.cxpr

68 lines
1.7 KiB
Plaintext

while true {
print("bf> ");
let program = input();
let tape = [0]*256;
let ptr = 0;
let i = 0;
while i < len(program) {
let op = program[i];
if op == '+' {
tape[ptr] += 1;
if tape[ptr] >= 256 {
tape[ptr] -= 256;
}
} elif op == '-' {
tape[ptr] -= 1;
if tape[ptr] < 0 {
tape[ptr] += 256;
}
} elif op == '>' {
ptr += 1;
} elif op == '<' {
ptr -= 1;
} elif op == '.' {
print(chr(tape[ptr]));
} elif op == ',' {
tape[ptr] = ord(input()[0]);
} elif op == '[' {
if tape[ptr] == 0 {
let depth = 0;
while true {
i += 1;
if program[i] == ']' {
if depth == 0 {
break;
}
depth -= 1;
} elif program[i] == '[' {
depth += 1;
}
}
}
} elif op == ']' {
if tape[ptr] != 0 {
let depth = 0;
let running = true;
while true {
i -= 1;
if program[i] == '[' {
if depth == 0 {
break;
}
depth -= 1;
} elif program[i] == ']' {
depth += 1;
}
}
}
}
if ptr >= len(tape) {
tape += [0]*256;
}
i += 1;
}
println("");
}