Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A Brainfuck interpreter built in Ruby using Treetop.
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
examples
lib
Gemfile
LICENSE
README.md
Rakefile
VERSION
brainfucktt.gemspec

README.md

Brainfucktt

A Brainfuck interpreter built in Ruby using Treetop on treetop_bootstrap.

Brainfuck is an eight-instruction turing-clomplete programming language created in 1993 by Urban Müller, based on the more formal programming language P′′ created by Corrado Böhm in 1964.

It is designed to challenge and amuse programmers, and is not made to be suitable for practical use.

Install

Bundler: gem 'brainfucktt'

RubyGems: gem install brainfucktt

Brainfuck

Instructions

> Increment the data pointer (to point to the next cell to the right).

< Decrement the data pointer (to point to the next cell to the left).

+ Increment (increase by one) the byte at the data pointer.

- Decrement (decrease by one) the byte at the data pointer.

. Output the byte at the data pointer as an ASCII encoded character.

, Accept one byte of input, storing its value in the byte at the data pointer.

[ If the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching ] command.

] If the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching [ command.

Comments

Any character besides one of the 8 instructions above is not parsed and will be regarded as a comment and ignored.

Usage

Running

require 'brainfucktt'

# "Hello World!" written in Brainfuck
code = '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'

Brainfucktt.run(code)

Parsing

require 'brainfucktt'

# "Hello World!" written in Brainfuck
code = '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
parser = Brainfucktt.parse(code)

# Print out the AST of the code
p parser.tree

# Run the code within Ruby
parser.run

StringIO

Sometimes you do not want to use STDIN or STDOUT for the I/O of the Brainfuck program.

To do that, you must use the stdlib stringio and pass the :input and :output options to the run method:

require 'brainfucktt'
require 'stringio'

# "Hello World!" written in Brainfuck
code = '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'

output = StringIO.new
Brainfucktt.run(code, output: output)

p output.string # => "Hello World!\n"

Copyright

Copyright © 2012 Ryan Scott Lewis ryan@rynet.us.

The MIT License (MIT) - See LICENSE for further details.

Something went wrong with that request. Please try again.