Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A programming language that you'll :heart:
Ruby
Branch: master

Merge pull request #4 from jburdeezy/patch-1 …

Fixed typo: langauge -> language
latest commit 49a2711422
@steveklabnik authored

README.md

Mojikun

A Brainfuck based on Emoji.

Instructions:

πŸ‘‰ Move the pointer to the right
πŸ‘ˆ Move the pointer to the left
πŸ‘ Increment the memory cell under the pointer
πŸ‘Ž Decrement the memory cell under the pointer
πŸ’» Output the character signified by the cell at the pointer
πŸ’Ύ Input a character and store it in the cell at the pointer
πŸ”ƒ Jump past the matching πŸ”™ if the cell under the pointer is 0
πŸ”™ Jump back to the matching πŸ”ƒ if the cell under the pointer is nonzero

Installation

Add this line to your application's Gemfile:

gem 'mojikun'

And then execute:

$ bundle

Or install it yourself as:

$ gem install mojikun

Usage

A mojikun binary is provided to let you run programs. There is an examples directory which has some examples. Use mojikun like any other interpreter:

mojikun examples/hello.moji

.moji is the preferred file ending for Mojikun.

Structure

While Mojikun is a simple language that could be interpreted in a 40ish line script, I wanted to make it more like a 'real language' that would have all of the parts and design that a more full one has. I may use this foundation later to build more complex things.

We can see these parts in motion by examining the binary:

$ cat bin/mojikun 
#!/usr/bin/env ruby

require 'mojikun'

source_code = ARGF.read.chomp

tokens = Mojikun::Lexer.new(source_code).call

ast = Mojikun::Parser.new(tokens).call

runtime = Mojikun::Runtime.new
interpreter = Mojikun::Interpreter.new(runtime)

interpreter.evaluate(ast)

We have a Lexer, Parser, Runtime, and Interpreter. The Lexer turns the stream of input into a series of tokens. The Parser takes those tokens and turns them into an AST, which is more of a list than a tree, really. We generate a new Runtime, which has all of the internal state we need to make the language work: the data array, the program counter, etc. Then, the Interpreter takes that AST and evaluates it in the context of the Runtime.

Pretty simple!

Testing

Mojikun is fully tested with MiniTest. I actually wrote it in a TDD fashion. To run the tests, simply

$ rake test

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request
Something went wrong with that request. Please try again.