all repos

gbf @ 35a5e15

⭐ gleaming brainfuck
4 files changed, 16 insertions(+), 19 deletions(-)
change interface of getting output
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2025-10-17 13:56:03 +0300
Change ID: ssqykzonqmupwozzvrzkqozquvwvpvoy
Parent: 2bfb08c
M README.md

@@ -5,19 +5,15 @@

## How to use? ### As library ```gleam -import gbf -import gleam/io - pub fn main() -> Nil { let input = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++." - let assert Ok(vm) = gbf.run(input) + let assert Ok(virtual_machine) = gbf.run(input) - vm - |> gbf.output + virtual_machine + |> vm.output |> io.println -// > "Hello World!" } ```
M src/gbf.gleam

@@ -8,25 +8,21 @@ import gleam/result

import gleam/string pub type Error { - Parser(parser.Error) - Eval(eval.Error) + Parser(reason: parser.Error) + Eval(reason: eval.Error) } pub fn run(source: String) -> Result(VirtualMachine, Error) { - let vm = + let bvm = source |> string.split(on: "") |> list.map(char.to_code) |> vm.new use ast <- result.try(parse_ast(source)) - use vm <- result.try(eval_ast(vm, ast)) + use bvm <- result.try(eval_ast(bvm, ast)) - Ok(vm) -} - -pub fn output(vm: VirtualMachine) -> String { - vm.output + Ok(bvm) } fn parse_ast(source: String) {
M src/gbf/vm.gleam

@@ -39,6 +39,10 @@ pub fn new(input: List(Int)) -> VirtualMachine {

VirtualMachine(input:, pointer: 0, cells: dict.new(), output: "") } +pub fn output(vm: VirtualMachine) -> String { + vm.output +} + pub fn get_cell(vm: VirtualMachine, pointer: Index) -> Result(Index, Error) { use pointer <- result.try(validate_tape_size(pointer))
M src/run.gleam

@@ -1,13 +1,14 @@

import gbf +import gbf/vm import gleam/io pub fn main() -> Nil { let input = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++." - let assert Ok(vm) = gbf.run(input) + let assert Ok(virtual_machine) = gbf.run(input) - vm - |> gbf.output + virtual_machine + |> vm.output |> io.println }