4 files changed,
16 insertions(+),
19 deletions(-)
Author:
Oleksandr Smirnov
olexsmir@gmail.com
Committed at:
2025-10-17 13:56:03 +0300
Change ID:
ssqykzonqmupwozzvrzkqozquvwvpvoy
Parent:
2bfb08c
jump to
| M | README.md |
| M | src/gbf.gleam |
| M | src/gbf/vm.gleam |
| M | src/run.gleam |
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 }