A simple BF interpreter, debugger and linter written in Go.
Add link to project page in README
Update README file to match website
Finalise builds.sr.ht integration



You can also use your local clone with git send-email.


Visit the project page on humaidq.ae

#1. Description


yabfig is a BF interpreter written in Go. It has also been extended to lint code (by removing un-interpreted characters) and to include a gdb-style interpreter.

#2. Requirements

The following packages must be installed on your system.

  • Go (tested with 1.12)
  • Git

#3. Copying and contributing

This program is written by Humaid AlQassimi, and is distributed under the BSD 2 Clause license.

#4. Download and install

$ go get -u git.sr.ht/~humaid/yabfig
$ go install git.sr.ht/~humaid/yabfig

#5. Usage

Usage: yabfig [option] <file>
	-lint		Lint (format) a Brainfuck file by removing spaces and non-instruction characters and output it to standard output.
	-debug		Run an interactive gdb-style debugger.

To run the example program hello-world.bf:

$ yabfig programs/hello-world.bf

Using the debugger to set breakpoints:

$ yabfig -debug programs/hello-world.bf
yabfig debugger for Brainfuck.
Commands are similar to gdb, type "help" for a list of compatible commands.
(yabfig-dbg) help
List of commands:

run -- Run the program
print [pos] -- Print value at memory position
next [count] -- Execute next instruction[s]
jump [pos] -- Jump to a program position and resume
break [pos] -- Add breakpoint at program position
clear [pos] -- Delete breakpoint at program position
watch [n = x] -- Set watchpoint when memory position n is x
kill -- Kill program execution
(yabfig-dbg) b 98
Breakpoint #1 at position 98
(yabfig-dbg) b 102
Breakpoint #2 at position 102
(yabfig-dbg) b 106
Breakpoint #3 at position 106
(yabfig-dbg) r
Running program: programs/hello-world.bf
Hello WorldBreakpoint hit at position 98
(yabfig-dbg) c
!Breakpoint hit at position 102
(yabfig-dbg) c

Breakpoint hit at position 106
(yabfig-dbg) c
Program exited

#6. Change log

  • v0.1 (Mar 8 2019)
    • Initial release
  • v0.2 (Mar 18 2019)
    • Added linter
    • Added unit tests
    • Interpreter as a struct with methods
  • v0.2.1 (Mar 18 2019)
    • Add GoDoc
    • Move Interpreter to a separate package
  • v0.3 (Mar 22 2019)
    • Add a simple gdb-style debugger
    • Improve interpreter functions